Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 4개 있습니다.)
개발 환경 구성: 296. .NET Core 프로젝트를 NuGet Gallery에 배포하는 방법
; https://www.sysnet.pe.kr/2/0/11034

.NET Framework: 793. C# - REST API를 이용해 NuGet 저장소 제어
; https://www.sysnet.pe.kr/2/0/11696

개발 환경 구성: 423. NuGet 패키지 제작 - Native와 Managed DLL을 분리하는 방법
; https://www.sysnet.pe.kr/2/0/11793

개발 환경 구성: 494. NuGet - nuspec의 패키지 스키마 버전(네임스페이스) 업데이트 방법
; https://www.sysnet.pe.kr/2/0/12234




NuGet - nuspec의 패키지 스키마 버전(네임스페이스) 업데이트 방법

지난 글에서,

C# - Source Generator를 적용한 XmlCodeGenerator
; https://www.sysnet.pe.kr/2/0/12228

만든 XmlSrcGenerator를 위한 nuspec은 대충 다음과 같은 식입니다.

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>XmlSrcGenerator</id>
    <version>1.0.4</version>
    <title>C# Source Generator with XML + XSLT</title>
    <authors>SeongTae Jeong</authors>
    <owners>SeongTae Jeong</owners>
    <developmentDependency>true</developmentDependency>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <licenseUrl>https://licenses.nuget.org/MIT</licenseUrl>
    <projectUrl>https://github.com/stjeong/XmlCodeGenerator</projectUrl>
    <description>C# Source Generator with XML + XSLT (same as https://marketplace.visualstudio.com/items?itemName=SeongTaeJeong.XmlCodeGenerator)</description>
    <tags>Analyzers CSharp xml xslt</tags>
  </metadata>
</package>

그런데, 여기서 package 노드의 xmlns를 다음과 같이 업데이트해봤는데요,

<package xmlns="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd">

이상하게 "nuget pack"을 한 후 생성된 nupkg의 압축을 해제해서 확인해 보면 다시 "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"로 돌아가 있는 것을 확인할 수 있습니다. 혹시 업데이트 방법이 없을까요? ^^

그래서 찾아봤더니 다음의 글이 나옵니다.

How to specify Nuget schema?
; https://stackoverflow.com/questions/33225461/how-to-specify-nuget-schema

그러니까, 저 스키마 버전은 nuget.exe가 내부적으로 자동 지정한다는 것입니다. 그러면서 소스 코드 링크를 걸어주었는데, 실제로 다음과 같은 규칙을 확인할 수 있습니다.

// PackageBuilder
// https://github.com/NuGet/NuGet2/blob/2.8.7/src/Core/Authoring/PackageBuilder.cs#L284-L299

private static int DetermineMinimumSchemaVersion(Collection<IPackageFile> Files)
{
    if (HasXdtTransformFile(Files))
    {
        // version 5
        return ManifestVersionUtility.XdtTransformationVersion;
    }

    if (RequiresV4TargetFrameworkSchema(Files))
    {
        // version 4
        return ManifestVersionUtility.TargetFrameworkSupportForDependencyContentsAndToolsVersion;
    }

    return ManifestVersionUtility.DefaultVersion;
}

// ManifestSchemaUtility
// https://github.com/NuGet/NuGet2/blob/2.8.7/src/Core/Authoring/ManifestVersionUtility.cs#L25-L52

private static int GetMaxVersionFromMetadata(ManifestMetadata metadata)
{
    // Important: check for version 5 before version 4
    bool referencesHasTargetFramework =
        metadata.ReferenceSets != null &&
        metadata.ReferenceSets.Any(r => r.TargetFramework != null);

    if (referencesHasTargetFramework)
    {
        return TargetFrameworkSupportForReferencesVersion;
    }

    bool dependencyHasTargetFramework =
        metadata.DependencySets != null &&
        metadata.DependencySets.Any(d => d.TargetFramework != null);
    if (dependencyHasTargetFramework)
    {
        return TargetFrameworkSupportForDependencyContentsAndToolsVersion;
    }

    SemanticVersion semanticVersion;
    if (SemanticVersion.TryParse(metadata.Version, out semanticVersion) && !String.IsNullOrEmpty(semanticVersion.SpecialVersion))
    {
        return SemverVersion;
    }

    return DefaultVersion;
}

여러분들은 저처럼 애쓰지 말라는 의미로 기록을 남깁니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/19/2020]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 76  77  78  79  80  81  [82]  83  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11883정성태5/3/201926042.NET Framework: 827. C# - 인터넷 시간 서버로부터 받은 시간을 윈도우에 적용하는 방법파일 다운로드1
11882정성태5/2/201922297.NET Framework: 826. (번역글) .NET Internals Cookbook Part 11 - Various C# riddles파일 다운로드1
11881정성태4/28/201922428오류 유형: 532. .NET Core 프로젝트로 마이그레이션 시 "CS0579 Duplicate 'System.Reflection.AssemblyCompanyAttribute' attribute" 오류 발생
11880정성태4/25/201918227오류 유형: 531. 이벤트 로그 오류 - Task Scheduling Error: m->NextScheduledSPRetry 1547, m->NextScheduledEvent 1547
11879정성태4/24/201926624.NET Framework: 825. (번역글) .NET Internals Cookbook Part 10 - Threads, Tasks, asynchronous code and others파일 다운로드2
11878정성태4/22/201922449.NET Framework: 824. (번역글) .NET Internals Cookbook Part 9 - Finalizers, queues, card tables and other GC stuff파일 다운로드1
11877정성태4/22/201922438.NET Framework: 823. (번역글) .NET Internals Cookbook Part 8 - C# gotchas파일 다운로드1
11876정성태4/21/201921542.NET Framework: 822. (번역글) .NET Internals Cookbook Part 7 - Word tearing, locking and others파일 다운로드1
11875정성태4/21/201922487오류 유형: 530. Visual Studo에서 .NET Core 프로젝트를 열 때 "One or more errors occurred." 오류 발생
11874정성태4/20/201922654.NET Framework: 821. (번역글) .NET Internals Cookbook Part 6 - Object internals파일 다운로드1
11873정성태4/19/201921198.NET Framework: 820. (번역글) .NET Internals Cookbook Part 5 - Methods, parameters, modifiers파일 다운로드1
11872정성태4/17/201921999.NET Framework: 819. (번역글) .NET Internals Cookbook Part 4 - Type members파일 다운로드1
11871정성태4/16/201920788.NET Framework: 818. (번역글) .NET Internals Cookbook Part 3 - Initialization tricks [3]파일 다운로드1
11870정성태4/16/201918993.NET Framework: 817. Process.Start로 실행한 콘솔 프로그램의 출력 결과를 얻는 방법파일 다운로드1
11869정성태4/15/201924791.NET Framework: 816. (번역글) .NET Internals Cookbook Part 2 - GC-related things [2]파일 다운로드2
11868정성태4/15/201920779.NET Framework: 815. CER(Constrained Execution Region)이란?파일 다운로드1
11867정성태4/15/201919986.NET Framework: 814. Critical Finalizer와 SafeHandle의 사용 의미파일 다운로드1
11866정성태4/9/201923155Windows: 159. 네트워크 공유 폴더(net use)에 대한 인증 정보는 언제까지 유효할까요?
11865정성태4/9/201918858오류 유형: 529. 제어판 - C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools is not accessible.
11864정성태4/9/201917567오류 유형: 528. '...' could be '0': this does not adhere to the specification for the function '...'
11863정성태4/9/201917426디버깅 기술: 127. windbg - .NET x64 EXE의 EntryPoint
11862정성태4/7/201920096개발 환경 구성: 437. .NET EXE의 ASLR 기능을 끄는 방법
11861정성태4/6/201919479디버깅 기술: 126. windbg - .NET x86 CLR2/CLR4 EXE의 EntryPoint
11860정성태4/5/201923325오류 유형: 527. Visual C++ 컴파일 오류 - error C2220: warning treated as error - no 'object' file generated
11859정성태4/4/201920539디버깅 기술: 125. WinDbg로 EXE의 EntryPoint에서 BP 거는 방법
11858정성태3/27/201921391VC++: 129. EXE를 LoadLibrary로 로딩해 PE 헤더에 있는 EntryPoint를 직접 호출하는 방법파일 다운로드1
... 76  77  78  79  80  81  [82]  83  84  85  86  87  88  89  90  ...