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ğer AssemblyName olur.
  • 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ğer AssemblyName olur.
  • Company, şirket adınız. Belirtilmezse varsayılan değer AssemblyName olur.

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.UsefulStuff yerine Contoso-Utility-UsefulStuffContoso_Utility_UsefulStuff kullanı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çinde contentFiles değ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.

  1. 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>
    
  2. 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.

  3. 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:restore
    

    Derleme çı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:

Son olarak, bilmeniz için ek paket türleri vardır: