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:pack
을 PackageReference
사용하는 .NET 프로젝트의 경우 패키지 만들기에 사용할 프로젝트 파일의 입력을 NuGet 그립니다.
다음 표에서는 첫 번째 <PropertyGroup>
노드 내의 MSBuild 프로젝트 파일에 추가할 수 있는 속성에 대해 설명합니다. Visual Studio 2017 이상에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 {project_name} 편집을 선택하여 이러한 편집 작업을 쉽게 수행할 수 있습니다. 편의를 위해 테이블은 파일의 해당 속성으로 .nuspec
구성됩니다.
참고 항목
Owners
및 Summary
속성은 .에서 .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 | 덮어쓰기 설정 PackageVersion VersionPrefix |
VersionSuffix |
VersionSuffix |
empty | 덮어쓰기 설정 PackageVersion VersionSuffix |
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 | PackageIconUrl 은 PackageIcon 에 대해 더 이상 사용되지 않습니다. 그러나 최상의 다운레벨 환경을 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>
패키지 경로를 지정하지 않으면 기본적으로 content
및 contentFiles\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.txt
를 content\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
집합 CopyToOutput
및 Flatten
값이 포함됩니다 <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>\
에 복사됩니다. 또한 TreatAsPackageReference
가 false
로 설정된 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>
샘플은 라이선스 파일 샘플을 참조 하세요.
참고 항목
, PackageLicenseFile
PackageLicenseUrl
중 PackageLicenseExpression
하나만 한 번에 지정할 수 있습니다.
확장자 없이 파일 압축
라이선스 파일을 압축할 때와 같은 일부 시나리오에서는 확장 프로그램 없이 파일을 포함할 수 있습니다. 기록상의 이유로 확장 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
.
NuspecFile
: 압축에 사용되는.nuspec
파일에 대한 상대 또는 절대 경로입니다.NuspecProperties
: 세미콜론으로 구분된 key=value 쌍의 목록입니다. 명령줄 구문 분석이 작동하는 방식으로 MSBuild 인해 다음과-p:NuspecProperties="key1=value1;key2=value2"
같이 여러 속성을 지정해야 합니다.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 restore
및 dotnet restore
사용)는 프로젝트 파일에서 참조된 패키지를 다음과 같이 복원합니다.
- 모든 프로젝트 간 참조를 읽습니다.
- 프로젝트 속성을 읽어 중간 폴더 및 대상 프레임워크를 찾습니다.
- 에 데이터를 전달 MSBuild 합니다 NuGet. Build.Tasks.dll
- restore를 실행합니다.
- 패키지를 다운로드합니다.
- 자산, 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" />