MSBuild kullanarak NuGet paketi oluşturma
Kodunuzdan bir NuGet paketi oluşturduğunuzda, bu işlevi herhangi bir sayıda diğer geliştiriciyle paylaşılabilen ve bu geliştiriciler tarafından kullanılabilen bir bileşende paketlersiniz. Bu makalede, MSBuild kullanarak bir paketin nasıl oluşturulacağı açıklanır. MSBuild, NuGet içeren tüm Visual Studio iş yüklerine önceden yüklenmiş olarak gelir. Ayrıca, dotnet msbuild ile dotnet CLI aracılığıyla MSBuild de kullanabilirsiniz.
SDK stili biçimini kullanan .NET Core ve .NET Standard projeleri ve diğer SDK stilindeki projeler için NuGet, paket oluşturmak için doğrudan proje dosyasındaki bilgileri kullanır. kullanan <PackageReference>
SDK stili olmayan bir proje için NuGet, paket oluşturmak için proje dosyasını da kullanır.
SDK stilindeki projeler, varsayılan olarak kullanılabilir paket işlevselliğine sahiptir. SDK stilindeki PackageReference projeleri için proje bağımlılıklarına NuGet.Build.Tasks.Pack paketini eklemeniz gerekir. MSBuild paketi hedefleri hakkında ayrıntılı bilgi için bkz . NuGet paketi ve MSBuild hedefleri olarak geri yükleme.
bir paket oluşturan komut, msbuild -t:pack
işlevsel olarak ile dotnet pack
eşdeğerdir.
Önemli
Bu konu genellikle .NET Core ve .NET Standard projeleri olmak üzere SDK stili projeler 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ğer olurAssemblyName
.Version
, Major.Minor.Patch[-Suffix] biçimindeki belirli bir sürüm numarasıdır; burada -Suffix yayı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ığı (nuget.org gibi)
Authors
, yazar ve sahip bilgileri. Belirtilmezse, varsayılan değer olurAssemblyName
.Company
ögesini seçin. Belirtilmezse, varsayılan değer olurAssemblyName
.
Ayrıca PackageReference kullanan SDK stili olmayan projeleri de paketliyorsanız, aşağıdakiler gereklidir:
PackageOutputPath
, paket çağrılırken oluşturulan paketin çıkış klasörü.
Visual Studio'da bu değerleri proje özelliklerinde ayarlayabilirsiniz (Çözüm Gezgini'da projeye sağ tıklayın, Özellikler'i seçin ve Paket sekmesini seçin). Bu özellikleri doğrudan proje dosyalarında (.csproj) da ayarlayabilirsiniz.
<PropertyGroup>
<PackageId>ClassLibDotNetStandard</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>
</PropertyGroup>
Önemli
Pakete nuget.org veya kullandığınız paket kaynağında benzersiz bir tanımlayıcı verin.
Aşağıdaki örnekte, bu özelliklere sahip basit ve eksiksiz bir proje dosyası gösterilmektedir.
<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>
MSBuild paketi hedefleri, Bağımlılık varlıklarını denetleme ve PackageTags
NuGet meta veri özelliklerinde açıklandığı gibi , ve gibi Title
PackageDescription
isteğe bağlı özellikleri de ayarlayabilirsiniz.
Not
Genel tüketim için oluşturulan paketler için, etiketler başkalarının paketinizi bulmasına ve ne yaptığını anlamasına yardımcı olduğundan PackageTags özelliğine özellikle dikkat edin.
Bağımlılıkları bildirme 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ü oluşturma. Ve <ExcludeAssets>
özniteliklerini kullanarak <IncludeAssets>
bağımlılıklardan varlıkları doğrudan pakette ortaya çıkarabilmek de mümkündür. Daha fazla bilgi için bkz. Bağımlılık varlıklarını denetleme.
İsteğe bağlı açıklama alanı ekleme
Paketin isteğe bağlı açıklaması, paketin nuget.org sayfasının BENİOKU sekmesinde görünür. Açıklama, proje dosyasındaki dosyasından veya $description
.nuspec dosyasındaki dosyasından çeker<Description>
.
Aşağıdaki örnekte bir .NET paketi için .csproj dosyasında bir gösterilmektedir Description
:
<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://video2.skills-academy.com/azure/storage/
Microsoft Azure Storage REST API Reference - https://video2.skills-academy.com/rest/api/storageservices/
REST API Reference for Blob Service - https://video2.skills-academy.com/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 tam kodu benzersiz olarak tanımlar.
Paket tanımlayıcısını oluşturmak için şu en iyi yöntemleri izleyin:
Tanımlayıcı, nuget.org ve paketi barındıran diğer tüm konumlar arasında benzersiz olmalıdır. Çakışmaları önlemek için iyi bir desen, tanımlayıcının ilk parçası olarak şirketinizin adını kullanmaktır.
Nokta gösterimini kullanarak .NET ad alanı benzeri bir adlandırma kuralını izleyin. Örneğin, veya
Contoso_Utility_UsefulStuff
yerineContoso-Utility-UsefulStuff
kullanınContoso.Utility.UsefulStuff
. Paket tanımlayıcısını kodun kullandığı ad alanıyla eşleştirdiğinizde tüketiciler için de yararlı olur.Başka bir paketin nasıl kullanılacağını gösteren bir örnek kod paketi oluşturursanız, içinde olduğu gibi
Contoso.Utility.UsefulStuff.Sample
tanımlayıcıya ekleyin.Sample
.Örnek paketin özgün pakete bağımlılığı vardır. Örnek paketi oluşturduğunuzda değeriyle ekleyin
<IncludeAssets>
contentFiles
. İçerik klasöründe, örnek kodu \Samples\identifier> adlı \Samples\<Contoso.Utility.UsefulStuff.Sample gibi bir klasörde düzenleyin.
Paket sürümünü ayarlamak için şu en iyi yöntemleri izleyin:
Genel olarak, paket sürümünü proje veya derleme sürümüyle eşleşecek şekilde ayarlayın, ancak bu kesinlikle gerekli değildir. Bir paketi tek bir derlemeyle sınırladığınızda sürümü eşleştirmek basittir. NuGet, derleme sürümleriyle değil bağımlılıkları çözerken paket sürümleriyle ilgilenir.
Standart olmayan bir sürüm düzeni kullanıyorsanız, Paket sürümü oluşturma bölümünde açıklandığı gibi NuGet sürüm oluşturma kurallarını dikkate aldığınızdan emin olun. NuGet çoğunlukla Semantik Sürüm Oluşturma 2.0.0 ile uyumludur.
Not
Bağımlılık çözümlemesi hakkında daha fazla bilgi için bkz . PackageReference ile bağımlılık çözümleme. Sürüm oluşturma işlemini anlamanıza yardımcı olabilecek bilgiler için şu blog gönderileri dizisine bakın:
NuGet.Build.Tasks.Pack paketini ekleme
MSBuild'i SDK stili olmayan bir proje ve PackageReference ile kullanıyorsanız, projenize NuGet.Build.Tasks.Pack paketini ekleyin.
Proje dosyasını açın ve öğesinin arkasına
<PropertyGroup>
aşağıdakileri ekleyin:<ItemGroup> <!-- ... --> <PackageReference Include="NuGet.Build.Tasks.Pack" Version="6.7.0" PrivateAssets="all" /> <!-- ... --> </ItemGroup>
Bir Geliştirici komut istemi açın (Arama kutusuna Geliştirici komut istemi yazın).
MsBuild için gerekli tüm yollarla yapılandırılacağından, Visual Studio için Geliştirici Komut İstemi'ni genellikle Başlat menüsünden başlatmak istersiniz.
Proje dosyasını içeren klasöre geçin ve NuGet.Build.Tasks.Pack paketini yüklemek için aşağıdaki komutu yazın.
# Uses the project file in the current folder by default msbuild -t:restore
MSBuild çıkışının derlemenin başarıyla tamamlandığını gösterdiğinden emin olun.
msbuild -t:pack komutunu çalıştırın
Projeden bir NuGet paketi ( .nupkg
dosya) oluşturmak için, projeyi otomatik olarak da oluşturan komutunu çalıştırın msbuild -t:pack
:
Visual Studio için Geliştirici komut istemine aşağıdaki komutu yazın:
# Uses the project file in the current folder by default
msbuild -t:pack
Çıkış, 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 paketi otomatik olarak oluşturma
Projeyi oluştururken veya geri yüklerken otomatik olarak çalıştırmak msbuild -t:pack
için içindeki proje dosyanıza <PropertyGroup>
aşağıdaki satırı ekleyin:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Bir çözümde çalıştırdığınızda msbuild -t:pack
, bu paketlenebilir çözümdeki tüm projeleri paketler (<IsPackable>
özellik olarak true
ayarlanır).
Not
Paketi otomatik olarak oluşturduğunuzda, paket oluşturma süresi projenizin derleme süresini artırır.
Paket yüklemesini test et
Bir paketi yayımlamadan önce, genellikle bir paketi projeye yükleme işlemini test etmek istersiniz. Testler, mutlaka dosyaların projedeki doğru yerlerine vardığından emin olur.
Normal paket yükleme adımlarını kullanarak Visual Studio'da veya komut satırında yüklemeleri el ile test edebilirsiniz.
Önemli
Paketler sabittir. Bir sorunu düzeltirseniz paketin içeriğini değiştirin ve paketi yeniden paketleyin; yeniden test ettiğinizde, genel paketler klasörünüzü temizleyene kadar paketin eski sürümünü kullanmaya devam edersiniz. Bu özellikle her derlemede benzersiz bir yayın öncesi etiketi kullanmayan paketleri test ederken geçerlidir.
Sonraki Adımlar
Dosya olan .nupkg
bir paket oluşturduktan sonra, paketi Paket Yayımlama bölümünde açıklandığı gibi istediğiniz galeride yayımlayabilirsiniz.
Ayrıca paketinizin özelliklerini genişletmek veya aşağıdaki konularda açıklandığı gibi başka senaryoları desteklemek isteyebilirsiniz:
- MSBuild hedefleri olarak NuGet paketi ve geri 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
- MSBuild props ve hedefleri
- COM birlikte çalışma derlemeleri ile paketler oluşturma
Son olarak, dikkat etmeniz gereken ek paket türleri vardır: