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.

15.1+ ileMSBuild, NuGet 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 herhangi bir görev veya hedefle yaptığınız gibi ile NuGet çalışmanıza olanak tanır. kullanarak paket oluşturma NuGet yönergeleri için bkz. kullanarakMSBuild paket oluşturmaNuGet.MSBuild (Için NuGet 3.x ve önceki sürümlerin yerine CLI aracılığıyla NuGet paket 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 paket oluştururken NuGet kullanmak üzere proje dosyasından girişler çizer.

Aşağıdaki tabloda, ilk <PropertyGroup> düğüm içindeki MSBuild bir proje dosyasına eklenebilen özellikler açıklanmaktadır. 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 uyumlu, ö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ı ile eşleşen, paket yazarlarının noktalı virgülle ayrılmış listesi. Bunlar galeride NuGet nuget.org 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ığı, visual studio'da nuget.org ve Paket Yöneticisi 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 gerekip gerekmediğini belirten 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 bir 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ı ve icon meta verileri paketleme.
IconUrl PackageIconUrl empty PackageIconUrl , yerine PackageIconkullanım dışı bırakılmıştır. Ancak, en iyi alt düzey deneyimi için ek olarak PackageIconbelirtmelisinizPackageIconUrl.
Readme PackageReadmeFile empty Başvuruda bulunılan benioku dosyasını açıkça paketlemeniz gerekir.
Tags PackageTags empty Paketi belirten noktalı virgülle ayrılmış etiketler listesi.
ReleaseNotes PackageReleaseNotes empty Paket için 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 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+).
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 hedef girişleri

Özellik Açıklama
IsPackable Projenin paketlenip paketlenemeyeceğini belirten boole değeri. Varsayılan değer şudur: true.
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 bir açıklaması.
Authors nuget.org profil adları ile eşleşen, paket yazarlarının noktalı virgülle ayrılmış listesi. Bunlar galeride NuGet nuget.org görüntülenir ve aynı yazarlar tarafından paketlere çapraz başvuru yapmak için 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 boole değeri, paketin diğer paketlere bağımlılık olarak eklenmesini önler. (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 bir lisans dosyasının yolu.
PackageLicenseUrl PackageLicenseUrl kullanım dışı bırakıldı. Bunun yerine veya PackageLicenseFile 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 belirten noktalı virgülle ayrılmış etiketler listesi.
PackageOutputPath Paketlenmiş paketin bırakılacağı çıkış yolunu belirler. Varsayılan $(OutputPath) değeridir.
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 bir 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: master (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 pack Paketi derledikten 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 çıktı derlemelerinin .nupkg dosyasına paketlenip paketlenmemesi gerektiğini belirtir.
IncludeContentInPack Bu Boole değeri, türü 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 "içerik; contentFiles". 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 bu değere 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ı yükseltirPackageIconUrl.

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 destekler PackageIcon .

Simge resim dosyasını paketleme

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

Ö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 nuspec için simge başvurusuna nuspec göz atın.

PackageReadmeFile

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

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 eklendiğinden 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 nuspec için benioku başvurusuna göz atınnuspec.

Çıkış derlemeleri

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

Çıktı 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 çıktı derlemelerinin pakete eklenip eklenmeyeceğini belirleyen 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. Proje Dosyalarında Paket Başvuruları.

Projeden projeye başvurular

Projeden projeye başvurular 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, her şey bir paket içindeki ve contentFiles\any\<target_framework> klasörünün content köküne 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 ContentTargetFolderskullanabilirsiniz MSBuild ve varsayılan olarak "content; contentFiles" 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\myfileseklenirlibuv.txt:

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

Varsayılan olarak trueolarak ayarlayan 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 girişte hangi kümeleri CopyToOutput ve Flatten değerleri içerir <PackageCopyToOutput><PackageFlatten>.contentFilesnuspec

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 dosyalar üzerinde de ayarlanabilir.

Paketin globbing desenlerini kullanırken dosya adını paket yolunun sonuna 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 değerlendirilir.

IncludeSymbols

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

IncludeSource

Bu, dosyalarla .pdb birlikte kaynak dosyaları da kopyalaması dışında ile aynıdırIncludeSymbols. Türdeki Compile tüm dosyalar, sonuçta elde edilen paketteki göreli yol klasör yapısını korumaya kopyalanır src\<ProjectName>\ . Aynı durum, olarak ayarlanmış falseherhangi TreatAsPackageReference birinin ProjectReference 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 eklendiğinden 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

Bir kerede yalnızca bir PackageLicenseExpression, PackageLicenseFileve PackageLicenseUrl belirtilebilir.

Uzantı olmadan dosya paketleme

Lisans dosyasını paketleme gibi bazı senaryolarda, uzantısız bir dosya eklemek isteyebilirsiniz. Geçmiş nedenlerden dolayı, NuGet dizin MSBuild olarak uzantı olmadan yolları işleyebilirsiniz.

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

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

Uzantı örneği olmayan dosya.

Istool

kullanırkenMSBuild -t:pack -p:IsTool=true, Çıktı Derlemeleri senaryosunda belirtildiği gibi tüm çıkış dosyaları klasör yerine klasöre lib kopyalanırtools. Bunun, dosyasında ayarlanarak 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ı paketleyemeden nuspec önce projeyi geri yüklemeniz gerekir. (SDK stilindeki bir proje, varsayılan olarak paket hedeflerini içerir.)

Proje dosyasının hedef çerçevesi ilgisizdir ve paketleme nuspecsı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 de projenin varsayılan olarak oluşturulmasına yol açtığını lütfen unutmayın. Bu durum, proje dosyanızdaki ayarın yanı sıra <IncludeBuildOutput>false</IncludeBuildOutput> proje dosyasındaki ayarın <NoBuild>true</NoBuild> eşdeğeri olan özelliği 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ı, bir pakete hedef çerçeveye özgü içerik ve derlemeler dahil olmak üzere destekler:

  • TargetsForTfmSpecificBuildOutput target: klasörünün lib içindeki dosyalar veya kullanılarak BuildOutputTargetFolderbelirtilen bir klasör 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 içinde lib\<TargetFramework> kendi kültür klasörlerinin altına giren uydu derlemeleri gibi 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ın olması 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 adresine geçirin MSBuildNuGet. Build.Tasks.dll
  4. Geri yüklemeyi çalıştırma
  5. Paketleri indirme
  6. Varlık dosyası, hedefler ve props yazma

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

Not

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

Özellikleri geri yükleme

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.
RestoreNoHttpCache True ise, http ö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 olan 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 Geri yükleneceği projelerin noktalı virgülle ayrılmış listesi; bu liste mutlak yollar içermelidir.
RestoreUseSkipNonexistentTargets Projeler aracılığıyla toplandığında MSBuild , iyileştirme kullanılarak SkipNonexistentTargets toplanıp toplanmadıklarını belirler. Ayarlanmadığında, varsayılan olarak olarak trueayarlanır. Bunun sonucu, projenin hedefleri içeri aktarılamadığında başarısız hızlı bir davranıştı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ğın belirtilmesi, 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 herhangi bir uyarı olmadan kilit dosyasını 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>

Proje dosyası:

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

Çıkışları geri yükleme

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

Dosya Açıklama
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 yer alan hedeflere başvurular

Tek MSBuild komutla geri yükleme ve derleme

Hedefleri ve prop'ları düşüren MSBuild paketleri geri yükleyebildiği içinNuGet, geri yükleme ve derleme değerlendirmeleri farklı genel özelliklerle çalıştırılır. Bu, aşağıdakilerin tahmin edilemeyen 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.

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

16.5+ ile MSBuild packages.config de için msbuild -t:restoredesteklenir.

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ğerlendirmesiyle MSBuild geri yükleme

Not

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

msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true

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

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

Not

Visual Studio 2019.x ve NuGet 5.x itibarıyla bu özellik deneysel olarak kabul edilir ve kabul edilir. Bu özelliğin varsayılan olarak ne zaman etkinleştirileceğine ilişkin 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, MSBuild.exe, 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.

Statik graf geri yüklemesine geçiş yaparken tek seferlik bir denetim olarak zihninizi rahatlatmak için ş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 adresine NuGetbir sorun bildirin.

Geri yükleme grafiğinden bir kitaplığı değiştirme

Geri yükleme yanlış derleme getiriyorsa, bu paketlerin varsayılan seçeneğini dışlamak ve kendi seçiminizle değiştirmek mümkündür. İlk olarak en üst düzeye PackageReferencesahip olan 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" />