NuGet hedef olarak MSBuild paketleme ve geri yükleme
NuGet 4.0+
PackageReference biçimiyle, NuGet 4.0+ tüm bildirim meta verilerini ayrı .nuspec
bir dosya kullanmak yerine doğrudan bir proje dosyasında depolayabilir.
MSBuild 15.1+ ile, NuGet ayrıca aşağıda açıklandığı gibi ve restore
hedeflerine sahip pack
birinci sınıf MSBuild bir vatandaştır. Bu hedefler, başka MSBuild bir görev veya hedefle yaptığınız gibi ile NuGet çalışmanıza olanak tanır. kullanarak MSBuildpaket oluşturma NuGet yönergeleri için bkz. kullanarak MSBuildpaket oluşturmaNuGet. (For NuGet 3.x ve önceki sürümlerde, bunun yerine CLI aracılığıyla NuGetpaketle ve geri yükleme komutlarını kullanırsınız.)
Hedef derleme sırası
ve restore
hedefleri olduğundan MSBuildpack
, iş akışınızı geliştirmek için bunlara erişebilirsiniz. Örneğin, paketinizi paketledikten sonra bir ağ paylaşımına kopyalamak istediğinizi varsayalım. Bunu yapmak için proje dosyanıza aşağıdakileri ekleyebilirsiniz:
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy
SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
DestinationFolder="\\myshare\packageshare\"
/>
</Target>
Benzer şekilde, bir MSBuild görev yazabilir, kendi hedefinizi yazabilir ve görevdeki MSBuild özellikleri kullanabilirsinizNuGet.
Not
$(OutputPath)
görelidir ve komutunu proje kökünden çalıştırmanızı bekler.
paket hedefi
biçimini kullanan PackageReference
.NET projeleri için, kullanarak msbuild -t:pack
bir paket oluştururken NuGet kullanmak üzere proje dosyasından girişler çizer.
Aşağıdaki tabloda, ilk <PropertyGroup>
düğüm içindeki bir proje dosyasına eklenebilen özellikler açıklanmaktadırMSBuild. Visual Studio 2017 ve sonraki sürümlerde projeye sağ tıklayıp bağlam menüsünden Düzenle {project_name} öğesini seçerek bu düzenlemeleri kolayca yapabilirsiniz. Kolaylık olması için tablo, bir.nuspec
dosyadaki eşdeğer özelliğe göre düzenlenir.
Not
Owners
ve Summary
özellikleri .nuspec
ile MSBuilddesteklenmez.
Öznitelik/nuspec Değer | MSBuild Özellik | Varsayılan | Notlar |
---|---|---|---|
Id |
PackageId |
$(AssemblyName) |
$(AssemblyName) Kaynak MSBuild |
Version |
PackageVersion |
Sürüm | Bu, semver ile uyumludur; örneğin 1.0.0 , , 1.0.0-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ı | nuget.org profil adlarını eşleştiren, paket yazarlarının noktalı virgülle ayrılmış listesi. Bunlar nuget.org'daki Galeri'de NuGet görüntülenir ve aynı yazarlar tarafından paketlere çapraz başvuru yapmak için kullanılır. |
Owners |
Yok | Içinde yok nuspec | |
Title |
Title |
$(PackageId) |
Genellikle kullanıcı arabiriminde kullanılan paketin insan dostu başlığı nuget.org ve Paket Yöneticisi Visual Studio olarak görüntülenir. |
Description |
Description |
"Paket Açıklaması" | Derleme için uzun bir açıklama. Belirtilmezse PackageDescription , bu özellik paketin açıklaması olarak da kullanılır. |
Copyright |
Copyright |
empty | Paket için telif hakkı ayrıntıları. |
RequireLicenseAcceptance |
PackageRequireLicenseAcceptance |
false |
İstemcinin paketi yüklemeden önce tüketiciden paket lisansını kabul etmesi isteyip istemediğinizi belirten bir Boole değeri. |
license |
PackageLicenseExpression |
empty | öğesine <license type="expression"> karşılık gelir. Bkz . Lisans ifadesini veya lisans dosyasını paketleme. |
license |
PackageLicenseFile |
empty | Özel lisans veya SPDX tanımlayıcısı atanmamış bir lisans kullanıyorsanız paket içindeki bir lisans dosyasının yolu. Başvuruda bulunılan lisans dosyasını açıkça paketlemeniz gerekir. öğesine <license type="file"> karşılık gelir. Bkz . Lisans ifadesini veya lisans dosyasını paketleme. |
LicenseUrl |
PackageLicenseUrl |
empty | PackageLicenseUrl kullanım dışı bırakıldı. Bunun yerine veya PackageLicenseFile kullanınPackageLicenseExpression . |
ProjectUrl |
PackageProjectUrl |
empty | |
Icon |
PackageIcon |
empty | Paket simgesi olarak kullanılacak paketteki görüntünün yolu. Başvuruda bulunılan simge görüntü dosyasını açıkça paketlemeniz gerekir. Daha fazla bilgi için bkz . Simge görüntü dosyasını ve icon meta verileri paketleme. |
IconUrl |
PackageIconUrl |
empty | PackageIconUrl , lehine PackageIcon kullanım dışıdır. Ancak, en iyi alt düzey deneyimi için öğesine ek olarak PackageIcon belirtmeniz PackageIconUrl gerekir. |
Readme |
PackageReadmeFile |
empty | Başvuruda bulunılan benioku dosyasını açıkça paketlemeniz gerekir. |
Tags |
PackageTags |
empty | Paketi tanımlayan etiketlerin noktalı virgülle ayrılmış listesi. |
ReleaseNotes |
PackageReleaseNotes |
empty | Paketin sürüm notları. |
Repository/Url |
RepositoryUrl |
empty | Kaynak kodu kopyalamak veya almak için kullanılan depo URL'si. Örnek: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git. |
Repository/Type |
RepositoryType |
empty | Depo türü. Örnekler: git (varsayılan), tfs . |
Repository/Branch |
RepositoryBranch |
empty | İsteğe bağlı depo dal bilgileri. RepositoryUrl bu özelliğin dahil edilmesi için de belirtilmelidir. Örnek: master (NuGet 4.7.0+). |
Repository/Commit |
RepositoryCommit |
empty | Paketin hangi kaynakta oluşturulduğunu belirtmek için isteğe bağlı depo işlemesi veya değişiklik kümesi. RepositoryUrl bu özelliğin dahil edilmesi için de belirtilmelidir. Örnek: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+). |
PackageType |
<PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> |
Paketin amaçlanan kullanımını gösterir. Paket türleri, paket kimlikleriyle aynı biçimi kullanır ve ile ; sınırlandırılır. Paket türleri, bir , ve Version dizesi eklenerek sürümlenebilir. Bkz. Paket türü ayarlama NuGet (NuGet 3.5.0+). |
|
Summary |
Desteklenmez |
paket hedefi girişleri
Özellik | Açıklama |
---|---|
IsPackable |
Projenin paketlenip paketlenemeyeceğini belirten boole değeri. true varsayılan değerdir. |
SuppressDependenciesWhenPacking |
true Oluşturulan NuGet paketten paket bağımlılıklarını engellemek için olarak ayarlayın. |
PackageVersion |
Sonuçta elde edilen paketin sahip olacağı sürümü belirtir. Sürüm dizesinin tüm biçimlerini NuGet kabul eder. Varsayılan değer, projedeki özelliğin Version değeridir$(Version) . |
PackageId |
Sonuçta elde edilen paketin adını belirtir. Belirtilmezse, pack işlem varsayılan olarak paketin AssemblyName adı olarak veya dizin adını kullanır. |
PackageDescription |
Kullanıcı arabirimi görüntüsü için paketin uzun açıklaması. |
Authors |
nuget.org profil adlarına uyan, paket yazarlarının noktalı virgülle ayrılmış listesi. Bunlar nuget.org'da Galeri'de NuGet görüntülenir ve aynı yazarlar tarafından paketlere çapraz başvuruda bulunma amacıyla kullanılır. |
Description |
Derleme için uzun bir açıklama. Belirtilmezse PackageDescription , bu özellik paketin açıklaması olarak da kullanılır. |
Copyright |
Paket için telif hakkı ayrıntıları. |
PackageRequireLicenseAcceptance |
İstemcinin paketi yüklemeden önce tüketiciden paket lisansını kabul etmesi gerekip gerekmediğini belirten boole değeri. Varsayılan değer: false . |
DevelopmentDependency |
Paketin yalnızca geliştirme bağımlılığı olarak işaretlenip işaretlenmediğini belirten ve paketin diğer paketlere bağımlılık olarak eklenmesini engelleyen Boole değeri. (NuGet 4.8+) ile PackageReference bu bayrak, derleme zamanı varlıklarının derlemenin dışında bırakıldığı anlamına da gelir. Daha fazla bilgi için bkz. PackageReference için DevelopmentDependency desteği. |
PackageLicenseExpression |
SPDX lisans tanımlayıcısı veya ifadesi, örneğin, Apache-2.0 . Daha fazla bilgi için bkz . Lisans ifadesini veya lisans dosyasını paketleme. |
PackageLicenseFile |
Özel lisans veya SPDX tanımlayıcısı atanmamış bir lisans kullanıyorsanız paket içindeki lisans dosyasının yolu. |
PackageLicenseUrl |
PackageLicenseUrl kullanım dışı bırakıldı. Veya PackageLicenseFile yerine kullanınPackageLicenseExpression . |
PackageProjectUrl |
|
PackageIcon |
Paketin köküne göre paket simgesi yolunu belirtir. Daha fazla bilgi için bkz . Simge görüntü dosyasını paketleme. |
PackageReleaseNotes |
Paket için sürüm notları. |
PackageReadmeFile |
Paket için benioku. |
PackageTags |
Paketi tanımlayan etiketlerin noktalı virgülle ayrılmış listesi. |
PackageOutputPath |
Paketlenmiş paketin bırakılacağı çıkış yolunu belirler. $(OutputPath) varsayılan değerdir. |
IncludeSymbols |
Bu Boole değeri, proje paketlendiğinde paketin ek sembol paketi oluşturup oluşturmayacağını gösterir. Sembol paketinin biçimi özelliği tarafından SymbolPackageFormat denetlenmektedir. Daha fazla bilgi için bkz. IncludeSymbols. |
IncludeSource |
Bu Boole değeri, paket işleminin kaynak paket oluşturup oluşturmayacağını gösterir. Kaynak paket kitaplığın kaynak kodunun yanı sıra PDB dosyalarını içerir. Kaynak dosyalar, sonuçta elde edilen src/ProjectName paket dosyasında dizinin altına konur. Daha fazla bilgi için bkz. IncludeSource. |
PackageType |
|
IsTool |
Tüm çıkış dosyalarının lib klasörü yerine araçlar klasörüne kopyalanıp kopyalanmayacağını belirtir. Daha fazla bilgi için bkz. IsTool. |
RepositoryUrl |
Kaynak kodu kopyalamak veya almak için kullanılan depo URL'si. Örnek: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git. |
RepositoryType |
Depo türü. Örnekler: git (varsayılan), tfs . |
RepositoryBranch |
İsteğe bağlı depo dal bilgileri. RepositoryUrl bu özelliğin dahil edilmesi için de belirtilmelidir. Örnek: ana (NuGet 4.7.0+). |
RepositoryCommit |
Paketin hangi kaynağa göre oluşturulduğuna ilişkin isteğe bağlı depo işlemesi veya değişiklik kümesi. RepositoryUrl bu özelliğin dahil edilmesi için de belirtilmelidir. Örnek: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+). |
SymbolPackageFormat |
Sembol paketinin biçimini belirtir. "symbols.nupkg" ise PDB'ler, DLL'ler ve diğer çıkış dosyalarını içeren bir .symbols.nupkg uzantısıyla eski bir sembol paketi oluşturulur. "snupkg" ise, taşınabilir PDB'leri içeren bir snupkg sembol paketi oluşturulur. Varsayılan değer "symbols.nupkg" şeklindedir. |
NoPackageAnalysis |
Paketi derledikten pack sonra paket analizinin çalıştırılmaması gerektiğini belirtir. |
MinClientVersion |
nuget.exe ve Visual Studio Paket Yöneticisi tarafından zorlanan, bu paketi yükleyebilen istemcinin en düşük sürümünü NuGet belirtir. |
IncludeBuildOutput |
Bu Boole değeri, derleme çıkış derlemelerinin .nupkg dosyasına paketlenip paketlenmeyeceğini belirtir. |
IncludeContentInPack |
Bu Boole değeri, türüne sahip olan öğelerin otomatik olarak sonuç paketine eklenip eklenmeyeceğini Content belirtir. Varsayılan değer: true . |
BuildOutputTargetFolder |
Çıkış derlemelerinin yerleştirileceği klasörü belirtir. Çıkış derlemeleri (ve diğer çıkış dosyaları) ilgili çerçeve klasörlerine kopyalanır. Daha fazla bilgi için bkz . Çıkış derlemeleri. |
ContentTargetFolders |
Bunlar için belirtilmezse PackagePath , tüm içerik dosyalarının gitmesi gereken varsayılan konumu belirtir. Varsayılan değer "content;contentFiles" değeridir. Daha fazla bilgi için bkz . Pakete içerik ekleme. |
NuspecFile |
Paketleme için .nuspec kullanılan dosyanın göreli veya mutlak yolu. Belirtilirse, yalnızca paketleme bilgileri için kullanılır ve projelerdeki bilgiler kullanılmaz. Daha fazla bilgi için bkz . Kullanarak paketleme .nuspec. |
NuspecBasePath |
Dosyanın temel yolu .nuspec . Daha fazla bilgi için bkz . Kullanarak paketleme .nuspec. |
NuspecProperties |
Anahtar=değer çiftlerinin noktalı virgülle ayrılmış listesi. Daha fazla bilgi için bkz . Kullanarak paketleme .nuspec. |
paket senaryoları
Bağımlılıkları gizleme
Paket bağımlılıklarını oluşturulan NuGet paketten engellemek içintrue
, oluşturulan nupkg dosyasındaki tüm bağımlılıkların atlanması için değerine ayarlanırSuppressDependenciesWhenPacking
.
PackageIconUrl
PackageIconUrl
özelliğine göre PackageIcon
kullanım dışı bırakılmıştır. 5.3 ve Visual Studio 2019 sürüm 16.3'den NuGet başlayarak, pack
paket meta verileri yalnızca öğesini belirtiyorsa NU5048 uyarısını tetiklerPackageIconUrl
.
PackageIcon
İpucu
henüz desteklemeyen 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 desteklerPackageIcon
.
Simge resim dosyasını paketleme
Simge görüntü dosyasını paketlerken, simge dosyası yolunu paketin köküne göre belirtmek için özelliğini kullanın PackageIcon
. Ayrıca, dosyanın pakete dahil olduğundan emin olun. Görüntü dosyası boyutu 1 MB ile sınırlıdır. Desteklenen dosya biçimleri JPEG ve PNG'leri içerir. 128x128 görüntü çözünürlüğü önerilir.
Örneğin:
<PropertyGroup>
...
<PackageIcon>icon.png</PackageIcon>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="images\icon.png" Pack="true" PackagePath="\"/>
...
</ItemGroup>
Eşdeğeri nuspeciçin simge başvurusunanuspec göz atın.
PackageReadmeFile
5.10.0 önizleme 2.NET SDK 5.0.300 ve üzeri ile NuGetdesteklenir /
Benioku dosyasını paketlerken, paketin PackageReadmeFile
köküne göre paket yolunu belirtmek için özelliğini kullanmanız gerekir. Buna ek olarak, dosyanın pakete dahil olduğundan emin olmanız gerekir. Desteklenen dosya biçimleri yalnızca Markdown (.md) içerir.
Örneğin:
<PropertyGroup>
...
<PackageReadmeFile>readme.md</PackageReadmeFile>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="docs\readme.md" Pack="true" PackagePath="\"/>
...
</ItemGroup>
Eşdeğeri nuspeciçin benioku başvurusuna göz atınnuspec.
Çıkış derlemeleri
nuget pack
, , , .winmd
.xml
.dll
.json
, ve .pri
uzantılı .exe
çıkış dosyalarını kopyalar. Kopyalanan çıkış dosyaları, hedeften neler MSBuild sağladığına BuiltOutputProjectGroup
bağlıdır.
Çıkış derlemelerinin nereye gideceğini denetlemek için proje dosyanızda veya komut satırınızda kullanabileceğiniz iki MSBuild özellik vardır:
IncludeBuildOutput
: Derleme çıkış derlemelerinin pakete eklenip eklenmeyeceğini belirleyen bir boole değeri.BuildOutputTargetFolder
: Çıkış derlemelerinin yerleştirilmesi gereken klasörü belirtir. Çıkış derlemeleri (ve diğer çıkış dosyaları) ilgili çerçeve klasörlerine kopyalanır.
Paket başvuruları
Bkz. Project Dosyalarındaki Paket Başvuruları.
Proje başvurularına Project
Proje başvurularına Project varsayılan olarak paket başvuruları olarak NuGet kabul edilir. Örneğin:
<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>
Proje başvurunuza aşağıdaki meta verileri de ekleyebilirsiniz:
<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>
Pakete içerik ekleme
İçerik eklemek için var olan <Content>
öğeye ek meta veriler ekleyin. Aşağıdaki gibi girdilerle geçersiz kılmadığınız sürece varsayılan olarak "İçerik" türündeki her şey pakete eklenir:
<Content Include="..\win7-x64\libuv.txt">
<Pack>false</Pack>
</Content>
Varsayılan olarak, paket içindeki ve contentFiles\any\<target_framework>
klasörünün content
köküne her şey eklenir ve bir paket yolu belirtmediğiniz sürece göreli klasör yapısını korur:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles\</PackagePath>
</Content>
Tüm içeriğinizi yalnızca belirli bir kök klasöre (ve contentFiles
her ikisi yerinecontent
) kopyalamak istiyorsanız özelliğini kullanabilirsinizMSBuild. Bu özellik ContentTargetFolders
varsayılan olarak "content;contentFiles" olarak ayarlanır ancak diğer klasör adlarına ayarlanabilir. 'de ContentTargetFolders
yalnızca "contentFiles" değerinin belirtilmesiyle dosyaların altına contentFiles\any\<target_framework>
veya contentFiles\<language>\<target_framework>
temel 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
eklerlibuv.txt
:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>
Varsayılan olarak true
olan bir MSBuild özelliği $(IncludeContentInPack)
de vardır. Bu herhangi bir projede olarak ayarlanırsa false
, bu projedeki içerik nuget paketine dahil değildir.
Yukarıdaki öğelerden herhangi birinde ayarlayabileceğiniz diğer pakete özgü meta veriler ve çıkıştaki nuspecgirdide contentFiles
hangi kümeleri CopyToOutput
ve Flatten
değerleri içerir<PackageCopyToOutput>
.<PackageFlatten>
Not
İçerik öğelerinin yanı sıra ve <PackagePath>
meta verileri Derleme, <Pack>
EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource veya None derleme eylemiyle dosyalarda da ayarlanabilir.
Paketin globbing desenlerini kullanırken paket yolunuz için dosya adını eklemesi için, paket yolunuz klasör ayırıcı karakteriyle bitmelidir, aksi takdirde paket yolu dosya adı da dahil olmak üzere tam yol olarak kabul edilir.
IncludeSymbols
kullanırken MSBuild -t:pack -p:IncludeSymbols=true
ilgili .pdb
dosyalar diğer çıkış dosyalarıyla (.dll
, .exe
, , .winmd
, .xml
, .json
, .pri
) birlikte kopyalanır. Ayarın IncludeSymbols=true
normal bir paket ve sembol paketi oluşturduğunu unutmayın.
IncludeSource
Bu, ile aynıdır IncludeSymbols
, ancak dosyalarla .pdb
birlikte kaynak dosyaları da kopyalar. Türdeki Compile
tüm dosyalar, sonuçta elde edilen paketteki göreli yol klasör yapısını korumak için src\<ProjectName>\
üzerine kopyalanır. Aynı durum, olarak ayarlanmış false
herhangi birinin ProjectReference
TreatAsPackageReference
kaynak dosyaları için de gerçekleşir.
Derle türünde bir dosya proje klasörünün dışındaysa, yalnızca öğesine src\<ProjectName>\
eklenir.
Lisans ifadesini veya lisans dosyasını paketleme
Lisans ifadesi kullanırken özelliğini kullanın PackageLicenseExpression
. Örnek için bkz . Lisans ifadesi örneği.
<PropertyGroup>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
.org tarafından NuGetkabul edilen lisans ifadeleri ve lisanslar hakkında daha fazla bilgi edinmek için bkz. lisans meta verileri.
Bir lisans dosyasını paketlerken, paketin köküne göre paket yolunu belirtmek için özelliğini kullanın PackageLicenseFile
. Ayrıca, dosyanın pakete dahil olduğundan emin olun. Örneğin:
<PropertyGroup>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>
Örnek için bkz. Lisans dosyası örneği.
Not
Aynı anda yalnızca bir PackageLicenseExpression
, PackageLicenseFile
ve PackageLicenseUrl
belirtilebilir.
Uzantı olmadan dosya paketleme
Lisans dosyası paketleme gibi bazı senaryolarda, uzantısız bir dosya eklemek isteyebilirsiniz. Geçmişe dönük nedenlerden dolayı, NuGet&MSBuild uzantıları olmayan yolları dizin olarak ele alır.
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="LICENSE" Pack="true" PackagePath=""/>
</ItemGroup>
Istool
kullanırken MSBuild -t:pack -p:IsTool=true
, Çıktı Derlemeleri senaryosunda belirtildiği gibi tüm çıkış dosyaları klasör yerine klasöre tools
lib
kopyalanır. Bunun, dosyasında ayarıyla PackageType
.csproj
belirtilenden DotNetCliTool
farklı olduğunu unutmayın.
Dosya kullanarak .nuspec
paketleme
Bunun yerine genellikle dosyada .nuspec
yer alan tüm özellikleri proje dosyasına eklemeniz önerilir, ancak projenizi paketlemek için bir .nuspec
dosya kullanmayı seçebilirsiniz. kullanan 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ı paketlemeden nuspec önce projeyi geri yüklemeniz gerekir. (SDK stilinde bir proje, varsayılan olarak paket hedeflerini içerir.)
Proje dosyasının hedef çerçevesi ilgisizdir ve bir nuspecpaketleme sırasında kullanılmaz. Aşağıdaki üç MSBuild özellik, kullanarak .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 veya msbuild kullanarak paketlemenin nuspec , projenin varsayılan olarak oluşturulmasına da yol açtığını lütfen unutmayın. Bu, özelliği proje dosyanızdaki ayarın yanı sıra <IncludeBuildOutput>false</IncludeBuildOutput>
proje dosyasındaki ayarın <NoBuild>true</NoBuild>
eşdeğeri olan dotnet.exe geçirerek --no-build
önlenebilir.
Bir dosyayı paketlemek nuspec için bir .csproj dosyası örneği:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<NoBuild>true</NoBuild>
<IncludeBuildOutput>false</IncludeBuildOutput>
<NuspecFile>PATH_TO_NUSPEC_FILE</NuspecFile>
<NuspecProperties>add nuspec properties here</NuspecProperties>
<NuspecBasePath>optional to provide</NuspecBasePath>
</PropertyGroup>
</Project>
Özelleştirilmiş paket oluşturmak için gelişmiş uzantı noktaları
Hedef pack
, iç, hedef çerçeveye özgü derlemede çalışan iki uzantı noktası sağlar. Uzantı noktaları, hedef çerçeveye özgü içerik ve derlemeleri bir pakete eklemeyi destekler:
TargetsForTfmSpecificBuildOutput
target: kullanılarak belirtilenBuildOutputTargetFolder
klasör veya klasör içindekilib
dosyalar 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 kendi kültür klasörlerinin altına giren uydu derlemeleri gibi içindelib\<TargetFramework>
bir alt klasöre gitmesi gerektiğinde ayarlayın. Varsayılan olarak dosyanın adını kullanır.
Örnek:
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="GetMyPackageFiles">
<ItemGroup>
<BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
<TargetPath>cs</TargetPath>
</BuildOutputInPackage>
</ItemGroup>
</Target>
TargetsForTfmSpecificContentInPackage
Özel bir hedef yazın ve özelliğin $(TargetsForTfmSpecificContentInPackage)
değeri olarak belirtin. Pakete eklenecek tüm dosyalar için, hedef bu dosyaları ItemGroup'a TfmSpecificPackageFile
yazmalı ve aşağıdaki isteğe bağlı meta verileri ayarlamalıdır:
PackagePath
: Dosyanın pakette çıkışını alması gereken yol. NuGet , aynı paket yoluna birden fazla dosya eklendiğinde bir uyarı oluşturur.BuildAction
: Dosyaya atanacak derleme eylemi, yalnızca paket yolu klasö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 .Build.Tasks.dll'a NuGetgeçirme MSBuild
- Geri yüklemeyi çalıştırma
- Paketleri indirme
- Varlık dosyası, hedefleri ve props yazma
Hedef, restore
PackageReference biçimini kullanan projeler için çalışır.
MSBuild 16.5+
ayrıca biçimi için kabul etme desteğinepackages.config
sahiptir.
Not
Hedef, restore
hedefle build
birlikte çalıştırılmamalıdır.
Geri yükleme özellikleri
Ek geri yükleme ayarları proje dosyasındaki özelliklerden MSBuild gelebilir. Değerler, anahtar kullanılarak -p:
komut satırından da ayarlanabilir (aşağıdaki örneklere bakın).
Özellik | Açıklama |
---|---|
RestoreSources |
Paket kaynaklarının noktalı virgülle ayrılmış listesi. |
RestorePackagesPath |
Kullanıcı paketleri klasör yolu. |
RestoreDisableParallel |
İndirmeleri bir kerede bir ile sınırlayın. |
RestoreConfigFile |
Nuget.Config Uygulanacak dosyanın yolu. |
RestoreNoCache |
Doğruysa, önbelleğe alınmış paketleri kullanmaktan kaçınır. Bkz. Genel paketleri ve önbellek klasörlerini yönetme. |
RestoreIgnoreFailedSources |
True ise, başarısız veya eksik paket kaynaklarını yoksayar. |
RestoreFallbackFolders |
Geri dönüş klasörleri, kullanıcı paketleri klasörünün kullanıldığı şekilde kullanılır. |
RestoreAdditionalProjectSources |
Geri yükleme sırasında kullanılacak ek kaynaklar. |
RestoreAdditionalProjectFallbackFolders |
Geri yükleme sırasında kullanılacak ek geri dönüş klasörleri. |
RestoreAdditionalProjectFallbackFoldersExcludes |
içinde belirtilen geri dönüş klasörlerini dışlar RestoreAdditionalProjectFallbackFolders |
RestoreTaskAssemblyFile |
NuGet.Build.Tasks.dll yolu. |
RestoreGraphProjectInput |
Mutlak yollar içermesi gereken, geri yükleneceği projelerin noktalı virgülle ayrılmış listesi. |
RestoreUseSkipNonexistentTargets |
Projeler aracılığıyla toplandıklarında MSBuild , iyileştirme kullanılarak SkipNonexistentTargets toplanıp toplanmadıklarını belirler. Ayarlanmadığında varsayılan olarak true ayarlanır. Bunun sonucu, projenin hedefleri içeri aktarılamadığında hızlı bir hata davranışıdır. |
MSBuildProjectExtensionsPath |
Çıkış klasörü, varsayılan olarak BaseIntermediateOutputPath ve obj klasörü. |
RestoreForce |
PackageReference tabanlı projelerde, son geri yükleme başarılı olsa bile tüm bağımlılıkların çözümlenmesine zorlar. Bu bayrağı belirtmek, dosyayı silmeye project.assets.json benzer. Bu, http önbelleğini atlamaz. |
RestorePackagesWithLockFile |
Kilit dosyasının kullanımını kabul eder. |
RestoreLockedMode |
Geri yüklemeyi kilitli modda çalıştırın. Bu, geri yüklemenin bağımlılıkları yeniden değerlendirmeyeceği anlamına gelir. |
NuGetLockFilePath |
Kilit dosyası için özel bir konum. Varsayılan konum projenin yanındadır ve olarak adlandırılır packages.lock.json . |
RestoreForceEvaluate |
Geri yüklemeyi bağımlılıkları yeniden derlemeye ve kilit dosyasını herhangi bir uyarı olmadan güncelleştirmeye zorlar. |
RestorePackagesConfig |
packages.config ile projeleri geri yükleyen bir kabul anahtarı. Yalnızca ile MSBuild -t:restore destek. |
RestoreRepositoryPath |
Yalnızca packages.config. Paketlerin geri yüklenmesi gereken packages dizinini belirtir. SolutionDirectory belirtilmezse kullanılır. |
RestoreUseStaticGraphEvaluation |
Standart değerlendirme yerine statik graf MSBuild değerlendirmesini kullanmak için bir kabul anahtarı. Statik graf değerlendirmesi, büyük depolar ve çözümler için önemli ölçüde daha hızlı olan deneysel bir özelliktir. |
ExcludeRestorePackageImports
özelliği tarafından NuGetkullanılan bir iç özelliktir.
Hiçbir dosyada MSBuild değiştirilmemeli veya ayarlanmamalıdır.
Örnekler
Komut satırı:
msbuild -t:restore -p:RestoreConfigFile=<path>
Project dosyası:
<PropertyGroup>
<RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>
Çıkışları geri yükleme
Geri yükleme, derleme obj
klasöründe aşağıdaki dosyaları oluşturur:
Dosya | Description |
---|---|
project.assets.json |
Tüm paket başvurularının bağımlılık grafiğini içerir. |
{projectName}.projectFileExtension.nuget.g.props |
Paketlerde bulunan prop'lara başvurular MSBuild |
{projectName}.projectFileExtension.nuget.g.targets |
Paketlerde MSBuild bulunan hedeflere başvurular |
Tek bir MSBuild komutla geri yükleme ve derleme
NuGet Hedefleri ve prop'ları düşüren MSBuild paketleri geri yükleyebildiği için geri yükleme ve derleme değerlendirmeleri farklı genel özelliklerle çalıştırılır. Bu, aşağıdakilerin öngörülemeyen ve genellikle yanlış bir davranışa sahip olacağı anlamına gelir.
msbuild -t:restore,build
Bunun yerine önerilen yaklaşım:
msbuild -t:build -restore
Aynı mantık, benzeri build
diğer hedefler için de geçerlidir.
Ile PackageReference ve packages.config projelerini geri yükleme MSBuild
16.5+ ile MSBuild packages.config için msbuild -t:restore
de desteklenir.
msbuild -t:restore -p:RestorePackagesConfig=true
Not
packages.config
geri yükleme yalnızca ile MSBuild 16.5+
kullanılabilir, ile kullanılamaz dotnet.exe
Statik graf değerlendirmesi ile MSBuild geri yükleme
Not
16.6+ ile MSBuild , NuGet büyük depolar için geri yükleme süresini önemli ölçüde geliştiren komut satırından statik graf değerlendirmesini kullanmak için deneysel bir özellik ekledi.
msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true
Alternatif olarak, bir Directory.Build.Props içinde özelliğini ayarlayarak etkinleştirebilirsiniz.
<Project>
<PropertyGroup>
<RestoreUseStaticGraphEvaluation>true</RestoreUseStaticGraphEvaluation>
</PropertyGroup>
</Project>
Not
Visual Studio 2019.x ve NuGet 5.x itibariyle bu özellik deneysel olarak kabul edilir ve kabul edilir. Bu özelliğin varsayılan olarak ne zaman etkinleştirileceğiyle ilgili ayrıntılar için /Home#9803'i izleyinNuGet.
Statik graf geri yükleme, geri yüklemenin msbuild bölümünü, proje okuma ve değerlendirmeyi değiştirir, ancak geri yükleme algoritmasını değiştirmez! Geri yükleme algoritması tüm NuGet araçlarda (NuGet.exe,.exe, MSBuild dotnet.exe ve Visual Studio) aynıdır.
Çok az senaryoda, statik graf geri yükleme geçerli geri yüklemeden farklı davranabilir ve bildirilen bazı PackageReferences veya ProjectReferences eksik olabilir.
Zihninizi rahatlatmak için, bir kerelik denetim olarak statik graf geri yüklemesine geçiş yaparken şunları çalıştırmayı göz önünde bulundurun:
msbuild.exe -t:restore -p:RestoreUseStaticGraphEvaluation=true
msbuild.exe -t:restore
NuGet hiçbir değişiklik bildirmemelidir . Bir tutarsızlık görürseniz lütfen /Home adresinden NuGetbir sorun oluşturun.
Geri yükleme grafından bir kitaplığı değiştirme
Geri yükleme işlemi yanlış derleme getiriyorsa, bu paketlerin varsayılan seçeneğini dışlayıp kendi seçiminizle değiştirmek mümkündür. İlk olarak en üst düzey PackageReference
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" />