다음을 통해 공유


NuGet대상으로 압축 및 복원 MSBuild

NuGet 4.0+

PackageReference 형식 NuGet 을 사용하면 4.0 이상에서는 모든 매니페스트 메타데이터를 별도의 .nuspec 파일을 사용하는 대신 프로젝트 파일 내에 직접 저장할 수 있습니다.

MSBuild 15.1 이상에서는 NuGet 아래 설명된 대로 대상과 restore 대상을 pack 가진 일류 MSBuild 시민이기도 합니다. 이러한 대상을 사용하면 다른 MSBuild 작업 또는 대상과 NuGet 마찬가지로 작업할 수 있습니다. 을 사용하여 패키지를 만드는 지침은 다음을 NuGet 사용하여MSBuildMSBuild 패키지 만들기를 NuGet 참조하세요. (대상 NuGet 3.x 이하 버전에서는 대신 CLI를 통해 NuGet 팩복원 명령을 사용합니다.)

대상 빌드 순서

restore 대상이기 MSBuild 때문에 pack 액세스하여 워크플로를 향상시킬 수 있습니다. 예를 들어 패키지를 압축한 후 네트워크 공유에 패키지를 복사하려는 경우를 가정해 보겠습니다. 이렇게 하려면 프로젝트 파일에 다음을 추가하면 됩니다.

<Target Name="CopyPackage" AfterTargets="Pack">
  <Copy
    SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
    DestinationFolder="\\myshare\packageshare\"
    />
</Target>

마찬가지로 작업을 작성하고, 고유한 대상을 MSBuild 작성하고, 태스크의 MSBuild 속성을 사용할 NuGet 수 있습니다.

참고 항목

$(OutputPath) 가 상대적이며 프로젝트 루트에서 명령을 실행 중일 것으로 예상합니다.

pack 대상

형식 msbuild -t:packPackageReference 사용하는 .NET 프로젝트의 경우 패키지 만들기에 사용할 프로젝트 파일의 입력을 NuGet 그립니다.

다음 표에서는 첫 번째 <PropertyGroup> 노드 내의 MSBuild 프로젝트 파일에 추가할 수 있는 속성에 대해 설명합니다. Visual Studio 2017 이상에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 {project_name} 편집을 선택하여 이러한 편집 작업을 쉽게 수행할 수 있습니다. 편의를 위해 테이블은 파일의 해당 속성으로 .nuspec 구성됩니다.

참고 항목

OwnersSummary 속성은 .에서 .nuspec 지원 MSBuild되지 않습니다.

특성/nuspec 값 MSBuild 속성 기본값 주의
Id PackageId $(AssemblyName) $(AssemblyName) 에서 MSBuild
Version PackageVersion 버전 셈버와 호환됩니다(예: < a0/1.0.0-beta>1.0.0)1.0.0-beta-00345. Version 설정되지 않은 경우 기본값으로 설정됩니다.
VersionPrefix VersionPrefix empty 덮어쓰기 설정 PackageVersionVersionPrefix
VersionSuffix VersionSuffix empty 덮어쓰기 설정 PackageVersionVersionSuffix
Authors Authors 현재 사용자의 사용자 이름 .org의 프로필 이름과 nuget일치하는 패키지 작성자의 세미콜론으로 구분된 목록입니다. 이러한 항목은 .org의 NuGet 갤러리에 nuget표시되며 동일한 작성자가 패키지를 상호 참조하는 데 사용됩니다.
Owners 해당 없음 에 없음 nuspec
Title Title $(PackageId) 일반적으로 UI에 사용되는 패키지의 제목은 .org 및 Visual Studio의 패키지 관리자 표시됩니다nuget.
Description Description "패키지 설명" 어셈블리에 대한 자세한 설명입니다. PackageDescription을 지정하지 않으면 이 속성이 패키지 설명으로도 사용됩니다.
Copyright Copyright empty 패키지에 대한 저작권 정보입니다.
RequireLicenseAcceptance PackageRequireLicenseAcceptance false 클라이언트에서, 소비자가 패키지를 설치하기 전에 패키지 라이선스에 동의하도록 물어야 할지 여부를 지정하는 부울 값입니다.
license PackageLicenseExpression empty <license type="expression">에 해당합니다. 라이선스 식 또는 라이선스 파일 압축을 참조하세요.
license PackageLicenseFile empty SPDX 식별자가 할당되지 않은 사용자 지정 라이선스 또는 라이선스를 사용하는 경우 패키지 내의 라이선스 파일 경로입니다. 참조된 라이선스 파일을 명시적으로 압축해야 합니다. <license type="file">에 해당합니다. 라이선스 식 또는 라이선스 파일 압축을 참조하세요.
LicenseUrl PackageLicenseUrl empty PackageLicenseUrl는 사용되지 않습니다. 대신 PackageLicenseExpression 또는 PackageLicenseFile를 사용하십시오.
ProjectUrl PackageProjectUrl empty
Icon PackageIcon empty 패키지 아이콘으로 사용할 패키지의 이미지에 대한 경로입니다. 참조된 아이콘 이미지 파일을 명시적으로 압축해야 합니다. 자세한 내용은 아이콘 이미지 파일icon 메타데이터 압축을 참조하세요.
IconUrl PackageIconUrl empty PackageIconUrlPackageIcon에 대해 더 이상 사용되지 않습니다. 그러나 최상의 다운레벨 환경을 PackageIconUrl PackageIcon위해 .
Readme PackageReadmeFile empty 참조된 추가 정보 파일을 명시적으로 압축해야 합니다.
Tags PackageTags empty 패키지를 지정하는 세미콜론으로 구분된 태그 목록입니다.
ReleaseNotes PackageReleaseNotes empty 패키지에 대한 릴리스 정보입니다.
Repository/Url RepositoryUrl empty 소스 코드를 복제하거나 검색하는 데 사용되는 리포지토리 URL입니다. 예: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
Repository/Type RepositoryType empty 리포지토리 유형입니다. 예: git (기본값), tfs.
Repository/Branch RepositoryBranch empty 선택적 리포지토리 분기 정보입니다. RepositoryUrl도 이 속성을 포함하도록 지정해야 합니다. 예: master (NuGet 4.7.0 이상).
Repository/Commit RepositoryCommit empty 패키지가 빌드된 소스를 나타내는 선택적 리포지토리 커밋 또는 변경 집합입니다. RepositoryUrl도 이 속성을 포함하도록 지정해야 합니다. 예: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0 이상).
PackageType <PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> 패키지의 용도를 나타냅니다. 패키지 형식은 패키지 ID와 동일한 형식을 사용하며 ;. 패키지 형식은 문자열과 Version 문자열을 추가하여 버전이 , 지정될 수 있습니다. 패키지 유형 설정NuGet(NuGet3.5.0 이상)을 참조하세요.
Summary 지원되지 않음

pack 대상 입력

속성 설명
IsPackable 프로젝트를 압축할 수 있는지 여부를 지정하는 부울 값입니다. 기본값은 true입니다.
SuppressDependenciesWhenPacking true 생성된 NuGet 패키지에서 패키지 종속성을 표시하지 않도록 설정합니다.
PackageVersion 결과 패키지의 버전을 지정합니다. 모든 형식의 버전 문자열을 NuGet 허용합니다. 기본값은 $(Version)의 값입니다. 즉 프로젝트에서 Version 속성의 값입니다.
PackageId 결과 패키지의 이름을 지정합니다. 지정하지 않으면 pack 작업에서 기본값으로 AssemblyName을 사용하거나 패키지 이름으로 디렉터리 이름을 사용합니다.
PackageDescription UI 표시를 위한 패키지에 대한 자세한 설명입니다.
Authors .org의 프로필 이름과 nuget일치하는 패키지 작성자의 세미콜론으로 구분된 목록입니다. 이러한 항목은 .org의 NuGet 갤러리에 nuget표시되며 동일한 작성자가 패키지를 상호 참조하는 데 사용됩니다.
Description 어셈블리에 대한 자세한 설명입니다. PackageDescription을 지정하지 않으면 이 속성이 패키지 설명으로도 사용됩니다.
Copyright 패키지에 대한 저작권 정보입니다.
PackageRequireLicenseAcceptance 클라이언트에서, 소비자가 패키지를 설치하기 전에 패키지 라이선스에 동의하도록 물어야 할지 여부를 지정하는 부울 값입니다. 기본값은 false입니다.
DevelopmentDependency 패키지가 다른 패키지의 종속성으로 포함되지 않도록 패키지를 개발 전용 종속성으로 표시할지 여부를 지정하는 부울 값입니다. PackageReference (NuGet4.8 이상)을 사용하는 경우 이 플래그는 컴파일 시간 자산이 컴파일에서 제외됨을 의미합니다. 자세한 내용은 PackageReference에 대한 DevelopmentDependency 지원을 참조하세요.
PackageLicenseExpression SPDX 라이선스 식별자 또는 식(예: Apache-2.0. 자세한 내용은 라이선스 식 또는 라이선스 파일 압축을 참조 하세요.
PackageLicenseFile SPDX 식별자가 할당되지 않은 사용자 지정 라이선스 또는 라이선스를 사용하는 경우 패키지 내의 라이선스 파일 경로입니다.
PackageLicenseUrl PackageLicenseUrl는 사용되지 않습니다. 대신 PackageLicenseExpression 또는 PackageLicenseFile를 사용하십시오.
PackageProjectUrl
PackageIcon 패키지의 루트를 기준으로 패키지 아이콘 경로를 지정합니다. 자세한 내용은 아이콘 이미지 파일 압축을 참조 하세요.
PackageReleaseNotes 패키지에 대한 릴리스 정보입니다.
PackageReadmeFile 패키지에 대한 추가 정보입니다.
PackageTags 패키지를 지정하는 세미콜론으로 구분된 태그 목록입니다.
PackageOutputPath 압축된 패키지가 삭제되는 출력 경로를 결정합니다. 기본값은 $(OutputPath)입니다.
IncludeSymbols 이 부울 값은 프로젝트가 압축될 때 패키지에서 추가 기호 패키지를 만들어야 하는지 여부를 나타냅니다. 기호 패키지의 형식은 SymbolPackageFormat 속성으로 제어됩니다. 자세한 내용은 IncludeSymbols를 참조 하세요.
IncludeSource 이 부울 값은 팩 프로세스에서 소스 패키지를 만들어야 하는지 여부를 나타냅니다. 소스 패키지에는 PDB 파일뿐만 아니라 라이브러리의 소스 코드가 포함되어 있습니다. 소스 파일은 결과 패키지 파일의 src/ProjectName 디렉터리 아래에 놓입니다. 자세한 내용은 IncludeSource를 참조 하세요.
PackageType
IsTool 모든 출력 파일이 lib 폴더 대신 tools 폴더에 복사되는지 여부를 지정합니다. 자세한 내용은 IsTool을 참조하세요.
RepositoryUrl 소스 코드를 복제하거나 검색하는 데 사용되는 리포지토리 URL입니다. 예: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
RepositoryType 리포지토리 유형입니다. 예: git (기본값), tfs.
RepositoryBranch 선택적 리포지토리 분기 정보입니다. RepositoryUrl도 이 속성을 포함하도록 지정해야 합니다. 예: master (NuGet 4.7.0 이상).
RepositoryCommit 패키지가 빌드된 소스를 나타내는 선택적 리포지토리 커밋 또는 변경 집합입니다. RepositoryUrl도 이 속성을 포함하도록 지정해야 합니다. 예: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0 이상).
SymbolPackageFormat 기호 패키지의 형식을 지정합니다. "symbols.nupkg"이면 PDB, DLL 및 기타 출력 파일이 포함된 .symbols.nupkg 확장으로 레거시 기호 패키지가 만들어집니다. "snupkg"이면 이식 가능한 PDB를 포함하는 snupkg 기호 패키지가 만들어집니다. 기본값은 "symbols.nupkg"입니다.
NoPackageAnalysis 패키지를 빌드한 후 패키지 분석을 실행해서는 안 되도록 pack 지정합니다.
MinClientVersion .exe 및 Visual Studio 패키지 관리자 적용nuget하여 이 패키지를 설치할 수 있는 클라이언트의 NuGet 최소 버전을 지정합니다.
IncludeBuildOutput 이 부울 값은 빌드 출력 어셈블리를 .nupkg 파일에 압축해야 할지 여부를 지정합니다.
IncludeContentInPack 이 부울 값은 형식 Content 이 있는 항목이 결과 패키지에 자동으로 포함되는지 여부를 지정합니다. 기본값은 true입니다.
BuildOutputTargetFolder 출력 어셈블리를 배치할 폴더를 지정합니다. 출력 어셈블리(및 기타 출력 파일)는 해당 프레임워크 폴더에 복사됩니다. 자세한 내용은 출력 어셈블리를 참조 하세요.
ContentTargetFolders 모든 콘텐츠 파일을 지정하지 않은 경우 PackagePath 모든 콘텐츠 파일을 이동해야 하는 기본 위치를 지정합니다. 기본값은 "content;contentFiles"입니다. 자세한 내용은 패키지에 콘텐츠 포함을 참조하세요.
NuspecFile 압축에 사용되는 파일의 .nuspec 상대 경로 또는 절대 경로입니다. 지정된 경우 패키징 정보에만 사용되며 프로젝트의 모든 정보는 사용되지 않습니다. 자세한 내용은 을 사용하여 압축을 .nuspec참조하세요.
NuspecBasePath 파일의 기본 경로입니다 .nuspec . 자세한 내용은 을 사용하여 압축을 .nuspec참조하세요.
NuspecProperties key=value 쌍의 세미콜론으로 구분된 목록입니다. 자세한 내용은 을 사용하여 압축을 .nuspec참조하세요.

pack 시나리오

종속성 표시 안 함

생성된 NuGet 패키지에서 패키지 종속성을 표시하지 않도록 설정 SuppressDependenciesWhenPacking true 하면 생성된 nupkg 파일에서 모든 종속성을 건너뛸 수 있습니다.

PackageIconUrl

PackageIconUrl 는 속성에 찬성하여 더 이상 사용되지 않습니다 PackageIcon . NuGet 5.3 및 Visual Studio 2019 버전 16.3 pack 부터 패키지 메타데이터가 지정하는 경우 NU5048 경고가 발생합니다PackageIconUrl.

PackageIcon

아직 지원하지 PackageIcon않는 클라이언트 및 원본과의 이전 버전과의 호환성을 유지하려면 둘 다 PackageIcon 지정하고 PackageIconUrl. Visual Studio는 PackageIcon 폴더 기반 원본에서 들어오는 패키지를 지원합니다.

아이콘 이미지 파일 압축

아이콘 이미지 파일을 압축할 때 속성을 사용하여 PackageIcon 패키지의 루트를 기준으로 아이콘 파일 경로를 지정합니다. 또한 파일이 패키지에 포함되어 있는지 확인합니다. 이미지 파일 크기는 1MB로 제한됩니다. 지원되는 파일 형식에는 JPEG 및 PNG가 포함됩니다. 128x128의 이미지 해상도를 권장합니다.

예시:

<PropertyGroup>
    ...
    <PackageIcon>icon.png</PackageIcon>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="images\icon.png" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

패키지 아이콘 샘플입니다.

nuspec 이에 해당하는 경우 아이콘에 대한 참조를 살펴보 nuspec 세요.

PackageReadmeFile

NuGet 5.10.0 미리 보기 2.NET / SDK 5.0.300 이상에서 지원됨

추가 정보 파일을 압축할 때는 이 속성을 사용하여 PackageReadmeFile 패키지의 루트를 기준으로 패키지 경로를 지정해야 합니다. 이 외에도 파일이 패키지에 포함되어 있는지 확인해야 합니다. 지원되는 파일 형식에는 Markdown(.md)만 포함됩니다.

예시:

<PropertyGroup>
    ...
    <PackageReadmeFile>readme.md</PackageReadmeFile>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="docs\readme.md" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

nuspec 이에 해당하는 경우 추가 정보 참조를 살펴보 nuspec 세요.

출력 어셈블리

nuget pack.exe, .dll, .xml, .winmd, .json.pri 확장명의 출력 파일을 복사합니다. 복사되는 출력 파일은 대상에서 제공하는 항목 MSBuild 에 BuiltOutputProjectGroup 따라 달라집니다.

프로젝트 파일 또는 명령줄에서 출력 어셈블리의 위치를 제어하는 데 사용할 수 있는 두 가지 MSBuild 속성이 있습니다.

  • IncludeBuildOutput: 빌드 출력 어셈블리를 패키지에 포함할지 여부를 결정하는 부울입니다.
  • BuildOutputTargetFolder: 출력 어셈블리를 배치할 폴더를 지정합니다. 출력 어셈블리(및 기타 출력 파일)는 해당 프레임워크 폴더에 복사됩니다.

패키지 참조

프로젝트 파일의 패키지 참조를 참조하세요.

프로젝트 간 참조

프로젝트 대 프로젝트 참조는 기본적으로 패키지 참조로 NuGet 간주됩니다. 예시:

<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>

또한 다음 메타데이터를 프로젝트 참조에 추가할 수도 있습니다.

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

패키지에 내용 포함

콘텐츠를 포함하려면 기존 <Content> 항목에 추가 메타데이터를 추가합니다. 기본적으로 "Content" 형식의 모든 항목은 다음과 같은 항목으로 재정의하지 않는 한 패키지에 포함됩니다.

<Content Include="..\win7-x64\libuv.txt">
 <Pack>false</Pack>
</Content>

패키지 경로를 지정하지 않으면 기본적으로 contentcontentFiles\any\<target_framework> 패키지 폴더의 루트에 모든 항목이 추가되고 상대 폴더 구조가 유지됩니다.

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles\</PackagePath>
</Content>

모든 콘텐츠를 특정 루트 폴더(둘 다 MSBuild 대신 content contentFiles)에만 복사하려는 경우 기본ContentTargetFolders값인 "content; contentFiles"이지만 다른 폴더 이름으로 설정할 수 있습니다. ContentTargetFolders에 "contentFiles"를 지정하면 파일이 buildAction에 따라 contentFiles\any\<target_framework> 또는 contentFiles\<language>\<target_framework>에 배치됩니다.

PackagePath는 세미콜론으로 구분된 대상 경로의 집합일 수 있습니다. 빈 패키지 경로를 지정하면 파일이 패키지의 루트에 추가됩니다. 예를 들어 다음은 libuv.txtcontent\myfiles, content\samples 및 패키지 루트에 추가합니다.

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>

기본값인 MSBuild 속성 $(IncludeContentInPack)도 있습니다 true. 모든 프로젝트에서 이 설정이 설정된 false 경우 해당 프로젝트의 콘텐츠는 패키지에 nuget 포함되지 않습니다.

위의 항목에 설정할 수 있는 다른 팩별 메타데이터에는 출력 항목의 contentFiles 집합 CopyToOutputFlatten 값이 포함됩니다 <PackageCopyToOutput> <PackageFlatten>.nuspec

참고 항목

Content 항목 외에도, 빌드 작업이 Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource 또는 None으로 설정된 파일에 <Pack><PackagePath> 메타데이터를 설정할 수도 있습니다.

GLOB 패턴을 사용할 때 pack에서 파일 이름을 패키지 경로에 추가하려면 패키지 경로가 폴더 구분 문자로 끝나야 합니다. 그렇지 않으면 패키지 경로가 파일 이름을 포함한 전체 경로로 처리됩니다.

IncludeSymbols

MSBuild -t:pack -p:IncludeSymbols=true를 사용하면 해당 .pdb 파일이 다른 출력 파일(.dll, .exe, .winmd, .xml, .json, .pri)과 함께 복사됩니다. IncludeSymbols=true를 설정하면 일반 패키지 기호 패키지가 만들어집니다.

IncludeSource

.pdb 파일과 함께 원본 파일을 복사한다는 점을 제외하고는 IncludeSymbols와 동일합니다. Compile 형식의 모든 파일이 결과 패키지에서 상대 경로 폴더 구조를 유지하면서 src\<ProjectName>\에 복사됩니다. 또한 TreatAsPackageReferencefalse로 설정된 ProjectReference의 원본 파일에 대해서도 마찬가지입니다.

Compile 형식의 파일이 프로젝트 폴더의 외부에 있는 경우 이 파일은 src\<ProjectName>\에 추가됩니다.

라이선스 식 또는 라이선스 파일 압축

라이선스 식을 사용하는 경우 속성을 사용합니다 PackageLicenseExpression . 샘플은 라이선스 식 샘플을 참조 하세요.

<PropertyGroup>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

.org에서 허용하는 라이선스 식 및 라이선스에 NuGet대한 자세한 내용은 라이선스 메타데이터를 참조하세요.

라이선스 파일을 압축할 때 속성을 사용하여 PackageLicenseFile 패키지의 루트를 기준으로 패키지 경로를 지정합니다. 또한 파일이 패키지에 포함되어 있는지 확인합니다. 예시:

<PropertyGroup>
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>

<ItemGroup>
    <None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>

샘플은 라이선스 파일 샘플을 참조 하세요.

참고 항목

, PackageLicenseFilePackageLicenseUrlPackageLicenseExpression하나만 한 번에 지정할 수 있습니다.

확장자 없이 파일 압축

라이선스 파일을 압축할 때와 같은 일부 시나리오에서는 확장 프로그램 없이 파일을 포함할 수 있습니다. 기록상의 이유로 확장 NuGet MSBuild 없이 경로를 디렉터리로 처리합니다.

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0</TargetFrameworks>
    <PackageLicenseFile>LICENSE</PackageLicenseFile>
  </PropertyGroup>

  <ItemGroup>
    <None Include="LICENSE" Pack="true" PackagePath=""/>
  </ItemGroup>  

확장 샘플이 없는 파일입니다.

IsTool

MSBuild -t:pack -p:IsTool=true를 사용하면 출력 어셈블리 시나리오에서 지정한 대로 모든 출력 파일이 lib 폴더 대신 tools 폴더에 복사됩니다. 이는 .csproj 파일에서 PackageType을 설정하여 지정된 DotNetCliTool과 다릅니다.

파일을 사용하여 .nuspec 압축

일반적으로 .nuspec 프로젝트 파일의 파일에 있는 모든 속성을 대신 포함하는 것이 좋습니다. 파일을 사용하여 .nuspec 프로젝트를 압축하도록 선택할 수 있습니다. 사용하는 PackageReference비 SDK 스타일 프로젝트의 경우 팩 작업을 실행할 수 있도록 가져와 NuGet.Build.Tasks.Pack.targets 야 합니다. 파일을 압축 nuspec 하려면 프로젝트를 복원해야 합니다. (SDK 스타일 프로젝트에는 기본적으로 팩 대상이 포함됩니다.)

프로젝트 파일의 대상 프레임워크는 관련이 없으며 압축 nuspec할 때 사용되지 않습니다. 다음 세 MSBuild 가지 속성은 다음을 사용하는 압축과 관련이 있습니다 .nuspec.

  1. NuspecFile: 압축에 사용되는 .nuspec 파일에 대한 상대 또는 절대 경로입니다.
  2. NuspecProperties: 세미콜론으로 구분된 key=value 쌍의 목록입니다. 명령줄 구문 분석이 작동하는 방식으로 MSBuild 인해 다음과 -p:NuspecProperties="key1=value1;key2=value2"같이 여러 속성을 지정해야 합니다.
  3. NuspecBasePath: .nuspec 파일에 대한 기본 경로입니다.

dotnet.exe를 사용하여 프로젝트를 압축하는 경우 다음 명령을 사용합니다.

dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

MSBuild를 사용하여 프로젝트를 압축하는 경우 다음 명령을 사용합니다.

msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

using dotnet.exe nuspec 압축하거나 msbuild 기본적으로 프로젝트를 빌드해야 합니다. 프로젝트 파일의 설정과 <IncludeBuildOutput>false</IncludeBuildOutput> 프로젝트 파일의 설정 <NoBuild>true</NoBuild> 과 동일한 dotnet.exe 속성을 전달 --no-build 하여 이 문제를 방지할 수 있습니다.

파일을 압축 nuspec 하는 .csproj 파일의 예는 다음과 같습니다.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <NoBuild>true</NoBuild>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <NuspecFile>PATH_TO_NUSPEC_FILE</NuspecFile>
    <NuspecProperties>add nuspec properties here</NuspecProperties>
    <NuspecBasePath>optional to provide</NuspecBasePath>
  </PropertyGroup>
</Project>

사용자 지정 패키지를 만들기 위한 고급 확장점

대상은 pack 내부 대상 프레임워크 특정 빌드에서 실행되는 두 개의 확장 지점을 제공합니다. 확장 지점은 대상 프레임워크 특정 콘텐츠 및 어셈블리를 패키지에 포함할 수 있습니다.

  • TargetsForTfmSpecificBuildOutput target: 폴더 내의 lib 파일 또는 .를 사용하여 지정한 폴더에 사용합니다 BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackage target: 외부 BuildOutputTargetFolder의 파일에 사용합니다.

TargetsForTfmSpecificBuildOutput

사용자 지정 대상을 작성하고 속성 값으로 지정합니다 $(TargetsForTfmSpecificBuildOutput) . 기본적으로 lib로 이동해야 하는 파일의 BuildOutputTargetFolder 경우 대상은 해당 파일을 ItemGroup BuildOutputInPackage 에 쓰고 다음 두 메타데이터 값을 설정해야 합니다.

  • FinalOutputPath: 파일의 절대 경로입니다. 제공되지 않으면 ID가 원본 경로를 평가하는 데 사용됩니다.
  • TargetPath: (선택 사항) 해당 문화권 폴더로 이동하는 위성 어셈블리와 같이 파일이 내 lib\<TargetFramework> 의 하위 폴더로 이동해야 하는 경우를 설정합니다. 기본값은 파일의 이름입니다.

예시:

<PropertyGroup>
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>

<Target Name="GetMyPackageFiles">
  <ItemGroup>
    <BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
        <TargetPath>cs</TargetPath>
    </BuildOutputInPackage>
  </ItemGroup>
</Target>

TargetsForTfmSpecificContentInPackage

사용자 지정 대상을 작성하고 속성 값으로 지정합니다 $(TargetsForTfmSpecificContentInPackage) . 패키지에 포함할 파일의 경우 대상은 해당 파일을 ItemGroup TfmSpecificPackageFile 에 쓰고 다음 선택적 메타데이터를 설정해야 합니다.

  • PackagePath: 패키지에서 파일을 출력해야 하는 경로입니다. NuGet 동일한 패키지 경로에 둘 이상의 파일이 추가되면 경고가 발생합니다.
  • BuildAction: 패키지 경로가 폴더에 있는 경우에만 필요한 파일에 할당할 빌드 작업입니다 contentFiles . 기본값은 "None"입니다.

예:

<PropertyGroup>
  <TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);CustomContentTarget</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>

<Target Name="CustomContentTarget">
  <ItemGroup>
    <TfmSpecificPackageFile Include="abc.txt">
      <PackagePath>mycontent/$(TargetFramework)</PackagePath>
    </TfmSpecificPackageFile>
    <TfmSpecificPackageFile Include="Extensions/ext.txt" Condition="'$(TargetFramework)' == 'net46'">
      <PackagePath>net46content</PackagePath>
    </TfmSpecificPackageFile>  
  </ItemGroup>
</Target>  

restore 대상

MSBuild -t:restore(.NET Core 프로젝트에서 nuget restoredotnet restore 사용)는 프로젝트 파일에서 참조된 패키지를 다음과 같이 복원합니다.

  1. 모든 프로젝트 간 참조를 읽습니다.
  2. 프로젝트 속성을 읽어 중간 폴더 및 대상 프레임워크를 찾습니다.
  3. 에 데이터를 전달 MSBuild 합니다 NuGet. Build.Tasks.dll
  4. restore를 실행합니다.
  5. 패키지를 다운로드합니다.
  6. 자산, targets 및 props 파일을 작성합니다.

대상은 restore PackageReference 형식을 사용하는 프로젝트에 대해 작동합니다. MSBuild 16.5+ 에는 형식에 대한 옵트인 지원 도 있습니다 packages.config .

참고 항목

대상은 restore 대상build 함께 실행하면 안 됩니다.

restore 속성

추가 복원 설정은 프로젝트 파일의 속성에서 MSBuild 올 수 있습니다. 또한 값은 -p: 스위치를 사용하여 명령줄에서 설정할 수 있습니다(아래 예제 참조).

속성 설명
RestoreSources 세미콜론으로 구분된 패키지 원본의 목록입니다.
RestorePackagesPath 사용자 패키지 폴더에 대한 경로입니다.
RestoreDisableParallel 다운로드를 한 번에 하나씩으로 제한합니다.
RestoreConfigFile 적용할 Nuget.Config 파일에 대한 경로입니다.
RestoreNoHttpCache true이면 http 캐시된 패키지를 사용하지 않습니다. 전역 패키지 및 캐시 폴더 관리를 참조 하세요.
RestoreIgnoreFailedSources true이면 실패했거나 누락된 패키지 원본을 무시합니다.
RestoreFallbackFolders 사용자 패키지 폴더를 사용하는 것과 동일한 방식으로 사용되는 대체 폴더입니다.
RestoreAdditionalProjectSources 복원하는 동안 사용할 추가 원본입니다.
RestoreAdditionalProjectFallbackFolders 복원하는 동안 사용할 추가 대체 폴더입니다.
RestoreAdditionalProjectFallbackFoldersExcludes 에 지정된 대체 폴더 제외 RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFile NuGet.Build.Tasks.dll에 대한 경로입니다.
RestoreGraphProjectInput 세미콜론으로 구분된 복원할 프로젝트의 목록이며, 절대 경로가 포함되어야 합니다.
RestoreUseSkipNonexistentTargets 프로젝트를 통해 MSBuild 수집되는 경우 최적화를 사용하여 SkipNonexistentTargets 수집되는지 여부를 결정합니다. 설정되지 않은 경우 기본값은 .로 설정 true됩니다. 그 결과 프로젝트의 대상을 가져올 수 없는 경우 빠른 실패 동작이 발생합니다.
MSBuildProjectExtensionsPath 출력 폴더, 기본값 및 BaseIntermediateOutputPath obj 폴더
RestoreForce PackageReference 기반 프로젝트에서 마지막 복원에 성공한 경우에도 모든 종속성을 강제로 확인합니다. 이 플래그를 지정하는 것은 파일을 삭제하는 project.assets.json 것과 비슷합니다. http-cache는 무시하지 않습니다.
RestorePackagesWithLockFile 잠금 파일을 사용합니다.
RestoreLockedMode 잠긴 모드에서 복원을 실행합니다. 즉, 복원은 종속성을 다시 평가하지 않습니다.
NuGetLockFilePath 잠금 파일의 사용자 지정 위치입니다. 기본 위치는 프로젝트 옆에 있으며 이름이 지정 packages.lock.json됩니다.
RestoreForceEvaluate 강제로 복원하여 종속성을 다시 계산하고 경고 없이 잠금 파일을 업데이트합니다.
RestorePackagesConfig packages.config를 사용하여 프로젝트를 복원하는 옵트인 스위치입니다. 지원만 가능합니다 MSBuild -t:restore .
RestoreRepositoryPath packages.config만 해당합니다. 패키지를 복원할 패키지 디렉터리를 지정합니다. SolutionDirectory 은 지정하지 않으면 사용됩니다.
RestoreUseStaticGraphEvaluation 표준 평가 대신 정적 그래프 MSBuild 평가를 사용하는 옵트인 스위치입니다. 정적 그래프 평가는 대규모 리포지토리 및 솔루션에 대해 훨씬 더 빠른 실험적 기능입니다.
RestoreUseLegacyDependencyResolver 레거시 종속성 확인자를 사용하기 위한 옵트아웃입니다. NuGet'의 종속성 확인자 구현은 6.12 릴리스에서 다시 작성되었습니다. 이 스위치는 이전 알고리즘을 강제로 사용합니다.

ExcludeRestorePackageImports 속성은 .에서 사용하는 NuGet내부 속성입니다. 파일 MSBuild 에서 수정하거나 설정해서는 안 됩니다.

예제

명령줄:

msbuild -t:restore -p:RestoreConfigFile=<path>

프로젝트 파일:

<PropertyGroup>
    <RestoreIgnoreFailedSources>true</RestoreIgnoreFailedSources>
</PropertyGroup>

restore 출력

restore는 obj 빌드 폴더에 다음 파일을 만듭니다.

파일 설명
project.assets.json 모든 패키지 참조의 종속성 그래프 포함합니다.
{projectName}.projectFileExtension.nuget.g.props 패키지에 MSBuild 포함된 props에 대한 참조
{projectName}.projectFileExtension.nuget.g.targets 패키지에 MSBuild 포함된 대상에 대한 참조

하나의 MSBuild 명령으로 복원 및 빌드

대상 및 소품을 NuGet 가져오는 MSBuild 패키지를 복원할 수 있기 때문에 복원 및 빌드 평가는 다른 전역 속성으로 실행됩니다. 즉, 다음 동작은 예측할 수 없고 종종 잘못된 동작을 갖습니다.

msbuild -t:restore,build

대신 권장되는 방법은 다음과 같습니다.

msbuild -t:build -restore

동일한 논리가 .와 유사한 build다른 대상에 적용됩니다.

를 사용하여 PackageReference 및 packages.config 프로젝트 복원 MSBuild

MSBuild 16.5 이상에서는 packages.config도 지원msbuild -t:restore됩니다.

msbuild -t:restore -p:RestorePackagesConfig=true

참고 항목

packages.config 복원은 에서 MSBuild 16.5+만 사용할 수 있으며 에는 사용할 수 없습니다. dotnet.exe

정적 그래프 평가를 사용하여 MSBuild 복원

참고 항목

MSBuild 16.6 이상 NuGet 에서는 명령줄에서 정적 그래프 평가를 사용하는 실험적 기능이 추가되어 대규모 리포지토리의 복원 시간이 크게 향상되었습니다.

msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true

또는 Directory.Build.Props에서 속성을 설정하여 사용하도록 설정할 수 있습니다.

<Project>
  <PropertyGroup>
    <RestoreUseStaticGraphEvaluation>true</RestoreUseStaticGraphEvaluation>
  </PropertyGroup>
</Project>

참고 항목

Visual Studio 2019.x 및 NuGet 5.x를 기준으로 이 기능은 실험적 및 옵트인으로 간주됩니다. 이 기능이 기본적으로 사용되는 시기에 대한 자세한 내용은 /Home#9803을 따르세요.NuGet

정적 그래프 복원은 msbuild 복원, 프로젝트 읽기 및 평가의 일부를 변경하지만 복원 알고리즘은 변경하지 않습니다. 복원 알고리즘은 모든 NuGet 도구(NuGet.exe, .exe, MSBuilddotnet.exe 및 Visual Studio)에서 동일합니다.

극소수의 시나리오에서 정적 그래프 복원은 현재 복원과 다르게 동작할 수 있으며 선언된 특정 PackageReferences 또는 ProjectReferences가 누락될 수 있습니다.

한 번 확인으로 정적 그래프 복원으로 마이그레이션할 때 마음을 편하게 하려면 다음을 실행하는 것이 좋습니다.

msbuild.exe -t:restore -p:RestoreUseStaticGraphEvaluation=true
msbuild.exe -t:restore

NuGet는 변경 내용을 보고하지 않아야 합니다. 불일치가 표시되면 /Home에서 NuGet문제를 제출하세요.

복원 그래프에서 단일 라이브러리 대체

restore에서 잘못된 어셈블리를 가져오는 경우 해당 패키지의 기본 선택 항목을 제외하는 한편 원하는 선택 항목으로 대체할 수 있습니다. 먼저 최상위 PackageReference를 사용하여 모든 자산을 제외합니다.

<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
  <ExcludeAssets>All</ExcludeAssets>
</PackageReference>

그런 다음 DLL의 적절한 로컬 복사본에 대한 고유한 참조를 추가합니다.

<Reference Include="Newtonsoft.Json.dll" />