Hızlı Başlangıç: Visual Studio kullanarak NuGet paketi oluşturma ve yayımlama (yalnızca Windows)

Microsoft Visual Studio ile bir .NET sınıf kitaplığından NuGet paketi oluşturabilir ve cli aracı kullanarak bunu nuget.org yayımlayabilirsiniz.

Hızlı başlangıç yalnızca Windows kullanıcıları içindir. Mac için Visual Studio kullanıyorsanız bkz. Mevcut kitaplık projelerinden NuGet paketi oluşturma veya .NET CLI kullanma.

Önkoşullar

  • .NET Core ile ilgili bir iş yüküyle Windows için Visual Studio 2022'yi yükleyin.

    2022 Community sürümünü visualstudio.microsoft.com ücretsiz yükleyebilir veya Professional veya Enterprise sürümünü kullanabilirsiniz.

    Visual Studio 2017 ve üzeri, bir yüklediğinizde NuGet özelliklerini otomatik olarak içerir. NET ile ilgili iş yükü.

  • Henüz yüklü değilse .NET CLI'yi yükleyin.

    Visual Studio 2017 ve üzeri için .NET CLI, .NET Core ile ilgili tüm iş yükleriyle otomatik olarak yüklenir. Aksi takdirde ,NET CLI'yı almak için .NET Core SDK'sını yükleyin. .NET CLI, SDK stili biçimi (SDK özniteliği) kullanan .NET projeleri için gereklidir. Visual Studio 2017 ve sonraki sürümlerde varsayılan .NET sınıf kitaplığı şablonu SDK özniteliğini kullanır.

    Önemli

    SDK stili olmayan bir projeyle çalışıyorsanız, paketi oluşturmak ve yayımlamak için bunun yerine .NET Framework paketi oluşturma ve yayımlama (Visual Studio) içindeki yordamları izleyin. Bu makale için .NET CLI önerilir. NuGet CLI kullanarak herhangi bir NuGet paketini yayımlayabilmenize rağmen, bu makaledeki adımlardan bazıları SDK stili projelere ve .NET CLI'ya özgüdür. NuGet CLI, SDK stili olmayan projeler (genellikle .NET Framework) için kullanılır.

  • Henüz bir hesabınız yoksa nuget.org'da ücretsiz bir hesaba kaydolun. NuGet paketini karşıya yükleyebilmeniz için önce hesabı kaydetmeniz ve onaylamanız gerekir.

  • NuGet CLI'yi nuget.org'dan indirerek yükleyin. nuget.exe dosyasını uygun bir klasöre ekleyin ve bu klasörü PATH ortam değişkeninize ekleyin.

Sınıf kitaplığı projesi oluşturma

Paketlemek istediğiniz kod için mevcut bir .NET Sınıf Kitaplığı projesini kullanabilir veya aşağıdaki gibi bir tane oluşturabilirsiniz:

  1. Visual Studio'da Dosya>Yeni Proje'yi> seçin.

  2. Yeni proje oluştur penceresinde, açılan listelerde C#, Windows ve Kitaplık'ı seçin.

  3. Sonuçta elde edilen proje şablonları listesinde Sınıf Kitaplığı'nı (açıklama, .NET veya .NET Standard'ı hedefleyen bir sınıf kitaplığı oluşturmak için bir proje) ve ardından İleri'yi seçin.

  4. Yeni projenizi yapılandırın penceresinde Proje adı için AppLogger yazın ve İleri'yi seçin.

  5. Ek bilgi penceresinde uygun bir Çerçeve seçin ve ardından Oluştur'u seçin.

    Hangi çerçeveyi seçeceğinizi bilmiyorsanız, en son seçenek iyi bir seçimdir ve daha sonra kolayca değiştirilebilir. Hangi çerçevenin kullanılacağı hakkında bilgi için bkz . .NET 5.0 veya .NET 6.0 ile .NET Standard ne zaman hedeflenir?

  6. Projenin düzgün oluşturulduğundan emin olmak için Derleme Çözümü Oluştur'a>tıklayın. DLL, Hata Ayıklama klasöründe bulunur (veya bunun yerine bu yapılandırmayı oluşturursanız Yayın).

  7. (İsteğe bağlı) Bu hızlı başlangıçta, şablon sınıfı kitaplığı paket oluşturmak için yeterli olduğundan NuGet paketi için ek kod yazmanız gerekmez. Ancak, paket için bazı işlevsel kodlar istiyorsanız aşağıdaki kodu ekleyin:

    namespace AppLogger
    {
        public class Logger
        {
            public void Log(string text)
            {
                Console.WriteLine(text);
            }
        }
    }
    

Paket özelliklerini yapılandırma

Projenizi oluşturduktan sonra, aşağıdaki adımları izleyerek NuGet paket özelliklerini yapılandırabilirsiniz:

  1. Çözüm Gezgini projenizi seçin ve ardından Proje<>adı> Özellikleri'ni seçin; burada <proje adı> projenizin adıdır.

  2. Paket düğümünü genişletin ve genel'i seçin.

    Paket düğümü yalnızca Visual Studio'daki SDK stili projeler için görünür. SDK stili olmayan bir projeyi (genellikle .NET Framework) hedef alıyorsanız, projeyi geçirin veya adım adım yönergeler için bkz . .NET Framework paketi oluşturma ve yayımlama.

    Screenshot showing NuGet package properties in a Visual Studio project.

  3. Genel tüketim için oluşturulmuş paketler için Etiketler özelliğine özellikle dikkat edin. Etiketler, başkalarının paketinizi bulmasına ve ne yaptığını anlamasına yardımcı olur.

  4. Paketinize benzersiz bir Paket Kimliği verin ve istediğiniz diğer özellikleri doldurun. MSBuild özelliklerinin (SDK stili projeler) .nuspec dosya özellikleriyle nasıl eşlendiğini gösteren bir tablo için bkz. paket hedefleri. .nuspec dosya özelliklerinin açıklaması için bkz. .nuspec dosya başvurusu. Bu özelliklerin tümü Visual Studio'nun .nuspec proje için oluşturduğu bildirime gider.

    Önemli

    Pakete nuget.org veya kullandığınız konakta benzersiz bir tanımlayıcı vermelisiniz. Aksi takdirde bir hata oluşur. Yayımlama adımı paketi genel olarak görünür hale getirdiğinden, bu hızlı başlangıçta ada Örnek veya Test eklemenizi öneririz.

  5. (İsteğe bağlı) Özellikleri doğrudan AppLogger.csproj proje dosyasında görmek için Proje>Proje Dosyasını Düzenle'yi seçin.

    AppLogger.csproj sekmesi yüklenir.

    Bu seçenek, SDK stili özniteliğini kullanan projeler için Visual Studio 2017'den itibaren kullanılabilir. Önceki Visual Studio sürümlerinde, proje dosyasını düzenleyebilmeniz için önce Projeyi> Kaldır'ı seçmeniz gerekir.

Pack komutunu çalıştırma

Projenizden bir NuGet paketi oluşturmak için şu adımları izleyin:

  1. Configuration Manager'ı Derle'yi>seçin ve ardından Etkin çözüm yapılandırmasını Yayın olarak ayarlayın.

  2. Çözüm Gezgini AppLogger projesini ve ardından Paketle'yi seçin.

    Visual Studio projeyi oluşturur ve .nupkg dosyasını oluşturur.

  3. Paket dosyasının yolunu içeren ayrıntılar için Çıkış penceresini inceleyin. Bu örnekte, bir .NET 6.0 hedefini uygun olarak derleme bin\Release\net6.0 içindedir:

    1>------ Build started: Project: AppLogger, Configuration: Release Any CPU ------
    1>AppLogger -> d:\proj\AppLogger\AppLogger\bin\Release\net6.0\AppLogger.dll
    1>Successfully created package 'd:\proj\AppLogger\AppLogger\bin\Release\AppLogger.1.0.0.nupkg'.
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    
  4. Menüde Paketle komutunu görmüyorsanız, projeniz büyük olasılıkla SDK stilinde bir proje değildir ve NuGet CLI kullanmanız gerekir. Projeyi geçirin ve .NET CLI kullanın veya adım adım yönergeler için .NET Framework paketi oluşturma ve yayımlama bölümüne bakın.

(İsteğe bağlı) Derlemede paket oluşturma

Projeyi oluştururken Visual Studio'yu NuGet paketini otomatik olarak oluşturacak şekilde yapılandırabilirsiniz:

  1. Çözüm Gezgini projenizi seçin ve ardından Proje<>adı> Özellikler'i seçin; burada <proje adı> projenizin adıdır (bu örnekte AppLogger).

  2. Paket düğümünü genişletin, Genel'i ve ardından Derlemede NuGet paketi oluştur'a tıklayın.

    Screenshot showing package properties with Generate NuGet package on build selected.

Not

Paketi otomatik olarak oluşturduğunuzda, paket için ek süre projenizin genel derleme süresini artırır.

(İsteğe bağlı) MSBuild ile paketle

Paket menüsü komutunu kullanmaya alternatif olarak, proje gerekli paket verilerini içerdiğinde NuGet 4.x+ ve MSBuild 15.1+ bir pack hedefi destekler:

  1. Projeniz Çözüm Gezgini açıkken Araçlar>Komut Satırı>Geliştirici Komut İstemi'ni seçerek bir komut istemi açın.

    Komut istemi proje dizininizde açılır.

  2. Şu komutu çalıştırın: msbuild -t:pack.

Daha fazla bilgi için bkz . MSBuild kullanarak paket oluşturma.

Paketi yayımlama

Bir .nupkg dosyası oluşturduktan sonra, .NET CLI veya NuGet CLI ile nuget.org alınan bir API anahtarını kullanarak dosyayı nuget.org yayımlayın.

Not

  • Nuget.org karşıya yüklenen tüm paketleri virüslere karşı tarar ve virüs bulursa paketleri reddeder. Nuget.org ayrıca mevcut tüm listelenen paketleri düzenli aralıklarla tarar.

  • nuget.org yayımladığınız paketler, listelerini kaldırmadığınız sürece diğer geliştiriciler tarafından genel olarak görülebilir. Paketleri özel olarak barındırmak için bkz . Kendi NuGet akışlarınızı barındırma.

API anahtarınızı alma

NuGet paketinizi yayımlamadan önce bir API anahtarı oluşturun:

  1. nuget.org hesabınızda oturum açın veya henüz hesabınız yoksa bir hesap oluşturun.

  2. Sağ üst köşeden kullanıcı adınızı ve ardından API Anahtarları'nı seçin.

  3. Oluştur'u seçin ve anahtarınız için bir ad belirtin.

  4. Kapsamları Seç'in altında Gönder'i seçin.

  5. Paketleri>Seç Glob Deseni'nin altına * girin.

  6. Oluştur'u belirleyin.

  7. Yeni anahtarı kopyalamak için Kopyala'yı seçin.

    Screenshot that shows the new API key with the Copy link.

Önemli

  • API anahtarınızı her zaman gizli tutun. API anahtarı, herkesin sizin adınıza paketleri yönetmesine olanak tanıyan bir parola gibidir. YANLıŞLıKLA ortaya çıkarsa API anahtarınızı silin veya yeniden oluşturun.
  • Anahtarı daha sonra yeniden kopyalayamadığınızdan anahtarınızı güvenli bir konuma kaydedin. API anahtarı sayfasına dönerseniz, anahtarı kopyalamak için yeniden oluşturmanız gerekir. Paketleri artık göndermek istemiyorsanız API anahtarını da kaldırabilirsiniz.

Kapsam belirleme, farklı amaçlar için ayrı API anahtarları oluşturmanıza olanak tanır. Her anahtarın bir süre sonu zaman çerçevesi vardır ve anahtarın kapsamını belirli paketlere veya glob desenlerine göre ayarlayabilirsiniz. Ayrıca her anahtarın kapsamını belirli işlemlerin kapsamına alırsınız: Yeni paketler ve paket sürümleri gönderme, yalnızca yeni paket sürümleri gönderme veya listeden kaldırma.

Kapsam belirleme yoluyla, kuruluşunuz için paketleri yöneten farklı kişiler için API anahtarları oluşturabilir ve böylece yalnızca ihtiyaç duydukları izinlere sahip olursunuz.

Daha fazla bilgi için bkz . kapsamlı API anahtarları.

.NET CLI veya NuGet CLI ile yayımlama

Aşağıdaki CLI araçlarının her biri, bir paketi sunucuya göndermenize ve yayımlamanıza olanak tanır. CLI aracınızın .NET CLI veya NuGet CLI sekmelerini seçin.

NuGet CLI'yi kullanmaya alternatif olarak .NET CLI (dotnet.exe) kullanılması önerilir.

.nupkg dosyasını içeren klasörden aşağıdaki komutu çalıştırın. .nupkg dosya adınızı belirtin ve anahtar değerini API anahtarınızla değiştirin.

dotnet nuget push Contoso.08.28.22.001.Test.1.0.0.nupkg --api-key qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 --source https://api.nuget.org/v3/index.json

Çıktı, yayımlama işleminin sonuçlarını gösterir:

Pushing Contoso.08.28.22.001.Test.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
  PUT https://www.nuget.org/api/v2/package/
warn : All published packages should have license information specified. Learn more: https://aka.ms/nuget/authoring-best-practices#licensing.
  Created https://www.nuget.org/api/v2/package/ 1221ms
Your package was pushed.

Daha fazla bilgi için bkz . dotnet nuget push.

Not

Test paketinizin nuget.org canlı olmasını önlemek istiyorsanız adresinden nuget.org test sitesine https://int.nugettest.orggönderebilirsiniz. int.nugettest.org yüklenen paketlerin korunmayabileceğini unutmayın.

Yayımlama hataları

Komuttan gelen push hatalar genellikle sorunu gösterir. Örneğin, projenizdeki sürüm numarasını güncelleştirmeyi unutmuş olabilirsiniz, bu nedenle zaten var olan bir paketi yayımlamaya çalışıyorsunuz.

API anahtarınız geçersizse veya süresi dolmuşsa ya da konakta zaten var olan bir tanımlayıcıyı kullanarak bir paket yayımlamaya çalıştığınızda da hatalar görürsünüz. Örneğin, tanımlayıcının AppLogger-test nuget.org zaten var olduğunu varsayalım. Bu tanımlayıcıya sahip bir paket yayımlamaya çalışırsanız, push komut aşağıdaki hatayı verir:

Response status code does not indicate success: 403 (The specified API key is invalid,
has expired, or does not have permission to access the specified package.).

Bu hatayı alırsanız süresi dolmamış geçerli bir API anahtarı kullanıp kullanmadığınızı denetleyin. Bu durumda hata, konakta paket tanımlayıcısının zaten var olduğunu gösterir. Hatayı düzeltmek için paket tanımlayıcısını benzersiz olacak şekilde değiştirin, projeyi yeniden derleyin, .nupkg dosyasını yeniden oluşturun ve komutu yeniden deneyinpush.

Yayımlanan paketi yönetme

Paketiniz başarıyla yayımlandığında bir onay e-postası alırsınız. Yeni yayımladığınız paketi görmek için, nuget.org sağ üst köşeden kullanıcı adınızı ve ardından Paketleri Yönet'i seçin.

Not

Paketinizin dizine alınması ve başkalarının bulabileceği arama sonuçlarında görünmesi biraz zaman alabilir. Bu süre boyunca paketiniz Listelenmemiş Paketler altında görünür ve paket sayfası aşağıdaki iletiyi gösterir:

Screenshot showing the publishing message that's displayed when you upload a package to nuget.org.

Şimdi diğer geliştiricilerin projelerinde kullanabileceği nuget.org için bir NuGet paketi yayımladınız.

Kullanışlı olmayan bir paket oluşturduysanız (örneğin, boş bir sınıf kitaplığıyla oluşturulmuş bu örnek paket) veya paketin görünür olmasını istemediğinize karar verirseniz, paketi arama sonuçlarından gizlemek için paketin listesini kaldırabilirsiniz:

  1. Paket, Paketleri Yönet sayfasındaki Yayımlanan Paketler'in altında göründükten sonra paket listesinin yanındaki kalem simgesini seçin.

    Screenshot that shows the Edit icon for a package listing on nuget.org.

  2. Sonraki sayfada Listele'yi seçin, Arama sonuçlarında listele onay kutusunun seçimini kaldırın ve ardından Kaydet'i seçin.

    Screenshot that shows clearing the List checkbox for a package on nuget.org.

Paket artık Paketleri Yönet'teki Listelenmemiş Paketler altında görünür ve artık arama sonuçlarında görünmez.

Not

Test paketinizin nuget.org canlı olmasını önlemek için konumundaki nuget.org test sitesine https://int.nugettest.orggönderebilirsiniz. int.nugettest.org yüklenen paketlerin korunmayabileceğini unutmayın.

Benioku veya başka bir dosya ekleme

Pakete eklenecek dosyaları doğrudan belirtmek için proje dosyasını düzenleyin ve özelliğini ekleyin content :

<ItemGroup>
  <Content Include="readme.txt">
    <Pack>true</Pack>
    <PackagePath>\</PackagePath>
  </Content>
</ItemGroup>

Bu örnekte özelliği, proje kökünde readme.txt adlı bir dosya belirtir. Visual Studio, paketi yükledikten hemen sonra bu dosyanın içeriğini düz metin olarak görüntüler. Bağımlılık olarak yüklenen paketler için benioku dosyaları görüntülenmez. Örneğin, HtmlAgilityPack paketinin benioku dosyası şöyledir:

1 ----------------------------------------------------
2 ---------- Html Agility Pack Nuget Readme ----------
3 ----------------------------------------------------
4
5 ----Silverlight 4 and Windows Phone 7.1+ projects-----
6 To use XPATH features: System.Xml.Xpath.dll from the 3 Silverlight 4 SDK must be referenced. 
7 This is normally found at 
8 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client 
9 or 
10 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client
11
12 ----Silverlight 5 projects-----
13 To use XPATH features: System.Xml.Xpath.dll from the Silverlight 5 SDK must be referenced. 
14 This is normally found at 
15 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client 
16 or 
17 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client

Not

Proje kök dizinine proje dosyasının özelliğine eklemeden content yalnızca readme.txt eklerseniz, pakete eklenmez.

Channel 9 ve YouTube'da daha fazla NuGet videosu bulun.

Visual Studio .NET sınıf kitaplığını kullanarak NuGet paketi oluşturduğunuz için tebrikler. Visual Studio .NET Framework ile NuGet paketi oluşturmayı öğrenmek için sonraki makaleye ilerleyin.

NuGet'in sunacağı daha fazlasını keşfetmek için aşağıdaki makalelere bakın: