NuGet hedef olarak MSBuild paketleme ve geri yükleme

NuGet 4.0+

PackageReference biçimiyle, NuGet 4.0+ tüm bildirim meta verilerini ayrı .nuspec bir dosya kullanmak yerine doğrudan bir proje dosyasında depolayabilir.

MSBuild 15.1+ ile, NuGet ayrıca aşağıda açıklandığı gibi ve restore hedeflerine sahip pack birinci sınıf MSBuild bir vatandaştır. Bu hedefler, başka MSBuild bir görev veya hedefle yaptığınız gibi ile NuGet çalışmanıza olanak tanır. kullanarak MSBuildpaket oluşturma NuGet yönergeleri için bkz. kullanarak MSBuildpaket oluşturmaNuGet. (For NuGet 3.x ve önceki sürümlerde, bunun yerine CLI aracılığıyla NuGetpaketle ve geri yükleme komutlarını kullanırsınız.)

Hedef derleme sırası

ve restore hedefleri olduğundan MSBuildpack, iş akışınızı geliştirmek için bunlara erişebilirsiniz. Örneğin, paketinizi paketledikten sonra bir ağ paylaşımına kopyalamak istediğinizi varsayalım. Bunu yapmak için proje dosyanıza aşağıdakileri ekleyebilirsiniz:

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

Benzer şekilde, bir MSBuild görev yazabilir, kendi hedefinizi yazabilir ve görevdeki MSBuild özellikleri kullanabilirsinizNuGet.

Not

$(OutputPath) görelidir ve komutunu proje kökünden çalıştırmanızı bekler.

paket hedefi

biçimini kullanan PackageReference .NET projeleri için, kullanarak msbuild -t:pack bir paket oluştururken NuGet kullanmak üzere proje dosyasından girişler çizer.

Aşağıdaki tabloda, ilk <PropertyGroup> düğüm içindeki bir proje dosyasına eklenebilen özellikler açıklanmaktadırMSBuild. Visual Studio 2017 ve sonraki sürümlerde projeye sağ tıklayıp bağlam menüsünden Düzenle {project_name} öğesini seçerek bu düzenlemeleri kolayca yapabilirsiniz. Kolaylık olması için tablo, bir.nuspec dosyadaki eşdeğer özelliğe göre düzenlenir.

Not

Owners ve Summary özellikleri .nuspec ile MSBuilddesteklenmez.

Öznitelik/nuspec Değer MSBuild Özellik Varsayılan Notlar
Id PackageId $(AssemblyName) $(AssemblyName) Kaynak MSBuild
Version PackageVersion Sürüm Bu, semver ile uyumludur; örneğin 1.0.0, , 1.0.0-betaveya 1.0.0-beta-00345. Version Ayarlanmadıysa varsayılan olarak ayarlanır.
VersionPrefix VersionPrefix empty Üzerine yazmaları ayarlama PackageVersionVersionPrefix
VersionSuffix VersionSuffix empty Üzerine yazmaları ayarlama PackageVersionVersionSuffix
Authors Authors Geçerli kullanıcının kullanıcı adı nuget.org profil adlarını eşleştiren, paket yazarlarının noktalı virgülle ayrılmış listesi. Bunlar nuget.org'daki Galeri'de NuGet görüntülenir ve aynı yazarlar tarafından paketlere çapraz başvuru yapmak için kullanılır.
Owners Yok Içinde yok nuspec
Title Title $(PackageId) Genellikle kullanıcı arabiriminde kullanılan paketin insan dostu başlığı nuget.org ve Paket Yöneticisi Visual Studio olarak görüntülenir.
Description Description "Paket Açıklaması" Derleme için uzun bir açıklama. Belirtilmezse PackageDescription , bu özellik paketin açıklaması olarak da kullanılır.
Copyright Copyright empty Paket için telif hakkı ayrıntıları.
RequireLicenseAcceptance PackageRequireLicenseAcceptance false İstemcinin paketi yüklemeden önce tüketiciden paket lisansını kabul etmesi isteyip istemediğinizi belirten bir Boole değeri.
license PackageLicenseExpression empty öğesine <license type="expression">karşılık gelir. Bkz . Lisans ifadesini veya lisans dosyasını paketleme.
license PackageLicenseFile empty Özel lisans veya SPDX tanımlayıcısı atanmamış bir lisans kullanıyorsanız paket içindeki bir lisans dosyasının yolu. Başvuruda bulunılan lisans dosyasını açıkça paketlemeniz gerekir. öğesine <license type="file">karşılık gelir. Bkz . Lisans ifadesini veya lisans dosyasını paketleme.
LicenseUrl PackageLicenseUrl empty PackageLicenseUrl kullanım dışı bırakıldı. Bunun yerine veya PackageLicenseFile kullanınPackageLicenseExpression.
ProjectUrl PackageProjectUrl empty
Icon PackageIcon empty Paket simgesi olarak kullanılacak paketteki görüntünün yolu. Başvuruda bulunılan simge görüntü dosyasını açıkça paketlemeniz gerekir. Daha fazla bilgi için bkz . Simge görüntü dosyasını ve icon meta verileri paketleme.
IconUrl PackageIconUrl empty PackageIconUrl , lehine PackageIconkullanım dışıdır. Ancak, en iyi alt düzey deneyimi için öğesine ek olarak PackageIconbelirtmeniz PackageIconUrl gerekir.
Readme PackageReadmeFile empty Başvuruda bulunılan benioku dosyasını açıkça paketlemeniz gerekir.
Tags PackageTags empty Paketi tanımlayan etiketlerin noktalı virgülle ayrılmış listesi.
ReleaseNotes PackageReleaseNotes empty Paketin sürüm notları.
Repository/Url RepositoryUrl empty Kaynak kodu kopyalamak veya almak için kullanılan depo URL'si. Örnek: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
Repository/Type RepositoryType empty Depo türü. Örnekler: git (varsayılan), tfs.
Repository/Branch RepositoryBranch empty İsteğe bağlı depo dal bilgileri. RepositoryUrl bu özelliğin dahil edilmesi için de belirtilmelidir. Örnek: master (NuGet 4.7.0+).
Repository/Commit RepositoryCommit empty Paketin hangi kaynakta oluşturulduğunu belirtmek için isteğe bağlı depo işlemesi veya değişiklik kümesi. RepositoryUrl bu özelliğin dahil edilmesi için de belirtilmelidir. Örnek: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
PackageType <PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> Paketin amaçlanan kullanımını gösterir. Paket türleri, paket kimlikleriyle aynı biçimi kullanır ve ile ;sınırlandırılır. Paket türleri, bir , ve Version dizesi eklenerek sürümlenebilir. Bkz. Paket türü ayarlama NuGet (NuGet 3.5.0+).
Summary Desteklenmez

paket hedefi girişleri

Özellik Açıklama
IsPackable Projenin paketlenip paketlenemeyeceğini belirten boole değeri. true varsayılan değerdir.
SuppressDependenciesWhenPacking true Oluşturulan NuGet paketten paket bağımlılıklarını engellemek için olarak ayarlayın.
PackageVersion Sonuçta elde edilen paketin sahip olacağı sürümü belirtir. Sürüm dizesinin tüm biçimlerini NuGet kabul eder. Varsayılan değer, projedeki özelliğin Version değeridir$(Version).
PackageId Sonuçta elde edilen paketin adını belirtir. Belirtilmezse, pack işlem varsayılan olarak paketin AssemblyName adı olarak veya dizin adını kullanır.
PackageDescription Kullanıcı arabirimi görüntüsü için paketin uzun açıklaması.
Authors nuget.org profil adlarına uyan, paket yazarlarının noktalı virgülle ayrılmış listesi. Bunlar nuget.org'da Galeri'de NuGet görüntülenir ve aynı yazarlar tarafından paketlere çapraz başvuruda bulunma amacıyla kullanılır.
Description Derleme için uzun bir açıklama. Belirtilmezse PackageDescription , bu özellik paketin açıklaması olarak da kullanılır.
Copyright Paket için telif hakkı ayrıntıları.
PackageRequireLicenseAcceptance İstemcinin paketi yüklemeden önce tüketiciden paket lisansını kabul etmesi gerekip gerekmediğini belirten boole değeri. Varsayılan değer: false.
DevelopmentDependency Paketin yalnızca geliştirme bağımlılığı olarak işaretlenip işaretlenmediğini belirten ve paketin diğer paketlere bağımlılık olarak eklenmesini engelleyen Boole değeri. (NuGet 4.8+) ile PackageReference bu bayrak, derleme zamanı varlıklarının derlemenin dışında bırakıldığı anlamına da gelir. Daha fazla bilgi için bkz. PackageReference için DevelopmentDependency desteği.
PackageLicenseExpression SPDX lisans tanımlayıcısı veya ifadesi, örneğin, Apache-2.0. Daha fazla bilgi için bkz . Lisans ifadesini veya lisans dosyasını paketleme.
PackageLicenseFile Özel lisans veya SPDX tanımlayıcısı atanmamış bir lisans kullanıyorsanız paket içindeki lisans dosyasının yolu.
PackageLicenseUrl PackageLicenseUrl kullanım dışı bırakıldı. Veya PackageLicenseFile yerine kullanınPackageLicenseExpression.
PackageProjectUrl
PackageIcon Paketin köküne göre paket simgesi yolunu belirtir. Daha fazla bilgi için bkz . Simge görüntü dosyasını paketleme.
PackageReleaseNotes Paket için sürüm notları.
PackageReadmeFile Paket için benioku.
PackageTags Paketi tanımlayan etiketlerin noktalı virgülle ayrılmış listesi.
PackageOutputPath Paketlenmiş paketin bırakılacağı çıkış yolunu belirler. $(OutputPath) varsayılan değerdir.
IncludeSymbols Bu Boole değeri, proje paketlendiğinde paketin ek sembol paketi oluşturup oluşturmayacağını gösterir. Sembol paketinin biçimi özelliği tarafından SymbolPackageFormat denetlenmektedir. Daha fazla bilgi için bkz. IncludeSymbols.
IncludeSource Bu Boole değeri, paket işleminin kaynak paket oluşturup oluşturmayacağını gösterir. Kaynak paket kitaplığın kaynak kodunun yanı sıra PDB dosyalarını içerir. Kaynak dosyalar, sonuçta elde edilen src/ProjectName paket dosyasında dizinin altına konur. Daha fazla bilgi için bkz. IncludeSource.
PackageType
IsTool Tüm çıkış dosyalarının lib klasörü yerine araçlar klasörüne kopyalanıp kopyalanmayacağını belirtir. Daha fazla bilgi için bkz. IsTool.
RepositoryUrl Kaynak kodu kopyalamak veya almak için kullanılan depo URL'si. Örnek: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
RepositoryType Depo türü. Örnekler: git (varsayılan), tfs.
RepositoryBranch İsteğe bağlı depo dal bilgileri. RepositoryUrl bu özelliğin dahil edilmesi için de belirtilmelidir. Örnek: ana (NuGet 4.7.0+).
RepositoryCommit Paketin hangi kaynağa göre oluşturulduğuna ilişkin isteğe bağlı depo işlemesi veya değişiklik kümesi. RepositoryUrl bu özelliğin dahil edilmesi için de belirtilmelidir. Örnek: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
SymbolPackageFormat Sembol paketinin biçimini belirtir. "symbols.nupkg" ise PDB'ler, DLL'ler ve diğer çıkış dosyalarını içeren bir .symbols.nupkg uzantısıyla eski bir sembol paketi oluşturulur. "snupkg" ise, taşınabilir PDB'leri içeren bir snupkg sembol paketi oluşturulur. Varsayılan değer "symbols.nupkg" şeklindedir.
NoPackageAnalysis Paketi derledikten pack sonra paket analizinin çalıştırılmaması gerektiğini belirtir.
MinClientVersion nuget.exe ve Visual Studio Paket Yöneticisi tarafından zorlanan, bu paketi yükleyebilen istemcinin en düşük sürümünü NuGet belirtir.
IncludeBuildOutput Bu Boole değeri, derleme çıkış derlemelerinin .nupkg dosyasına paketlenip paketlenmeyeceğini belirtir.
IncludeContentInPack Bu Boole değeri, türüne sahip olan öğelerin otomatik olarak sonuç paketine eklenip eklenmeyeceğini Content belirtir. Varsayılan değer: true.
BuildOutputTargetFolder Çıkış derlemelerinin yerleştirileceği klasörü belirtir. Çıkış derlemeleri (ve diğer çıkış dosyaları) ilgili çerçeve klasörlerine kopyalanır. Daha fazla bilgi için bkz . Çıkış derlemeleri.
ContentTargetFolders Bunlar için belirtilmezse PackagePath , tüm içerik dosyalarının gitmesi gereken varsayılan konumu belirtir. Varsayılan değer "content;contentFiles" değeridir. Daha fazla bilgi için bkz . Pakete içerik ekleme.
NuspecFile Paketleme için .nuspec kullanılan dosyanın göreli veya mutlak yolu. Belirtilirse, yalnızca paketleme bilgileri için kullanılır ve projelerdeki bilgiler kullanılmaz. Daha fazla bilgi için bkz . Kullanarak paketleme .nuspec.
NuspecBasePath Dosyanın temel yolu .nuspec . Daha fazla bilgi için bkz . Kullanarak paketleme .nuspec.
NuspecProperties Anahtar=değer çiftlerinin noktalı virgülle ayrılmış listesi. Daha fazla bilgi için bkz . Kullanarak paketleme .nuspec.

paket senaryoları

Bağımlılıkları gizleme

Paket bağımlılıklarını oluşturulan NuGet paketten engellemek içintrue, oluşturulan nupkg dosyasındaki tüm bağımlılıkların atlanması için değerine ayarlanırSuppressDependenciesWhenPacking.

PackageIconUrl

PackageIconUrl özelliğine göre PackageIcon kullanım dışı bırakılmıştır. 5.3 ve Visual Studio 2019 sürüm 16.3'den NuGet başlayarak, pack paket meta verileri yalnızca öğesini belirtiyorsa NU5048 uyarısını tetiklerPackageIconUrl.

PackageIcon

İpucu

henüz desteklemeyen PackageIconistemciler ve kaynaklarla geriye dönük uyumluluğu korumak için hem hem PackageIconUrlde PackageIcon değerini belirtin. Visual Studio, klasör tabanlı bir kaynaktan gelen paketleri desteklerPackageIcon.

Simge resim dosyasını paketleme

Simge görüntü dosyasını paketlerken, simge dosyası yolunu paketin köküne göre belirtmek için özelliğini kullanın PackageIcon . Ayrıca, dosyanın pakete dahil olduğundan emin olun. Görüntü dosyası boyutu 1 MB ile sınırlıdır. Desteklenen dosya biçimleri JPEG ve PNG'leri içerir. 128x128 görüntü çözünürlüğü önerilir.

Örneğin:

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

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

Paket Simgesi örneği.

Eşdeğeri nuspeciçin simge başvurusunanuspec göz atın.

PackageReadmeFile

5.10.0 önizleme 2.NET SDK 5.0.300 ve üzeri ile NuGetdesteklenir /

Benioku dosyasını paketlerken, paketin PackageReadmeFile köküne göre paket yolunu belirtmek için özelliğini kullanmanız gerekir. Buna ek olarak, dosyanın pakete dahil olduğundan emin olmanız gerekir. Desteklenen dosya biçimleri yalnızca Markdown (.md) içerir.

Örneğin:

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

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

Eşdeğeri nuspeciçin benioku başvurusuna göz atınnuspec.

Çıkış derlemeleri

nuget pack, , , .winmd.xml.dll.json, ve .priuzantılı .exeçıkış dosyalarını kopyalar. Kopyalanan çıkış dosyaları, hedeften neler MSBuild sağladığına BuiltOutputProjectGroup bağlıdır.

Çıkış derlemelerinin nereye gideceğini denetlemek için proje dosyanızda veya komut satırınızda kullanabileceğiniz iki MSBuild özellik vardır:

  • IncludeBuildOutput: Derleme çıkış derlemelerinin pakete eklenip eklenmeyeceğini belirleyen bir boole değeri.
  • BuildOutputTargetFolder: Çıkış derlemelerinin yerleştirilmesi gereken klasörü belirtir. Çıkış derlemeleri (ve diğer çıkış dosyaları) ilgili çerçeve klasörlerine kopyalanır.

Paket başvuruları

Bkz. Project Dosyalarındaki Paket Başvuruları.

Proje başvurularına Project

Proje başvurularına Project varsayılan olarak paket başvuruları olarak NuGet kabul edilir. Örneğin:

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

Proje başvurunuza aşağıdaki meta verileri de ekleyebilirsiniz:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

Pakete içerik ekleme

İçerik eklemek için var olan <Content> öğeye ek meta veriler ekleyin. Aşağıdaki gibi girdilerle geçersiz kılmadığınız sürece varsayılan olarak "İçerik" türündeki her şey pakete eklenir:

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

Varsayılan olarak, paket içindeki ve contentFiles\any\<target_framework> klasörünün content köküne her şey eklenir ve bir paket yolu belirtmediğiniz sürece göreli klasör yapısını korur:

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

Tüm içeriğinizi yalnızca belirli bir kök klasöre (ve contentFiles her ikisi yerinecontent) kopyalamak istiyorsanız özelliğini kullanabilirsinizMSBuild. Bu özellik ContentTargetFoldersvarsayılan olarak "content;contentFiles" olarak ayarlanır ancak diğer klasör adlarına ayarlanabilir. 'de ContentTargetFolders yalnızca "contentFiles" değerinin belirtilmesiyle dosyaların altına contentFiles\any\<target_framework> veya contentFiles\<language>\<target_framework> temel buildActionalındığını unutmayın.

PackagePath noktalı virgülle ayrılmış bir hedef yol kümesi olabilir. Boş bir paket yolu belirtilmesi, dosyayı paketin köküne ekler. Örneğin, aşağıdakiler , content\samplesve paket köküne content\myfileseklerlibuv.txt:

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

Varsayılan olarak trueolan bir MSBuild özelliği $(IncludeContentInPack)de vardır. Bu herhangi bir projede olarak ayarlanırsa false , bu projedeki içerik nuget paketine dahil değildir.

Yukarıdaki öğelerden herhangi birinde ayarlayabileceğiniz diğer pakete özgü meta veriler ve çıkıştaki nuspecgirdide contentFiles hangi kümeleri CopyToOutput ve Flatten değerleri içerir<PackageCopyToOutput>.<PackageFlatten>

Not

İçerik öğelerinin yanı sıra ve <PackagePath> meta verileri Derleme, <Pack> EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource veya None derleme eylemiyle dosyalarda da ayarlanabilir.

Paketin globbing desenlerini kullanırken paket yolunuz için dosya adını eklemesi için, paket yolunuz klasör ayırıcı karakteriyle bitmelidir, aksi takdirde paket yolu dosya adı da dahil olmak üzere tam yol olarak kabul edilir.

IncludeSymbols

kullanırken MSBuild -t:pack -p:IncludeSymbols=trueilgili .pdb dosyalar diğer çıkış dosyalarıyla (.dll, .exe, , .winmd, .xml, .json, .pri) birlikte kopyalanır. Ayarın IncludeSymbols=true normal bir paket ve sembol paketi oluşturduğunu unutmayın.

IncludeSource

Bu, ile aynıdır IncludeSymbols, ancak dosyalarla .pdb birlikte kaynak dosyaları da kopyalar. Türdeki Compile tüm dosyalar, sonuçta elde edilen paketteki göreli yol klasör yapısını korumak için src\<ProjectName>\ üzerine kopyalanır. Aynı durum, olarak ayarlanmış falseherhangi birinin ProjectReferenceTreatAsPackageReference kaynak dosyaları için de gerçekleşir.

Derle türünde bir dosya proje klasörünün dışındaysa, yalnızca öğesine src\<ProjectName>\eklenir.

Lisans ifadesini veya lisans dosyasını paketleme

Lisans ifadesi kullanırken özelliğini kullanın PackageLicenseExpression . Örnek için bkz . Lisans ifadesi örneği.

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

.org tarafından NuGetkabul edilen lisans ifadeleri ve lisanslar hakkında daha fazla bilgi edinmek için bkz. lisans meta verileri.

Bir lisans dosyasını paketlerken, paketin köküne göre paket yolunu belirtmek için özelliğini kullanın PackageLicenseFile . Ayrıca, dosyanın pakete dahil olduğundan emin olun. Örneğin:

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

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

Örnek için bkz. Lisans dosyası örneği.

Not

Aynı anda yalnızca bir PackageLicenseExpression, PackageLicenseFileve PackageLicenseUrl belirtilebilir.

Uzantı olmadan dosya paketleme

Lisans dosyası paketleme gibi bazı senaryolarda, uzantısız bir dosya eklemek isteyebilirsiniz. Geçmişe dönük nedenlerden dolayı, NuGet&MSBuild uzantıları olmayan yolları dizin olarak ele alır.

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

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

Uzantı örneği olmayan dosya.

Istool

kullanırken MSBuild -t:pack -p:IsTool=true, Çıktı Derlemeleri senaryosunda belirtildiği gibi tüm çıkış dosyaları klasör yerine klasöre toolslib kopyalanır. Bunun, dosyasında ayarıyla PackageType.csproj belirtilenden DotNetCliTool farklı olduğunu unutmayın.

Dosya kullanarak .nuspec paketleme

Bunun yerine genellikle dosyada .nuspec yer alan tüm özellikleri proje dosyasına eklemeniz önerilir, ancak projenizi paketlemek için bir .nuspec dosya kullanmayı seçebilirsiniz. kullanan PackageReferenceSDK stili olmayan bir proje için, paket görevinin yürütülebilmesi için içeri aktarmanız NuGet.Build.Tasks.Pack.targets gerekir. Dosyayı paketlemeden nuspec önce projeyi geri yüklemeniz gerekir. (SDK stilinde bir proje, varsayılan olarak paket hedeflerini içerir.)

Proje dosyasının hedef çerçevesi ilgisizdir ve bir nuspecpaketleme sırasında kullanılmaz. Aşağıdaki üç MSBuild özellik, kullanarak .nuspecpaketlemeyle ilgilidir:

  1. NuspecFile: paketleme için .nuspec kullanılan dosyanın göreli veya mutlak yolu.
  2. NuspecProperties: anahtar=değer çiftlerinin noktalı virgülle ayrılmış listesi. Komut satırı ayrıştırma yönteminden MSBuild dolayı, birden çok özellik aşağıdaki gibi belirtilmelidir: -p:NuspecProperties="key1=value1;key2=value2".
  3. NuspecBasePath: Dosyanın temel yolu .nuspec .

projenizi paketlemek için kullanıyorsanız dotnet.exe , aşağıdaki gibi bir komut kullanın:

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

projenizi paketlemek için kullanıyorsanız MSBuild , aşağıdaki gibi bir komut kullanın:

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

dotnet.exe veya msbuild kullanarak paketlemenin nuspec , projenin varsayılan olarak oluşturulmasına da yol açtığını lütfen unutmayın. Bu, özelliği proje dosyanızdaki ayarın yanı sıra <IncludeBuildOutput>false</IncludeBuildOutput> proje dosyasındaki ayarın <NoBuild>true</NoBuild> eşdeğeri olan dotnet.exe geçirerek --no-build önlenebilir.

Bir dosyayı paketlemek nuspec için bir .csproj dosyası örneği:

<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>

Özelleştirilmiş paket oluşturmak için gelişmiş uzantı noktaları

Hedef pack , iç, hedef çerçeveye özgü derlemede çalışan iki uzantı noktası sağlar. Uzantı noktaları, hedef çerçeveye özgü içerik ve derlemeleri bir pakete eklemeyi destekler:

  • TargetsForTfmSpecificBuildOutputtarget: kullanılarak belirtilen BuildOutputTargetFolderklasör veya klasör içindeki lib dosyalar için kullanın.
  • TargetsForTfmSpecificContentInPackage target: dışındaki BuildOutputTargetFolderdosyalar için kullanın.

TargetsForTfmSpecificBuildOutput

Özel bir hedef yazın ve özelliğin $(TargetsForTfmSpecificBuildOutput) değeri olarak belirtin. (varsayılan olarak lib) içine gitmesi BuildOutputTargetFolder gereken tüm dosyalar için, hedef bu dosyaları ItemGroup'a BuildOutputInPackage yazmalı ve aşağıdaki iki meta veri değerini ayarlamalıdır:

  • FinalOutputPath: Dosyanın mutlak yolu; sağlanmadıysa, kaynak yolu değerlendirmek için Kimlik kullanılır.
  • TargetPath: (İsteğe bağlı) Dosyanın kendi kültür klasörlerinin altına giren uydu derlemeleri gibi içinde lib\<TargetFramework> bir alt klasöre gitmesi gerektiğinde ayarlayın. Varsayılan olarak dosyanın adını kullanır.

Örnek:

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

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

TargetsForTfmSpecificContentInPackage

Özel bir hedef yazın ve özelliğin $(TargetsForTfmSpecificContentInPackage) değeri olarak belirtin. Pakete eklenecek tüm dosyalar için, hedef bu dosyaları ItemGroup'a TfmSpecificPackageFile yazmalı ve aşağıdaki isteğe bağlı meta verileri ayarlamalıdır:

  • PackagePath: Dosyanın pakette çıkışını alması gereken yol. NuGet , aynı paket yoluna birden fazla dosya eklendiğinde bir uyarı oluşturur.
  • BuildAction: Dosyaya atanacak derleme eylemi, yalnızca paket yolu klasördeyse contentFiles gereklidir. Varsayılan olarak "Yok" olur.

Örnek:

<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>  

hedefi geri yükleme

MSBuild -t:restore (ve nuget restoredotnet restore .NET Core projeleriyle birlikte kullanılır), proje dosyasında başvurulan paketleri aşağıdaki gibi geri yükler:

  1. Tüm projeyi proje başvurularına okuma
  2. Ara klasörü ve hedef çerçeveleri bulmak için proje özelliklerini okuyun
  3. Verileri .Build.Tasks.dll'a NuGetgeçirme MSBuild
  4. Geri yüklemeyi çalıştırma
  5. Paketleri indirme
  6. Varlık dosyası, hedefleri ve props yazma

Hedef, restore PackageReference biçimini kullanan projeler için çalışır. MSBuild 16.5+ ayrıca biçimi için kabul etme desteğinepackages.config sahiptir.

Not

Hedef, restore hedefle build birlikte çalıştırılmamalıdır.

Geri yükleme özellikleri

Ek geri yükleme ayarları proje dosyasındaki özelliklerden MSBuild gelebilir. Değerler, anahtar kullanılarak -p: komut satırından da ayarlanabilir (aşağıdaki örneklere bakın).

Özellik Açıklama
RestoreSources Paket kaynaklarının noktalı virgülle ayrılmış listesi.
RestorePackagesPath Kullanıcı paketleri klasör yolu.
RestoreDisableParallel İndirmeleri bir kerede bir ile sınırlayın.
RestoreConfigFile Nuget.Config Uygulanacak dosyanın yolu.
RestoreNoCache Doğruysa, önbelleğe alınmış paketleri kullanmaktan kaçınır. Bkz. Genel paketleri ve önbellek klasörlerini yönetme.
RestoreIgnoreFailedSources True ise, başarısız veya eksik paket kaynaklarını yoksayar.
RestoreFallbackFolders Geri dönüş klasörleri, kullanıcı paketleri klasörünün kullanıldığı şekilde kullanılır.
RestoreAdditionalProjectSources Geri yükleme sırasında kullanılacak ek kaynaklar.
RestoreAdditionalProjectFallbackFolders Geri yükleme sırasında kullanılacak ek geri dönüş klasörleri.
RestoreAdditionalProjectFallbackFoldersExcludes içinde belirtilen geri dönüş klasörlerini dışlar RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFile NuGet.Build.Tasks.dllyolu.
RestoreGraphProjectInput Mutlak yollar içermesi gereken, geri yükleneceği projelerin noktalı virgülle ayrılmış listesi.
RestoreUseSkipNonexistentTargets Projeler aracılığıyla toplandıklarında MSBuild , iyileştirme kullanılarak SkipNonexistentTargets toplanıp toplanmadıklarını belirler. Ayarlanmadığında varsayılan olarak trueayarlanır. Bunun sonucu, projenin hedefleri içeri aktarılamadığında hızlı bir hata davranışıdır.
MSBuildProjectExtensionsPath Çıkış klasörü, varsayılan olarak BaseIntermediateOutputPath ve obj klasörü.
RestoreForce PackageReference tabanlı projelerde, son geri yükleme başarılı olsa bile tüm bağımlılıkların çözümlenmesine zorlar. Bu bayrağı belirtmek, dosyayı silmeye project.assets.json benzer. Bu, http önbelleğini atlamaz.
RestorePackagesWithLockFile Kilit dosyasının kullanımını kabul eder.
RestoreLockedMode Geri yüklemeyi kilitli modda çalıştırın. Bu, geri yüklemenin bağımlılıkları yeniden değerlendirmeyeceği anlamına gelir.
NuGetLockFilePath Kilit dosyası için özel bir konum. Varsayılan konum projenin yanındadır ve olarak adlandırılır packages.lock.json.
RestoreForceEvaluate Geri yüklemeyi bağımlılıkları yeniden derlemeye ve kilit dosyasını herhangi bir uyarı olmadan güncelleştirmeye zorlar.
RestorePackagesConfig packages.config ile projeleri geri yükleyen bir kabul anahtarı. Yalnızca ile MSBuild -t:restore destek.
RestoreRepositoryPath Yalnızca packages.config. Paketlerin geri yüklenmesi gereken packages dizinini belirtir. SolutionDirectory belirtilmezse kullanılır.
RestoreUseStaticGraphEvaluation Standart değerlendirme yerine statik graf MSBuild değerlendirmesini kullanmak için bir kabul anahtarı. Statik graf değerlendirmesi, büyük depolar ve çözümler için önemli ölçüde daha hızlı olan deneysel bir özelliktir.

ExcludeRestorePackageImports özelliği tarafından NuGetkullanılan bir iç özelliktir. Hiçbir dosyada MSBuild değiştirilmemeli veya ayarlanmamalıdır.

Örnekler

Komut satırı:

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

Project dosyası:

<PropertyGroup>
    <RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>

Çıkışları geri yükleme

Geri yükleme, derleme obj klasöründe aşağıdaki dosyaları oluşturur:

Dosya Description
project.assets.json Tüm paket başvurularının bağımlılık grafiğini içerir.
{projectName}.projectFileExtension.nuget.g.props Paketlerde bulunan prop'lara başvurular MSBuild
{projectName}.projectFileExtension.nuget.g.targets Paketlerde MSBuild bulunan hedeflere başvurular

Tek bir MSBuild komutla geri yükleme ve derleme

NuGet Hedefleri ve prop'ları düşüren MSBuild paketleri geri yükleyebildiği için geri yükleme ve derleme değerlendirmeleri farklı genel özelliklerle çalıştırılır. Bu, aşağıdakilerin öngörülemeyen ve genellikle yanlış bir davranışa sahip olacağı anlamına gelir.

msbuild -t:restore,build

Bunun yerine önerilen yaklaşım:

msbuild -t:build -restore

Aynı mantık, benzeri builddiğer hedefler için de geçerlidir.

Ile PackageReference ve packages.config projelerini geri yükleme MSBuild

16.5+ ile MSBuild packages.config için msbuild -t:restorede desteklenir.

msbuild -t:restore -p:RestorePackagesConfig=true

Not

packages.config geri yükleme yalnızca ile MSBuild 16.5+kullanılabilir, ile kullanılamaz dotnet.exe

Statik graf değerlendirmesi ile MSBuild geri yükleme

Not

16.6+ ile MSBuild , NuGet büyük depolar için geri yükleme süresini önemli ölçüde geliştiren komut satırından statik graf değerlendirmesini kullanmak için deneysel bir özellik ekledi.

msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true

Alternatif olarak, bir Directory.Build.Props içinde özelliğini ayarlayarak etkinleştirebilirsiniz.

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

Not

Visual Studio 2019.x ve NuGet 5.x itibariyle bu özellik deneysel olarak kabul edilir ve kabul edilir. Bu özelliğin varsayılan olarak ne zaman etkinleştirileceğiyle ilgili ayrıntılar için /Home#9803'i izleyinNuGet.

Statik graf geri yükleme, geri yüklemenin msbuild bölümünü, proje okuma ve değerlendirmeyi değiştirir, ancak geri yükleme algoritmasını değiştirmez! Geri yükleme algoritması tüm NuGet araçlarda (NuGet.exe,.exe, MSBuild dotnet.exe ve Visual Studio) aynıdır.

Çok az senaryoda, statik graf geri yükleme geçerli geri yüklemeden farklı davranabilir ve bildirilen bazı PackageReferences veya ProjectReferences eksik olabilir.

Zihninizi rahatlatmak için, bir kerelik denetim olarak statik graf geri yüklemesine geçiş yaparken şunları çalıştırmayı göz önünde bulundurun:

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

NuGet hiçbir değişiklik bildirmemelidir . Bir tutarsızlık görürseniz lütfen /Home adresinden NuGetbir sorun oluşturun.

Geri yükleme grafından bir kitaplığı değiştirme

Geri yükleme işlemi yanlış derleme getiriyorsa, bu paketlerin varsayılan seçeneğini dışlayıp kendi seçiminizle değiştirmek mümkündür. İlk olarak en üst düzey PackageReferenceolan tüm varlıkları hariç tutun:

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

Ardından, DLL'nin uygun yerel kopyasına kendi başvurunuzu ekleyin:

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