NuGet hedef olarak paketleme MSBuild ve geri yükleme

4.0+

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

15.1+ ile, ayrıca aşağıda açıklandığı gibi ve hedeflerine sahip MSBuild birinci NuGet sınıf bir MSBuildpackrestore vatandaştır. Bu hedefler, diğer görev veya hedeflerle olduğu gibi NuGetMSBuild çalışmanız için size olanak sağlar. kullanarak paket oluşturma NuGet yönergeleri için MSBuild bkz. Create a NuGet package using MSBuild . (Için NuGet 3.x ve önceki sürümler için, cli NuGetpaketi ve geri yükleme komutlarını kullanırsınız.)

Hedef derleme sırası

packve restore hedef olduğundan iş MSBuild akışınızı geliştirmek için bu hedeflere erişebilirsiniz. Örneğin, paketinizi paketledikten sonra bir ağ paylaşımına kopyalamak istediğinizi diyelim. Proje dosyanıza şunları ekleyerek bunu yapabilirsiniz:

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

Benzer şekilde, bir görev MSBuild yazabilir, kendi hedefinizi yazabilir ve NuGet görev özelliklerini MSBuild tüketebilirsiniz.

Not

$(OutputPath) görelidir ve komutu proje kökünden çalıştırmayı bekler.

paket hedefi

biçimini kullanan .NET projeleri için, kullanılarak paket PackageReferencemsbuild -t:pack oluşturmada kullanmak üzere proje dosyasından girişler NuGet çizer.

Aşağıdaki tabloda, ilk MSBuild düğüm içindeki bir proje dosyasına eklenilen özellikler <PropertyGroup> açıklenmiştir. Projeye sağ tıklar ve bağlam menüsünde Düzenle {project_name} öğesini seçerek bu düzenlemeleri 2017 ve sonraki bir Visual Studio kolayca yapabilirsiniz. Kolaylık olması için tablo, " " data-linktype="relative-path">dosyasındaki eşdeğer özelliğine .nuspec göre düzenlenmiştir.

Not

Owners ve Summary özellikleri .nuspec ile MSBuild desteklenmiyor.

Öznitelik /nuspec Değeri MSBuild Özellik Varsayılan Notlar
Id PackageId $(AssemblyName) $(AssemblyName) Kaynak MSBuild
Version PackageVersion Sürüm Bu, , veya gibi semver 1.0.01.0.0-beta ile 1.0.0-beta-00345 uyumludur. VersionAyarlanmazsa varsayılan olarak ayarlanır.
VersionPrefix VersionPrefix empty Ayar PackageVersion üzerine yazmalar VersionPrefix
VersionSuffix VersionSuffix empty Ayar PackageVersion üzerine yazmalar VersionSuffix
Authors Authors Geçerli kullanıcının kullanıcı adı Paket yazarlarının, nuget.org'da profil adlarından eşleşen noktalı virgülle ayrılmış listesi. Bunlar galerideki NuGet galeride nuget.org ve aynı yazarların paketlerine çapraz başvuru yapmak için kullanılır.
Owners Yok içinde mevcut değil nuspec
Title Title PackageId Genellikle kullanıcı arabiriminde kullanılan paketin kolay bir başlığı, nuget.org ve Paket Yöneticisi olarak Visual Studio.
Description Description "Paket Açıklaması" Derleme için uzun bir açıklama. PackageDescriptionbelirtilmezse, bu özellik paketin açıklaması olarak da kullanılır.
Copyright Copyright empty Paketin telif hakkı ayrıntıları.
RequireLicenseAcceptance PackageRequireLicenseAcceptance false İstemcinin paketi yüklemeden önce tüketiciden paket lisansını kabul etmelerini isteyip istemesi gerekip gerek olmadığını belirten Boole değeri.
license PackageLicenseExpression empty için karşılık gelen <license type="expression"> . 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şvurulan lisans dosyasını açıkça paketlemeniz gerekir. için karşılık gelen <license type="file"> . Bkz. Lisans ifadesini veya lisans dosyasını paketleme.
LicenseUrl PackageLicenseUrl empty PackageLicenseUrl kullanım dışıdır. Bunun PackageLicenseExpression yerine veya PackageLicenseFile kullanın.
ProjectUrl PackageProjectUrl empty
Icon PackageIcon empty Paket simgesi olarak kullanmak üzere pakette bir görüntünün yolu. Başvurulan simge görüntü dosyasını açıkça paketlemelisiniz. Daha fazla bilgi için bkz. Simge görüntü dosyasını paketleme ve "#icon" data-linktype="relative-path">icon meta verileri.
IconUrl PackageIconUrl empty PackageIconUrl , için kullanım PackageIcon dışıdır. Ancak, en iyi alt düzey deneyimi için ek olarak PackageIconUrl belirtmeniz PackageIcon gerekir.
Readme PackageReadmeFile empty Başvurulan beni okuma dosyasını açıkça paketlemelisiniz.
Tags PackageTags empty Paketin etiketlerini noktalı virgülle ayrılmış bir liste.
ReleaseNotes PackageReleaseNotes empty Paketin sürüm notları.
Repository/Url RepositoryUrl empty Kaynak kodu klonlamak veya almak için kullanılan depo URL'si. Örnek: /NuGet NuGet. Client.git" data-linktype="external">. https://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 olması için de belirtilmelidir. Örnek: master ( 4.7.0+).
Repository/Commit RepositoryCommit empty Paketin hangi kaynakta hazır olduğunu belirtmek için isteğe bağlı depo işlemesi veya değişiklik kümesi. RepositoryUrl bu özelliğin dahil olması için de belirtilmelidir. Örnek: 0e4d1b598f350b3dc675018d539114d1328189ef ( 4.7.0+).
PackageType <PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> Paketin amaçlanan kullanımını gösterir. Paket türleri, paket kimlikleri ile aynı biçimi kullanır ve ile ; ayrılmıştır. Paket türleri, ve dizesi ek tarafından , sürüme dahil Version olabilir. Bkz. Set a NuGet package type ( NuGet 3.5.0+).
Summary Desteklenmez

paket hedefi girişleri

Özellik Açıklama
IsPackable Projenin paketli olup olmadığını belirten bir Boole değeri. true varsayılan değerdir.
SuppressDependenciesWhenPacking Oluşturulan true paketten paket bağımlılıklarını gizlemek için olarak NuGet ayarlayın.
PackageVersion Sonuçta elde edilen paketin sahip olduğu sürümü belirtir. Sürüm dizesinin tüm NuGet biçimlerini kabul eder. Varsayılan değer, $(Version) projesinde özelliğinin Version değeridir.
PackageId Sonuç paketinin adını belirtir. Belirtilmemişse, pack işlem varsayılan AssemblyName olarak paketin adı ile veya dizin adını kullanacaktır.
PackageDescription UI görüntüleme paketinin uzun açıklaması.
Authors Nuget.org üzerindeki profil adlarıyla eşleşen paket yazarları için noktalı virgülle ayrılmış bir liste. Bunlar, NuGet NuGet.org üzerindeki galeride görüntülenir ve aynı yazarlara göre çapraz başvuru için kullanılır.
Description Derleme için uzun bir açıklama. PackageDescriptionBelirtilmezse, 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 paket lisansını kabul etmesini isteyip istemeyeceğini belirten bir Boole değeri. Varsayılan değer: false.
DevelopmentDependency Paketin bir 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 önleyen bir Boole değeri. PackageReference( NuGet 4.8 +) ile bu bayrak, derleme zamanı varlıklarının derlemeden dışlandığı anlamına gelir. daha fazla bilgi için bkz . NuGet/home/wiki/developmentdependency-support-for-packagereference "data-linktype =" external ">, packagereference için developmentdependency desteği .
PackageLicenseExpression Örneğin, bir Spdx lisans tanımlayıcısı veya ifadesi . Daha fazla bilgi için bkz. Lisans ifadesi veya lisans dosyası paketleme.
PackageLicenseFile Özel bir lisans veya bir 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ışıdır. PackageLicenseExpressionPackageLicenseFile Bunun yerine veya kullanın.
PackageProjectUrl
PackageIcon Paketin köküne göre paket simge yolunu belirtir. Daha fazla bilgi için bkz. paketleme a Icon Image File.
PackageReleaseNotes Paket için sürüm notları.
PackageReadmeFile Paket için README.
PackageTags Paketi atayan etiketlerin noktalı virgülle ayrılmış listesi.
PackageOutputPath Paketlenmiş paketin bırakılacak çıkış yolunu belirler. $(OutputPath) varsayılan değerdir.
IncludeSymbols Bu Boole değeri, paketin proje paketedildiğinde ek bir sembol paketi oluşturup oluşturmayacağını gösterir. Semboller paketinin biçimi, özelliği tarafından denetlenir SymbolPackageFormat . Daha fazla bilgi için bkz. ıncludesymbols.
IncludeSource Bu Boole değeri, paket işleminin bir kaynak paketi oluşturup oluşturmayacağını gösterir. Kaynak paket, kitaplığın kaynak kodunu ve PDB dosyalarını içerir. Kaynak dosyalar, src/ProjectName elde edilen paket dosyasındaki dizinin altına yerleştirilir. Daha fazla bilgi için bkz. ıncludesource.
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: NuGet /NuGet . Client. git "Data-LinkType =" External ">https://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 edilmesini sağlamak için de belirtilmesi gerekir. Örnek: Master ( 4.7.0 +).
RepositoryCommit Paketin hangi kaynağa göre oluşturulduğunu göstermek için isteğe bağlı depo kaydı veya değişiklik kümesi. RepositoryUrl Bu özelliğin dahil edilmesini sağlamak için de belirtilmesi gerekir. Örnek: 0e4d1b598f350b3dc675018d539114d1328189ef ( 4.7.0 +).
SymbolPackageFormat Semboller paketinin biçimini belirtir. "Symbols. nupkg" ise, pdb 'leri, dll 'Ler ve diğer çıktı dosyalarını içeren . Symbols. nupkg Uzantısı ile 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" dır.
NoPackageAnalysis packPaketi derlemeden sonra paket analizini çalıştırmamalıdır.
MinClientVersion NuGetnuget.exe ve Visual Studio Paket Yöneticisi tarafından zorlanan bu paketi yükleyecan istemcinin en düşük sürümünü belirtir.
IncludeBuildOutput Bu Boole değeri, derleme çıkış derlemelerinin . nupkg dosyasına paketedilip edilmeyeceğini belirtir.
IncludeContentInPack Bu Boole değeri, türü olan herhangi bir öğenin Content elde edilen pakete otomatik olarak dahil edilip edilmeyeceğini 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 Kendileri için belirtilmemişse, tüm içerik dosyalarının gitmesi gereken varsayılan konumu belirtir PackagePath . Varsayılan değer "Content; contentFiles" dır. Daha fazla bilgi için bkz. bir paketteki Içerik ekleme.
NuspecFile .nuspecPaketleme için kullanılan dosyanın göreli veya mutlak yolu. Belirtilmişse, yalnızca paketleme bilgileri için kullanılır ve projelerdeki tüm bilgiler kullanılmaz. Daha fazla bilgi için, bkz nuspec .-File "Data-LinkType =" Self-Yerİşareti ">paketleme .nuspec .
NuspecBasePath Dosya için temel yol .nuspec . Daha fazla bilgi için, bkz nuspec .-File "Data-LinkType =" Self-Yerİşareti ">paketleme .nuspec .
NuspecProperties Anahtar = değer çiftlerinin noktalı virgülle ayrılmış listesi. Daha fazla bilgi için, bkz nuspec .-File "Data-LinkType =" Self-Yerİşareti ">paketleme .nuspec .

paket senaryoları

Gizleme bağımlılıkları

Oluşturulan paketten paket bağımlılıklarını bastırmak için NuGet , olarak ayarlayın SuppressDependenciesWhenPacking ve true oluşturulan nupkg dosyasından tüm bağımlılıkların atlanmasını sağlar.

PackageIconUrl

PackageIconUrl özelliği kullanım dışı bırakılmıştır PackageIcon . NuGet5,3 ve Visual Studio 2019 sürüm 16,3 ' den başlayarak, pack paket meta verileri yalnızca belirtiyorsa NuGet uyarı oluşturur PackageIconUrl .

PackageIcon

İpucu

Henüz desteklemeyen istemcilerle ve kaynaklarla geriye dönük uyumluluk sağlamak için hem hem PackageIcon de belirtin PackageIconPackageIconUrl . Visual Studio, PackageIcon klasör tabanlı bir kaynaktan gelen paketler için destekler.

Simge görüntüsü dosyası paketleme

Bir simge görüntü dosyası paketleme sırasında, PackageIcon paketin köküne göre simge dosya yolunu belirtmek için özelliğini kullanın. 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 içerir. 128x128 görüntü çözümlemesi yapmanızı öneririz.

Örnek:

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

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

NuGet /samples/tree/main/packageiconexample "data-linktype =" external ">Package ıcon sample .

nuspecEşdeğer bir deyişle, nuspecnuspec simgenin "#icon" Data-LinkType = "göreli yol" başvurusuna göz atın >nuspec .

PackageReadmeFile

5.10.0 Preview 2.NET SDK 5.0.300 ve üstü ile desteklenir

Bir Benioku dosyası paketleme sırasında, 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 Marklt (. MD) içerir.

Örnek:

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

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

nuspecEşdeğer olarak, nuspecnuspec Benioku için "#readme" Data-LinkType = "göreli yol" başvurusuna göz atın >nuspec .

Çıkış derlemeleri

nuget pack çıktı dosyalarını,,,, ve uzantılarına kopyalar .exe.dll.xml.winmd.json.pri . Kopyalanan çıkış dosyaları MSBuild hedeften neler sundığına bağlıdır BuiltOutputProjectGroup .

MSBuildÇıktı derlemelerinin nerede olduğunu denetlemek için, proje dosyanızda veya komut satırında kullanabileceğiniz iki özellik vardır:

  • IncludeBuildOutput: Derleme çıkış derlemelerinin pakete dahil edilip edilmeyeceğ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ı

Project dosyalardaki paket başvurularınabakın.

proje başvurularına Project

proje başvurularına Project, varsayılan olarak NuGet paket başvuruları olarak değerlendirilir. Örnek:

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

Proje başvurunıza aşağıdaki meta verileri de eklemek için kullanabilirsiniz:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

Pakete içerik dahil

İçerik eklemek için var olan öğeye ek meta veriler <Content> ekleyin. Varsayılan olarak, aşağıdaki gibi girişlerle geçersiz kılmadıkça "İçerik" türüne sahip her şey pakete dahil edilir:

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

Varsayılan olarak, bir paket içindeki ve klasörünün köküne her şey eklenir ve bir paket yolu belirtmedikçe contentcontentFiles\any\<target_framework> 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 her ikisi yerine) kopyalamak için varsayılan contentcontentFiles olarak MSBuild "content;contentFiles" özelliğini kullanabilirsiniz ancak başka bir klasör adı olarak ContentTargetFolders ayarlanabilirsiniz. yalnızca içinde "contentFiles" belirtildiğinde dosyaların ContentTargetFolders altına veya temel alarak koy olduğunu contentFiles\any\<target_framework>contentFiles\<language>\<target_framework>buildAction unutmayın.

PackagePath noktalı virgülle ayrılmış bir hedef yol kümesi olabilir. Boş bir paket yolu belirtmek dosyayı paketin köküne ekler. Örneğin, aşağıdaki , libuv.txtcontent\myfiles ve paket content\samples köküne ekler:

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

Ayrıca, varsayılan MSBuild olarak $(IncludeContentInPack) değerine sahip olan bir özelliği de true vardır. Bu herhangi bir false projede olarak ayarlanırsa, bu projeden içerik nuget paketine dahil değildir.

Yukarıdaki öğelerden herhangi biri üzerinde ayarlandırabilirsiniz diğer pakete özgü meta veriler, çıkışında girdisinde hangi kümeleri ve <PackageCopyToOutput><PackageFlatten> değerleri CopyToOutputFlattencontentFiles nuspec içerir.

Not

İçerik öğeleri dışında ve meta verileri <Pack><PackagePath> Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource veya None derleme eylemine sahip dosyalarda da ayarlanabilir.

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

IncludeSymbols

kullanılırken, karşılık gelen dosyalar diğer çıkış dosyalarıyla birlikte MSBuild -t:pack -p:IncludeSymbols=true.pdb kopyalanır ( , , .dll , , , .exe.winmd.xml.json.pri ). Ayarın normal IncludeSymbols=true bir paket ve bir semboller IncludeSymbols=true oluşturduğuna dikkat.

IncludeSource

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

Derleme türünde bir dosya proje klasörünün dışında ise, yalnızca dosyasına src\<ProjectName>\ eklenir.

Lisans ifadesi veya lisans dosyası paketleme

Lisans ifadesi kullanırken özelliğini PackageLicenseExpression kullanın. Örnek için bkz. NuGet /Samples/tree/main/PackageLicenseExpressionExample" data-linktype="external">License ifadesi örneği.

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

.org tarafından kabul edilen lisans ifadeleri ve lisanslar hakkında daha fazla bilgi edinmek için NuGet bkz. NuGet " nuspec #license" data-linktype="relative-path">meta verileri.

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

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

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

Örnek için bkz. NuGet /Samples/tree/main/PackageLicenseFileExample" data-linktype="external">License file sample .

Not

Aynı anda PackageLicenseExpressionPackageLicenseFile , ve PackageLicenseUrl 'den yalnızca biri belirtilebilir.

Uzantı olmadan dosya paketleme

Lisans dosyası paketleme gibi bazı senaryolarda, uzantı olmadan bir dosya eklemek istiyor olabilir. Geçmiş nedenlerle, NuGet&MSBuild uzantısız yolları dizin olarak ele atın.

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

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

NuGet /Samples/blob/main/PackageLicenseFileExtensionlessExample/" data-linktype="external">File without an extension sample .

Istool

kullanılırken, Çıkış Derlemeleri senaryosunda belirtilen tüm çıkış MSBuild -t:pack -p:IsTool=true dosyaları klasörü yerine MSBuild -t:pack -p:IsTool=truetools klasörüne lib kopyalanır. Dosyada ayarıyla DotNetCliTool belirtilenden farklı olduğunu PackageType.csproj unutmayın.

-nuspec-file">kullanarak .nuspec paketleme

Genellikle dosyada yer alan tüm özellikleri proje dosyasına dahil etmek önerilmez ancak projenizi paketlemek için bir dosya kullanmayı .nuspec seçebilirsiniz. kullanan SDK stili olmayan bir proje için, PackageReference paket görevinin NuGet.Build.Tasks.Pack.targets yürütülene kadar içeri aktarması gerekir. Yine de bir dosyayı paketlemeden önce projeyi geri nuspec yükleyebilirsiniz. (SDK stilinde bir proje varsayılan olarak paket hedeflerini içerir.)

Proje dosyasının hedef çerçevesi ilgisizdir ve paketlemede nuspec kullanılmaz. Aşağıdaki üç MSBuild özellik, bir kullanarak paketlemeyle ilgilidir: .nuspec

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

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

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

projenizi MSBuild paketlemek için kullanıyorsanız, aşağıdakine benzer 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 de nuspec varsayılan olarak projeyi geliştirmeye yol aç olduğunu unutmayın. Bu, proje dosyanıza özelliği dotnet.exe proje dosyanıza ayar ile eşdeğer olan özelliğin yanı sıra proje --no-build<NoBuild>true</NoBuild> dosyasındaki <IncludeBuildOutput>false</IncludeBuildOutput> ayarıyla da engel olabilir.

Bir dosyayı paketlemek 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ıştıran iki uzantı noktası sağlar. Uzantı noktaları, hedef çerçeveye özgü içeriği ve derlemeleri bir pakete dahil eder:

  • TargetsForTfmSpecificBuildOutput target: klasörün içindeki dosyalar veya lib kullanılarak belirtilen bir klasör için BuildOutputTargetFolder kullanın.
  • TargetsForTfmSpecificContentInPackage target: dışındaki dosyalar için BuildOutputTargetFolder kullanın.

TargetsForTfmSpecificBuildOutput

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

  • FinalOutputPath: Dosyanın mutlak yolu; sağlanmazsa, kimlik kaynak yolunu değerlendirmek için kullanılır.
  • TargetPath: (İsteğe bağlı) Dosyanın içinde, ilgili kültür klasörlerinin altına gidip uydu derlemeleri gibi bir alt lib\<TargetFramework> klasöre ihtiyacı olduğunda ayarlayın. Varsayılan olarak dosyanın adı kullanılı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 değeri olarak $(TargetsForTfmSpecificContentInPackage) belirtin. Pakete dahil etmek istediğiniz dosyaların hedefin bu dosyaları ItemGroup'a yazması ve aşağıdaki isteğe bağlı TfmSpecificPackageFile meta verileri ayarlaması gerekir:

  • PackagePath: Dosyanın pakette çıkışının gerektiği yol. NuGet aynı paket yoluna birden fazla dosya eklenirse bir uyarı sağlar.
  • BuildAction: Dosyaya atanacak derleme eylemi, yalnızca paket yolu klasöründe ise contentFiles gereklidir. Varsayılan olarak "Yok".

Ö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ükleme:

  1. Tüm projeden projeye başvurularını okuma
  2. Ara klasörü ve hedef çerçeveleri bulmak için proje özelliklerini okuyun
  3. MSBuildNuGet .Build.Tasks.dll'a veri Build.Tasks.dll
  4. Geri yükleme çalıştırma
  5. Paketleri indirme
  6. Varlık dosyası, hedef ve teklif yazma

Hedef, restore PackageReference biçimini kullanan projeler için çalışır. MSBuild 16.5+ ayrıca MSBuild 16.5+packages.config desteğine sahip.

Not

restoreHedef, restore çalıştırılamamalı. build

Özellikleri geri yükleme

Ek geri yükleme ayarları proje MSBuild dosyasındaki özelliklerden gelebilir. Değerler, anahtar kullanılarak komut satırına da -p: ayarlandırabilirsiniz (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 tek tek sınırlama.
RestoreConfigFile Uygulanacak Nuget.Config dosyanın yolu.
RestoreNoCache True ise, önbelleğe alınmış paketlerin kullanımından kaçınıyor. 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üyle aynı ş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 İçinde belirtilen geri dönüş klasörlerini dışlar RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFile Yolu NuGet.Build.Tasks.dll .
RestoreGraphProjectInput Geri yüklenecek projelerin, mutlak yollar içermesi gereken, noktalı virgülle ayrılmış listesi.
RestoreUseSkipNonexistentTargets Projeler aracılığıyla toplandığında, MSBuild iyileştirme kullanılarak toplanıp toplanmayacağını belirler SkipNonexistentTargets . Ayarlanmazsa, varsayılan olarak olur true . Projenin hedefleri içeri aktarılmadığı zaman, sonuç 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ülmesini zorlar. Bu bayrağın belirtilmesi, dosyanın silinmesine benzer project.assets.json . Bu, http-cache ' i atlar.
RestorePackagesWithLockFile Bir kilit dosyasının kullanımıyla ilgili olarak.
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ında bulunur ve adlandırılır packages.lock.json .
RestoreForceEvaluate Bağımlılıkları yeniden hesaplamak ve herhangi bir uyarı olmadan kilit dosyasını güncelleştirmek için geri yüklemeyi zorlar.
RestorePackagesConfig packages.config olan projeleri geri yükleyen bir kabul etme anahtarı. Yalnızca ile desteklenir MSBuild -t:restore .
RestoreUseStaticGraphEvaluation Standart değerlendirme yerine statik grafik değerlendirmesini kullanmak için bir tercih MSBuild edilen anahtar. Statik grafik değerlendirmesi, büyük depolar ve çözümler için önemli ölçüde daha hızlı olan deneysel bir özelliktir.

Örnekler

Komut satırı:

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

Project dosyası:

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

Çıkışları geri yükleme

Restore derleme klasöründe aşağıdaki dosyaları oluşturur obj :

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 MSBuildPaketlerde bulunan props 'a başvurular
{projectName}.projectFileExtension.nuget.g.targets MSBuildPaketlerde bulunan hedeflere başvurular

Tek bir komutla geri yükleme ve oluşturma MSBuild

NuGetHedefleri ve props 'ı getiren paketleri geri yükleyen olgu nedeniyle MSBuild , 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 şunlardır:

msbuild -t:build -restore

Aynı Logic şuna benzer diğer hedefler için de geçerlidir build .

İle PackageReference ve packages.config projelerini geri yükleme MSBuild

MSBuild16.5 + ile packages.config de desteklenir msbuild -t:restore .

msbuild -t:restore -p:RestorePackagesConfig=true

Not

packages.config restore yalnızca ile kullanılabilir MSBuild 16.5+ ve dotnet.exe

MSBuildStatik grafik değerlendirmesi ile geri yükleme

Not

MSBuild16.6 + ile, NuGet büyük depolar için geri yükleme süresini önemli ölçüde artıran komut satırından statik grafik değerlendirmesi kullanmak için deneysel bir özellik eklemiştir.

msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true

Alternatif olarak, bir dizin. Build. props içindeki özelliği ayarlayarak bunu etkinleştirebilirsiniz.

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

Not

Visual Studio 2019. x ve NuGet 5. x itibariyle, bu özellik deneysel ve kabul edilmelidir. NuGet bu özelliğin varsayılan olarak etkinleştirileceği hakkında daha fazla bilgi için, NuGet/home/ıssues/9803 "data-linktype =" external ">/home # 9803 izleyin.

Statik grafik geri yükleme, geri yükleme 'nin MSBuild bölümünü, Proje okuma ve değerlendirme, ancak geri yükleme algoritmasını etkilemez! Geri yükleme algoritması tüm NuGet araçlarda aynıdır ( NuGet.exe, MSBuild.exe, dotnet.exe ve Visual Studio).

Birçok senaryoda, statik grafik geri yükleme geçerli geri yüklemeden farklı davranabilir ve belirtilen bazı Packagereferklu veya ProjectReferences eksik olabilir.

Bir kez göz önünde bulundurmanız için, statik grafik geri yüklemeye geçiş yaparken şunu çalıştırmayı göz önünde bulundurun:

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

NuGet hiçbir NuGet . Bir tutarsızlık görürseniz lütfen bir sorun bildirin NuGet/Home .

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

Geri yükleme yanlış derlemeyi alıyorsa, bu paketlerin varsayılan seçeneğini hariç tutabilir ve kendi seçimiyle değiştirin. Birincisi, en üst düzeyle PackageReference , tüm varlıkları hariç tut:

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

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

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