MSBuild kullanarak NuGet paketi MSBuild
Kodunuzdan bir NuGet paketi oluşturduktan sonra, bu işlevselliği başka bir geliştiricinin herhangi bir sayıdaki geliştiriciyle paylaşılacak ve kullanılacak bir bileşen olarak paketlersiniz. Bu makalede, MSBuild kullanarak paket oluşturma hakkında MSBuild. MSBuild, tüm iş yüklerini içeren Visual Studio önceden yüklenmiş olarak NuGet. Ayrıca dotnet msbuildMSBuild dotnet CLI aracılığıyla da kullanabilirsiniz.
.NET Core .NET Standard SDKstili biçimini kullanan projeleri ve diğer SDK stili projeleri için NuGet doğrudan proje dosyasındaki bilgileri kullanarak paket oluşturabilirsiniz. kullanan SDK stili olmayan bir proje için, <PackageReference> NuGet oluşturmak için proje dosyasını da kullanır.
SDK stili projeler varsayılan olarak paket işlevselliğine sahiptir. SDK stili olmayan PackageReference projeleri için aşağıdaki NuGet. Proje bağımlılıkları için Build.Tasks.Pack paketi. Paket hedefleri hakkında ayrıntılı MSBuild için bkz. NuGet paketi ve MSBuild olarak geri yükleme.
paket oluşturan komut, işlevsel msbuild -t:pack olarak ile dotnet pack eşdeğerdir.
Önemli
Bu konu SDK stili projeler, genellikle .NET Core ve .NET Standard projeleri ve PackageReference kullanan SDK stili olmayan projeler için geçerlidir.
Özellikleri ayarlama
Paket oluşturmak için aşağıdaki özellikler gereklidir.
PackageId, paketi barındıran galeride benzersiz olması gereken paket tanımlayıcısı. Belirtilmezse varsayılan değerAssemblyNameolur.Version,Versionşeklinde belirli bir sürüm numarasıdır; burada -Suffixyayın öncesi sürümleri tanımlar. Belirtilmezse, varsayılan değer 1.0.0'dır.- Konakta görünmesi gereken paket başlığı (örneğin, nuget.org)
Authors, yazar ve sahip bilgileri. Belirtilmezse varsayılan değerAssemblyNameolur.Company, şirket adınız. Belirtilmezse varsayılan değerAssemblyNameolur.
Buna ek olarak, PackageReference kullanan SDK stili olmayan projeleri paketlerken aşağıdakiler gereklidir:
PackageOutputPath, paketi çağrılırken oluşturulan paketin çıkış klasörü.
Bu Visual Studio proje özelliklerinde (Çözüm Gezgini'de projeye sağ tıklayın, Özellikler'i seçin ve Paket sekmesini seçin) bu değerleri ayarlayın. Ayrıca, bu özellikleri doğrudan proje dosyalarında (.csproj) da ayarlayın.
<PropertyGroup>
<PackageId>ClassLibDotNetStandard</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>
</PropertyGroup>
Önemli
Pakete, uygulama veya kullanmakta nuget.org herhangi bir paket kaynağında benzersiz olan bir tanımlayıcı verir.
Aşağıdaki örnekte, bu özelliklere sahip basit ve eksiksiz bir proje dosyası yer almaktadır.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>ClassLibDotNetStandard</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>
</PropertyGroup>
</Project>
Ayrıca, , ve gibi isteğe bağlı özellikleri, MSBuild paketi hedeflerinde açıklandığı gibi, Bağımlılık varlıklarını denetleme ve meta Title veri NuGet olarak da PackageDescriptionPackageTagsPackageTagsTitlePackageDescription
Not
Genel tüketim için hazır paketler için PackageTags özelliğine özellikle dikkat edin çünkü etiketler başkalarının paketinizi bulmanıza ve ne yaptığını anlamanıza yardımcı olur.
Bağımlılıkları belirtme ve sürüm numaralarını belirtme hakkında ayrıntılı bilgi için bkz. Proje dosyalarında paket başvuruları ve Paket sürümü. Ayrıca ve özniteliklerini kullanarak varlıkları doğrudan pakette bağımlılıklardan ortaya <IncludeAssets><ExcludeAssets> çıkarabilirsiniz. Daha fazla bilgi için bkz. Bağımlılık varlıklarını denetleme.
İsteğe bağlı açıklama alanı ekleme
Paketin NuGet.org sayfasında görüntülenen isteğe bağlı açıklaması, dosyasında kullanılan dosyasından çekilir veya <description></description>.csproj$description<description></description>dosyasındaki aracılığıyla çekilir.
Bir .NET paketi için dosyanın aşağıdaki XML metninde açıklama alanı örneği gösterilir:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>Azure.Storage.Blobs</PackageId>
<Version>12.4.0</Version>
<PackageTags>Microsoft Azure Storage Blobs;Microsoft;Azure;Blobs;Blob;Storage;StorageScalable</PackageTags>
<Description>
This client library enables working with the Microsoft Azure Storage Blob service for storing binary and text data.
For this release see notes - https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/README.md and https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md
in addition to the breaking changes https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/BreakingChanges.txt
Microsoft Azure Storage quickstarts and tutorials - https://docs.microsoft.com/en-us/azure/storage/
Microsoft Azure Storage REST API Reference - https://docs.microsoft.com/en-us/rest/api/storageservices/
REST API Reference for Blob Service - https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-rest-api
</Description>
</PropertyGroup>
</Project>
Benzersiz bir paket tanımlayıcısı seçin ve sürüm numarasını ayarlayın
Paket tanımlayıcısı ve sürüm numarası, pakette yer alan kodu benzersiz bir şekilde tanımlamış olduğundan proje içinde en önemli iki değerdir.
Paket tanımlayıcısı için en iyi yöntemler:
- Benzersizlik:Tanımlayıcı, tüm nuget.org veya paketi barındıran galeride benzersiz olmalıdır. Bir tanımlayıcıya karar vermeden önce, adın zaten kullanılı olup olmadığına bakarak ilgili galeride arama yapmak. Çakışmaları önlemek için, tanımlayıcının ilk bölümü olarak şirket adını kullanmak iyi bir desendir,
Contoso.örneğin: . - Ad alanı benzeri adlar:Kısa çizgi yerine nokta işareti kullanarak .NET'te ad alanlarına benzer bir desen izleyin. Örneğin, veya
Contoso.Utility.UsefulStuffyerineContoso-Utility-UsefulStuffContoso_Utility_UsefulStuffkullanın. Tüketiciler, paket tanımlayıcısının kodda kullanılan ad alanlarıyla eş eşleşmesi de yararlı olur. - Örnek Paketler:Başka bir paket kullanmayı gösteren bir örnek kod paketi üretirse, içinde olduğu gibi tanımlayıcıya bir sonek olarak iliştirin.
Contoso.Utility.UsefulStuff.Sample(Örnek paketin diğer pakete bağımlılığı olabilir.) Örnek paket oluştururken, içindecontentFilesdeğerini<IncludeAssets>kullanın. klasöründe,contentörnek kodu içinde olduğu gibi adlı bir\Samples\<identifier>klasöre yerleştirebilirsiniz.\Samples\Contoso.Utility.UsefulStuff.Sample
Paket sürümü için en iyi yöntemler:
- Genel olarak, paketin sürümünü projeyle (veya derlemeyle) eş olacak şekilde ayarlayın, ancak bu kesinlikle gerekli değildir. Bu, bir paketi tek bir derlemeyle sınırlandırmayla ilgili basit bir konudur. Genel olarak, derleme NuGet değil bağımlılıkları çözümlerken paket sürümleriyle ilgilenin.
- Standart olmayan bir sürüm düzeni kullanırken, Paket sürümü oluşturma'NuGet açıklanan sürüm oluşturma kurallarını göz önünde bulundurarak göz önünde bulundurabilirsiniz. NuGet çoğunlukla semver 2 ile uyumludur.
Bağımlılık çözümlemesi hakkında bilgi için bkz. PackageReference ile bağımlılık çözümlemesi. Sürüm sürümünü daha iyi anlamanız için daha eski bilgiler için bu blog gönderisi serisine bakın.
Aşağıdaki NuGet. Build.Tasks.Pack paketi
SDK stili olmayan MSBuild ve PackageReference ile yeni bir NuGet. Build.Tasks.Pack paketini projenize ekleyin.
Proje dosyasını açın ve öğesinde sonra aşağıdakini
<PropertyGroup>ekleyin:<ItemGroup> <!-- ... --> <PackageReference Include="NuGet.Build.Tasks.Pack" Version="5.2.0"/> <!-- ... --> </ItemGroup>Bir Geliştirici komut istemi açın (Arama kutusuna Geliştirici komut istemi yazın).
Genellikle, Geliştirici Komut İstemi Visual Studio için gerekli tüm yollarla yapılandırıldığından Başlat menüsünden MSBuild.
Proje dosyasını içeren klasöre geçiş yapın ve aşağıdaki komutu yazarak NuGet. Build.Tasks.Pack paketi.
# Uses the project file in the current folder by default msbuild -t:restoreDerleme çıkışının derlemenin MSBuild tamamlandığından emin olun.
msbuild -t:pack komutunu çalıştırın
Projeden bir NuGet paketi (dosya) oluşturmak için, projeyi otomatik olarak .nupkgmsbuild -t:pack da derlemek için komutunu çalıştırın:
Geliştirici komut isteminde Visual Studio aşağıdaki komutu yazın:
# Uses the project file in the current folder by default
msbuild -t:pack
Çıktı, dosyanın yolunu .nupkg gösterir.
Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 8/5/2019 3:09:15 PM.
Project "C:\Users\username\source\repos\ClassLib_DotNetStandard\ClassLib_DotNetStandard.csproj" on node 1 (pack target(s)).
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
...
CopyFilesToOutputDirectory:
Copying file from "C:\Users\username\source\repos\ClassLib_DotNetStandard\obj\Debug\netstandard2.0\ClassLib_DotNetStandard.dll" to "C:\Use
rs\username\source\repos\ClassLib_DotNetStandard\bin\Debug\netstandard2.0\ClassLib_DotNetStandard.dll".
ClassLib_DotNetStandard -> C:\Users\username\source\repos\ClassLib_DotNetStandard\bin\Debug\netstandard2.0\ClassLib_DotNetStandard.dll
Copying file from "C:\Users\username\source\repos\ClassLib_DotNetStandard\obj\Debug\netstandard2.0\ClassLib_DotNetStandard.pdb" to "C:\Use
rs\username\source\repos\ClassLib_DotNetStandard\bin\Debug\netstandard2.0\ClassLib_DotNetStandard.pdb".
GenerateNuspec:
Successfully created package 'C:\Users\username\source\repos\ClassLib_DotNetStandard\bin\Debug\AppLogger.1.0.0.nupkg'.
Done Building Project "C:\Users\username\source\repos\ClassLib_DotNetStandard\ClassLib_DotNetStandard.csproj" (pack target(s)).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.21
Derlemede otomatik olarak paket oluşturma
Projeyi derleme veya msbuild -t:pack geri yükleme sırasında otomatik olarak çalıştırmak için içindeki proje dosyanıza aşağıdaki satırı <PropertyGroup> ekleyin:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Bir çözümde çalıştırıldıklarında, bu paketlenebilir çözümde yer alan tüm projeleri msbuild -t:pack paketler ( <IsPackable> özelliği olarak true ayarlanır).
Not
Paketi otomatik olarak üretilene kadar olan süre, projenizin derleme sürelerini artırır.
Test paketi yüklemesi
Bir paketi yayımlamadan önce genellikle bir projeye paket yükleme işlemini test etmek istersiniz. Testler, dosyaların projenin doğru yerlerinde olması gerekir.
Yüklemeleri normal paket yükleme adımlarını Visual Studio komut satırı üzerinde el ile test edebilirsiniz.
Önemli
Paketler sabittir. Bir sorunu düzeltersiniz, paketin ve paketin içeriğini yeniden değiştirirsiniz, yeniden test edinca genel paketler klasörlerinizi temizleyene kadar paketin eski sürümünü kullanmaya devam edin. Bu özellikle her derlemede benzersiz bir ön kullanım etiketi kullanmayan paketleri test etme aşamasında kullanılır.
Sonraki Adımlar
Dosya olan bir paket oluşturduktan sonra, paketi Paketi Yayımlama konusunda açıklandığı .nupkg gibi istediğiniz .nupkg
Ayrıca, paketinizin özelliklerini genişletmek veya aşağıdaki konularda açıklandığı gibi diğer senaryoları desteklemek de istiyor olabilirsiniz:
- NuGet olarak paketi ve MSBuild yükleme
- Paket sürümü oluşturma
- Birden çok hedef çerçeveyi destekleme
- Kaynak ve yapılandırma dosyalarının dönüşümleri
- Yerelleştirme
- Yayın öncesi sürümler
- Paket türünü ayarlama
- COM birlikte çalışma Derlemeleriyle paket oluşturma
Son olarak, bilmeniz için ek paket türleri vardır: