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 MSBuild pack
, 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 Mülk | 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-beta veya 1.0.0-beta-00345 . Version Ayarlanmadıysa varsayılan olarak ayarlanır. |
VersionPrefix |
VersionPrefix |
empty | Üzerine yazmaları ayarlama PackageVersion VersionPrefix |
VersionSuffix |
VersionSuffix |
empty | Üzerine yazmaları ayarlama PackageVersion VersionSuffix |
Authors |
Authors |
Geçerli kullanıcının kullanıcı adı | .org'daki nugetprofil adlarına uyan, paket yazarlarının noktalı virgülle ayrılmış listesi. Bunlar .org'daki NuGet nugetGaleri'de 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ığı.org'da nugetve Paket Yöneticisi Visual Studio'da 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 PackageIcon kullanım dışı bırakılmıştır. Ancak, en iyi alt düzey deneyimi için ek olarak PackageIcon belirtmelisinizPackageIconUrl . |
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 |
.org'daki nugetprofil adlarına uyan, paket yazarlarının noktalı virgülle ayrılmış listesi. Bunlar .org'daki NuGet nugetGaleri'de 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 |
.exe ve Visual Studio Paket Yöneticisi tarafından nugetzorlanan 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 PackageIcon
istemciler ve kaynaklarla geriye dönük uyumluluğu korumak için hem hem PackageIconUrl
de 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>
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 ileNuGet desteklenir /
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
.json
ve .pri
uzantı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 ContentTargetFolders
kullanabilirsiniz 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 buildAction
alı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\samples
ve paket köküne content\myfiles
eklenirlibuv.txt
:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>
Varsayılan olarak true
olarak ayarlayan bir MSBuild özelliği $(IncludeContentInPack)
de vardır. Bu herhangi bir projede olarak ayarlanırsa false
, bu projedeki içerik pakete nuget 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>
.contentFiles
nuspec
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ış false
herhangi 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
, PackageLicenseFile
ve 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 PackageReference
SDK 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 .nuspec
paketlemeyle ilgilidir:
NuspecFile
: paketleme için.nuspec
kullanılan dosyanın göreli veya mutlak yolu.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"
.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 kullanarak paketlemenin nuspec veya msbuild 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ünlib
içindeki dosyalar veya kullanılarakBuildOutputTargetFolder
belirtilen bir klasör için kullanın.TargetsForTfmSpecificContentInPackage
target: dışındakiBuildOutputTargetFolder
dosyalar 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çindelib\<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ördeysecontentFiles
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 restore
dotnet restore
.NET Core projeleriyle birlikte kullanılır), proje dosyasında başvurulan paketleri aşağıdaki gibi geri yükler:
- Tüm projeyi proje başvurularına okuma
- Ara klasörü ve hedef çerçeveleri bulmak için proje özelliklerini okuyun
- verileri adresine geçirin MSBuild NuGet. Build.Tasks.dll
- Geri yüklemeyi çalıştırma
- Paketleri indirme
- 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ğine packages.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.dll yolu. |
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 true ayarlanı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. |
RestoreUseLegacyDependencyResolver |
Eski bağımlılık çözümleyicisini kullanmak için bir geri çevirme. NuGet'nin bağımlılık çözümleyici uygulaması 6.12 sürümünde yeniden yazıldı. Bu anahtar, önceki algoritmayı kullanılmaya zorlar. |
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 build
diğ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:restore
desteklenir.
msbuild -t:restore -p:RestorePackagesConfig=true
Not
packages.config
geri yükleme yalnızca ile MSBuild 16.5+
kullanılabilir, ile kullanılamaz dotnet.exe
Statik graf değ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 bölümünü, proje okuma ve değerlendirmeyi değiştirir msbuild , 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 PackageReference
sahip 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" />