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
NuspecFile: paketleme için kullanılan.nuspecdosyanın göreli veya mutlak yolu.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".NuspecBasePath: Dosyanın temel.nuspecyolu.
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:
TargetsForTfmSpecificBuildOutputtarget: klasörün içindeki dosyalar veyalibkullanılarak belirtilen bir klasör içinBuildOutputTargetFolderkullanın.TargetsForTfmSpecificContentInPackagetarget: dışındaki dosyalar içinBuildOutputTargetFolderkullanı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 altlib\<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 isecontentFilesgereklidir. 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:
- Tüm projeden projeye başvurularını okuma
- Ara klasörü ve hedef çerçeveleri bulmak için proje özelliklerini okuyun
- MSBuildNuGet .Build.Tasks.dll'a veri Build.Tasks.dll
- Geri yükleme çalıştırma
- Paketleri indirme
- 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" />