İngilizce dilinde oku

Aracılığıyla paylaş


.nuspec başvurusu

.nuspec Dosya, paket meta verilerini içeren bir XML bildirimidir. Bu bildirim hem paketi oluşturmak hem de tüketicilere bilgi sağlamak için kullanılır. Bildirim her zaman bir pakete eklenir.

Bu konuda:

Proje türü uyumluluğu

  • kullanan .nuspec SDK stili olmayan projeler için ile nuget.exe pack kullanın packages.config.

  • .nuspec SDK stili projeler (genellikle SDK özniteliğini kullanan .NET Core ve .NET Standard projeleri) için paketler oluşturmak için dosya gerekmez. (Paketi oluşturduğunuzda bir .nuspec oluşturulduğunu unutmayın.)

    veya kullanarak dotnet.exe pack bir paket oluşturuyorsanız, bunun yerine genellikle dosyadaki .nuspec tüm özellikleri proje dosyasına eklemenizi msbuild pack targetöneririz. Ancak, veyamsbuild pack target kullanarak dotnet.exe paketlemek için bir .nuspec dosya kullanmayı seçebilirsiniz.

  • 'den packages.config PackageReference'a geçirilen projelerde, paketi oluşturmak için bir .nuspec dosya gerekmez. Bunun yerine msbuild -t:pack kullanın.

Genel form ve şema

NuGet nuspec.xsd GitHub deposunda bir şema dosyası bulunabilir. Bu dosyanın yalnızca bir .nuspec dosya için en son şemayı temsil ettiğini unutmayın. Resmi olarak yayımlanmış sürüm yoktur ve bu dosyanın herhangi bir sürümü belirli bir NuGet sürümüne karşılık gelir.

Bu şemada, bir .nuspec dosya aşağıdaki genel forma sahiptir:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <!-- Required elements-->
        <id></id>
        <version></version>
        <description></description>
        <authors></authors>

        <!-- Optional elements -->
        <!-- ... -->
    </metadata>
    <!-- Optional 'files' node -->
</package>

Şemanın net bir görsel gösterimi için, Visual Studio'daki şema dosyasını Tasarım modunda açın ve XML Şema Gezgini bağlantısına tıklayın. Alternatif olarak, dosyayı kod olarak açın, düzenleyiciye sağ tıklayın ve XML Şema Gezginini Göster'i seçin. Her iki şekilde de aşağıdakine benzer bir görünüm elde edersiniz (çoğunlukla genişletildiğinde):

nuspec.xsd dosyasının açık olduğu Visual Studio Şema Gezgini

.nuspec dosyasındaki tüm XML öğesi adları, genel olarak XML için olduğu gibi büyük/küçük harfe duyarlıdır. Örneğin, meta veri öğesinin <description> kullanılması doğrudur ve <Description> doğru değildir. Her öğe adı için uygun büyük/küçük harf aşağıda belgelenmiştir.

Önemli

.nuspec Dosya bir şemaya ()xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" başvuru içerse de, NuGet-Team otomatik şema doğrulaması için kullanılabilecek bir şema dosyasını yayımlamadı.

Gerekli meta veri öğeleri

Aşağıdaki öğeler bir paket için en düşük gereksinimler olsa da, geliştiricilerin paketinizle ilgili genel deneyimini geliştirmek için isteğe bağlı meta veri öğelerini eklemeyi düşünmelisiniz.

Bu öğeler bir <metadata> öğenin içinde görünmelidir.

id

Nuget.org veya paketin bulunduğu galeride benzersiz olması gereken büyük/küçük harfe duyarlı olmayan paket tanımlayıcısı. Kimlikler, URL için geçerli olmayan boşluklar veya karakterler içermeyebilir ve genellikle .NET ad alanı kurallarına uyar. Yönergeler için bkz . Benzersiz paket tanımlayıcısı seçme.

Paketi nuget.org karşıya yüklerken, id alan 128 karakterle sınırlıdır.

sürüm

major.minor.patch desenini izleyen paketin sürümü. Sürüm numaraları, Paket sürümü oluşturma bölümünde açıklandığı gibi bir yayın öncesi son eki içerebilir.

Paketi nuget.org yüklerken, version alan 64 karakterle sınırlıdır.

açıklama

Kullanıcı arabirimi görüntüleme paketinin açıklaması.

Paketi nuget.org yüklerken, description alan 4000 karakterle sınırlıdır.

Yazar

Paket yazarlarının virgülle ayrılmış listesi. authors paket nuget.org yüklenirken nuspec'ten ve owners değerleri yoksayılır. nuget.org paket sahipliğini ayarlamak için bkz. nuget.org'de paket sahiplerini yönetme.

İsteğe bağlı meta veri öğeleri

Sahipleri

Önemli

sahipleri kullanım dışı bırakıldı. Bunun yerine yazarları kullanın.

Paket sahiplerinin virgülle ayrılmış listesi. owners paketi nuget.org yüklenirken nuspec'ten gelen yok sayılır. nuget.org paket sahipliğini ayarlamak için bkz. nuget.org'da paket sahiplerini yönetme.

projectUrl

Paketin giriş sayfasının URL'si, genellikle kullanıcı arabiriminde ve nuget.org görüntülenir.

Paketi nuget.org yüklerken, projectUrl alan 4000 karakterle sınırlıdır.

licenseUrl

Önemli

licenseUrl kullanım dışı bırakıldı. Bunun yerine lisans kullanın.

Genellikle nuget.org gibi UI'lerde gösterilen paket lisansının URL'si.

Paketi nuget.org yüklerken, licenseUrl alan 4000 karakterle sınırlıdır.

lisans

NuGet 4.9.0 ve üzeri ile desteklenir

SpDX lisans ifadesi veya paket içindeki bir lisans dosyasının yolu; genellikle nuget.org gibi UI'lerde gösterilir. Paketi MIT veya BSD-2-Clause gibi ortak bir lisans kapsamında lisanslarsanız, ilişkili SPDX lisans tanımlayıcısını kullanın. Örneğin:

<license type="expression">MIT</license>

Not

NuGet.org yalnızca Açık Kaynak Girişimi veya Free Software Foundation tarafından onaylanan lisans ifadelerini kabul eder.

Paketiniz birden çok ortak lisans kapsamında lisanslanmışsa SPDX ifade söz dizimi sürüm 2.0'ı kullanarak bileşik lisans belirtebilirsiniz. Örneğin:

<license type="expression">BSD-2-Clause OR MIT</license>

Lisans ifadeleri tarafından desteklenmeyen bir özel lisans kullanıyorsanız, bir veya .md dosyasını lisansın metniyle paketleyebilirsiniz.txt. Örneğin:

<package>
  <metadata>
    ...
    <license type="file">LICENSE.txt</license>
    ...
  </metadata>
  <files>
    ...
    <file src="licenses\LICENSE.txt" target="" />
    ...
  </files>
</package>

MSBuild eşdeğeri için Lisans ifadesini veya lisans dosyasını paketleme bölümüne bakın.

NuGet'in lisans ifadelerinin tam söz dizimi aşağıda ABNF'de açıklanmıştır.

license-id            = <short form license identifier from https://spdx.org/spdx-specification-21-web-version#h.luq9dgcle9mo>

license-exception-id  = <short form license exception identifier from https://spdx.org/spdx-specification-21-web-version#h.ruv3yl8g6czd>

simple-expression = license-id / license-id”+”

compound-expression =  1*1(simple-expression /
                simple-expression "WITH" license-exception-id /
                compound-expression "AND" compound-expression /
                compound-expression "OR" compound-expression ) /                
                "(" compound-expression ")" )

license-expression =  1*1(simple-expression / compound-expression / UNLICENSED)

iconUrl

Önemli

iconUrl kullanım dışı bırakıldı. Bunun yerine simgesini kullanın.

Kullanıcı arabirimi ekranında paketin simgesi olarak kullanılacak saydamlık arka planına sahip 128x128 görüntüsünün URL'si. Bu öğenin, görüntüyü içeren bir web sayfasının URL'sini değil doğrudan görüntü URL'sini içerdiğinden emin olun. Örneğin, GitHub'dan bir görüntü kullanmak için kullanıcı adı/depo>/ham</dal>/<<logo.png> gibi https://github.com/<ham dosya URL'sini kullanın.>

Paketi nuget.org yüklerken, iconUrl alan 4000 karakterle sınırlıdır.

ikon

NuGet 5.3.0 ve üzeri ile desteklenir

Genellikle paket simgesi olarak nuget.org gibi UI'lerde gösterilen paket içindeki bir görüntü dosyasının yoludur. Görüntü dosyası boyutu 1 MB ile sınırlıdır. Desteklenen dosya biçimleri JPEG ve PNG'dir. 128x128 görüntü çözünürlüğü öneririz.

Örneğin, nuget.exe kullanarak paket oluştururken nuspec'inize aşağıdakileri ekleyebilirsiniz:

<package>
  <metadata>
    ...
    <icon>images\icon.png</icon>
    ...
  </metadata>
  <files>
    ...
    <file src="..\icon.png" target="images\" />
    ...
  </files>
</package>

Paket Simgesi nuspec örneği.

MSBuild eşdeğeri için Simge görüntü dosyasını paketleme bölümüne bakın.

İpucu

henüz desteklemeyen iconistemciler ve kaynaklarla geriye dönük uyumluluğu korumak için hem hem iconUrlde icon değerini belirtin. Visual Studio, klasör tabanlı bir kaynaktan gelen paketleri destekler icon .

benioku

NuGet 5.10.0 önizleme 2 ve üzeri ile desteklenir

Benioku dosyasını paketlerken, paketin readme köküne göre paket yolunu belirtmek için öğesini kullanmanız gerekir. Buna ek olarak, dosyanın pakete eklendiğinden emin olmanız gerekir. Desteklenen dosya biçimleri yalnızca Markdown (.md) içerir.

Örneğin, projenizle bir benioku dosyasını paketlemek için nuspec'inize aşağıdakileri ekleyebilirsiniz:

<package>
  <metadata>
    ...
    <readme>docs\readme.md</readme>
    ...
  </metadata>
  <files>
    ...
    <file src="..\readme.md" target="docs\" />
    ...
  </files>
</package>

MSBuild eşdeğeri için Benioku dosyasını paketleme bölümüne bakın.

requireLicenseAcceptance

İstemcinin paketi yüklemeden önce tüketiciden paket lisansını kabul etmesi isteyip istemediğinizi belirten boole değeri.

developmentDependency

(2,8+) Paketin yalnızca geliştirme bağımlılığı olarak işaretlenip işaretlenmediğini belirten boole değeri, paketin diğer paketlere bağımlılık olarak eklenmesini önler. PackageReference (NuGet 4.8+) ile bu bayrak, derleme zamanı varlıklarını derlemenin dışında tutacağı anlamına da gelir. Bkz . PackageReference için DevelopmentDependency desteği

Özet

Önemli

summary kullanım dışı bırakılıyor. Bunun yerine description kullanın.

Kullanıcı arabirimi görüntüleme paketinin kısa bir açıklaması. Atlanırsa, kesilmiş sürümü description kullanılır.

Paketi nuget.org yüklerken, summary alan 4000 karakterle sınırlıdır.

releaseNotes

(1,5+) Paketin bu sürümünde yapılan değişikliklerin açıklaması, genellikle paket açıklaması yerine Visual Studio Paket Yöneticisi Güncelleştirmeler sekmesi gibi kullanıcı arabiriminde kullanılır.

Paketi nuget.org yüklerken, releaseNotes alan 35.000 karakterle sınırlıdır.

(1,5+) Paket için telif hakkı ayrıntıları.

Paketi nuget.org yüklerken, copyright alan 4000 karakterle sınırlıdır.

dil

Paketin yerel ayar kimliği. Bkz. Yerelleştirilmiş paketler oluşturma.

tags

Paketi açıklayan ve arama ve filtreleme yoluyla paketlerin bulunabilirliğine yardımcı olan, boşlukla ayrılmış etiketler ve anahtar sözcükler listesi.

Paketi nuget.org yüklerken, tags alan 4000 karakterle sınırlıdır.

faydalı

(3,3+) Yalnızca iç NuGet kullanımı için.

depo

Dört isteğe bağlı öznitelik içeren depo meta verileri: type ve url (4.0+) ve commit branch (4.6+). Bu öznitelikler, öğesini, onu oluşturan depoyla eşlemenize .nupkg olanak sağlar ve tek tek dal adı ve / veya paketi oluşturan SHA-1 karması kadar ayrıntılı bilgi alma potansiyeli sunar. Bu, bir sürüm denetimi yazılımı tarafından doğrudan çağrılabilen genel kullanıma açık bir URL olmalıdır. Bu, bilgisayar için tasarlandığı için bir html sayfası olmamalıdır. Proje sayfasına bağlanmak için bunun yerine alanını kullanın projectUrl .

Örneğin:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        ...
        <repository type="git" url="https://github.com/NuGet/NuGet.Client.git" branch="dev" commit="e1c65e4524cd70ee6e22abe33e6cb6ec73938cb3" />
        ...
    </metadata>
</package>

Paketi nuget.org'a yüklerken, type öznitelik 100 karakterle ve url öznitelik 4000 karakterle sınırlıdır.

başlık

Bazı kullanıcı arabirimi ekranlarında kullanılabilecek paketin insan dostu başlığı. (nuget.org ve Visual Studio'daki Paket Yöneticisi başlığı göstermiyor)

Bir paketi nuget.org'a yüklerken, title alan 256 karakterle sınırlıdır, ancak herhangi bir görüntüleme amacıyla kullanılmaz.

Koleksiyon öğeleri

packageTypes

(3,5+) Geleneksel bağımlılık paketi dışında bir paket türünü belirten sıfır veya daha fazla <packageType> öğeden oluşan bir koleksiyon. Her packageType'ın ad ve sürüm öznitelikleri vardır. Bkz . Paket türünü ayarlama.

bağımlılıklar

Paket için bağımlılıkları belirten sıfır veya daha fazla <dependency> öğeden oluşan bir koleksiyon. Her bağımlılığın id, version, include (3.x+) ve exclude (3.x+) öznitelikleri vardır. Aşağıdaki Bağımlılıklar bölümüne bakın.

frameworkAssemblies

(1,2+) Bu paketin gerektirdiği .NET Framework derleme başvurularını tanımlayan, paketi kullanan projelere başvuru eklenmesini sağlayan sıfır veya daha fazla <frameworkAssembly> öğeden oluşan bir koleksiyon. Her frameworkAssembly,assemblyName ve targetFramework özniteliklerine sahiptir. Aşağıdaki GaC çerçeve derleme başvurularını belirtme bölümüne bakın.

başvurular

(1,5+) Paketin lib klasöründe proje başvurusu olarak eklenen derlemeleri adlandıran sıfır veya daha fazla <reference> öğe koleksiyonu. Her başvuru bir dosya özniteliğine sahiptir. <references>daha sonra öğeleri içeren <group> targetFramework özniteliğine sahip bir öğe de içerebilir<reference>. Atlanırsa içindeki tüm başvurular lib eklenir. Aşağıdaki Açık derleme başvurularını belirtme bölümüne bakın.

contentFiles

(3,3+) Tüketen projeye eklenecek içerik dosyalarını tanımlayan öğeler koleksiyonu <files> . Bu dosyalar, proje sisteminde nasıl kullanılmaları gerektiğini açıklayan bir öznitelik kümesiyle belirtilir. Aşağıdaki pakete eklenecek dosyaları belirtme bölümüne bakın.

files

Düğüm, <package> paketine hangi derleme ve içerik dosyalarının dahilleneceğini belirtmek için <metadata>ile eşdüzey bir düğüm ve altında <metadata>bir <contentFiles> alt öğe içerebilir<files>. Ayrıntılar için bu konunun devamında Derleme dosyalarını dahil ve İçerik dosyalarını dahil edin bölümüne bakın.

meta veri öznitelikleri

minClientVersion

NuGet istemcisinin, nuget.exe ve Visual Studio Paket Yöneticisi tarafından zorlanan, bu paketi yükleyebilen en düşük sürümünü belirtir. Bu, paket dosyanın NuGet istemcisinin belirli bir sürümüne .nuspec eklenen belirli özelliklerine bağlı olduğunda kullanılır. Örneğin, özniteliğini developmentDependency kullanan bir paket için minClientVersion"2.8" belirtmelidir. Benzer şekilde, öğesini kullanan contentFiles bir paket (sonraki bölüme bakın) "3.3" olarak ayarlanmalıdır minClientVersion . Ayrıca, 2.5'in öncesinde NuGet istemcileri bu bayrağı tanımadığından, ne minClientVersion içerse de paketi yüklemeyi her zaman reddettiklerini unutmayın.

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata minClientVersion="100.0.0.1">
        <id>dasdas</id>
        <version>2.0.0</version>
        <title />
        <authors>dsadas</authors>
        <owners />
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>My package description.</description>
    </metadata>
    <files>
        <file src="content\one.txt" target="content\one.txt" />
    </files>
</package>

Değiştirme belirteçleri

Paket oluştururken, komut dosyanın ve düğümlerindeki .nuspec $-delimited belirteçlerini bir proje dosyasından veya pack komutun -properties anahtarından gelen değerlerle değiştirir.<files> <metadata>nuget pack

Komut satırında, ile nuget pack -properties <name>=<value>;<name>=<value>belirteç değerlerini belirtirsiniz. Örneğin, ve $desc$ .nuspec gibi $owners$ bir belirteç kullanabilir ve paketleme zamanındaki değerleri aşağıdaki gibi sağlayabilirsiniz:

nuget pack MyProject.csproj -properties
    owners=janedoe,harikm,kimo,xiaop;desc="Awesome app logger utility"

Bir projedeki değerleri kullanmak için aşağıdaki tabloda açıklanan belirteçleri belirtin (AssemblyInfo, veya AssemblyInfo.vbgibi AssemblyInfo.cs dosyasındaki Properties dosyaya başvurur).

Bu belirteçleri kullanmak için yalnızca .nuspecyerine proje dosyasıyla komutunu çalıştırınnuget pack. Örneğin, aşağıdaki komutu kullanırken, $id$ bir .nuspec dosyadaki ve $version$ belirteçleri projenin AssemblyName ve AssemblyVersion değerleriyle değiştirilir:

nuget pack MyProject.csproj

Genellikle, bir projeniz olduğunda, başlangıçta nuget spec MyProject.csproj bu standart belirteçlerden bazılarını otomatik olarak içeren öğesini oluşturursunuz.nuspec. Ancak, bir proje gerekli .nuspec öğeler için değerlerden yoksunsa başarısız nuget pack olur. Ayrıca, proje değerlerini değiştirirseniz paketi oluşturmadan önce yeniden derlemeyi unutmayın; bu, paket komutunun build anahtarıyla rahatça yapılabilir.

dışında $configuration$, projedeki değerler, komut satırında aynı belirteç için atanan herhangi bir tercihe göre kullanılır.

Belirteç Değer kaynağı Değer
$id$ Proje dosyası Proje dosyasından AssemblyName (başlık)
$version$ AssemblyInfo Varsa AssemblyInformationalVersion, aksi takdirde AssemblyVersion
$author$ AssemblyInfo AssemblyCompany
$title$ AssemblyInfo AssemblyTitle
$description$ AssemblyInfo AssemblyDescription
$copyright$ AssemblyInfo AssemblyCopyright
$configuration$ Derleme DLL'i Derlemeyi derlemek için kullanılan yapılandırma, hata ayıklama olarak varsayılan olarak kullanılır. Yayın yapılandırması kullanarak bir paket oluşturmak için her zaman komut satırında kullandığınızı -properties Configuration=Release unutmayın.

Belirteçler, derleme dosyalarını ve içerik dosyalarını eklediğinizde yolları çözümlemek için de kullanılabilir. Belirteçler MSBuild özellikleriyle aynı adlara sahip olduğundan, geçerli derleme yapılandırmasına bağlı olarak dahil edilecek dosyaları seçebilirsiniz. Örneğin, dosyasında aşağıdaki belirteçleri .nuspec kullanırsanız:

<files>
    <file src="bin\$configuration$\$id$.pdb" target="lib\net40" />
</files>

Ayrıca MSBuild'deki yapılandırmayla birlikte Release olan AssemblyName LoggingLibrary bir derleme oluşturursunuz; paketteki dosyada .nuspec elde edilen satırlar aşağıdaki gibidir:

<files>
    <file src="bin\Release\LoggingLibrary.pdb" target="lib\net40" />
</files>

Dependencies öğesi

içindeki <dependencies> <metadata> öğesi, en üst düzey paketin <dependency> bağımlı olduğu diğer paketleri tanımlayan herhangi bir sayıda öğe içerir. Her <dependency> birinin öznitelikleri aşağıdaki gibidir:

Öznitelik Açıklama
id (Gerekli) Bir paket sayfasında nuget.org paketin adı olan "EntityFramework" ve "NUnit" gibi bağımlılığın paket kimliği.
version (Gerekli) Bağımlılık olarak kabul edilebilir sürüm aralığı. Tam söz dizimi için bkz . Paket sürümü oluşturma . Kayan sürümler desteklenmez.
ekle Son pakete eklenecek bağımlılığı gösteren, ekleme/hariç tutma etiketlerinin virgülle ayrılmış listesi (aşağıya bakın). Varsayılan değer şudur: all.
dışlama Son pakette hariç tutulacak bağımlılığı gösteren, ekleme/hariç tutma etiketlerinin virgülle ayrılmış listesi (aşağıya bakın). Varsayılan değer, build,analyzers üzerine yazılabilir. Ancak content/ ContentFiles , aşırı yazılamayan son pakette örtük olarak dışlanır. ile belirtilen etiketler ile exclude includebelirtilenlerden önceliklidir. Örneğin include="runtime, compile" exclude="compile" ile include="runtime" aynıdır.

Bir paketi nuget.org karşıya yüklerken, her bağımlılığın id özniteliği 128 karakterle ve version öznitelik 256 karakterle sınırlıdır.

Etiketi dahil et/hariç tut Hedefin etkilenen klasörleri
contentFiles Content
çalışma zamanı Çalışma Zamanı, Kaynaklar ve FrameworkAssemblies
derle Lib
derleme build (MSBuild props ve targets)
yerel yerel
yok Klasör yok
tümü Tüm klasörler

Örneğin, aşağıdaki satırlar sürüm 1.1.0 veya üzeri ile PackageB sürüm 1.x'e PackageA bağımlılıkları gösterir.

<dependencies>
    <dependency id="PackageA" version="1.1.0" />
    <dependency id="PackageB" version="[1,2)" />
</dependencies>

Aşağıdaki satırlar aynı paketlerde bağımlılıkları gösterir, ancak ve klasörlerini ve ve klasörleri PackageBPackageA dışında compile native her şeyi dahil contentFiles build etmek için belirtin"

<dependencies>
    <dependency id="PackageA" version="1.1.0" include="contentFiles, build" />
    <dependency id="PackageB" version="[1,2)" exclude="native, compile" />
</dependencies>

Önemli

kullanarak nuget specbir projeden oluştururken.nuspec, bu projede var olan bağımlılıklar otomatik olarak sonuçta .nuspec elde edilen dosyaya eklenmez. Bunun yerine kullanın nuget pack myproject.csprojve oluşturulan .nupkg dosyasının içinden .nuspec dosyasını alın. Bu .nuspec bağımlılıkları içerir.

Bağımlılık grupları

Sürüm 2.0+

Tek bir düz listeye alternatif olarak, bağımlılıklar içindeki <dependencies>öğeler kullanılarak <group> hedef projenin çerçeve profiline göre belirtilebilir.

Her grubun adlı targetFramework bir özniteliği vardır ve sıfır veya daha fazla <dependency> öğe içerir. Hedef çerçeve projenin çerçeve profiliyle uyumlu olduğunda bu bağımlılıklar birlikte yüklenir.

<group> Özniteliği olmayan targetFramework öğesi, bağımlılıkların varsayılan veya geri dönüş listesi olarak kullanılır. Tam çerçeve tanımlayıcıları için bkz. Hedef çerçeveler.

Önemli

Grup biçimi düz bir listeyle karıştırılamaz.

Not

klasöründe kullanılan Hedef Çerçeve Takma Adı'nın (TFM) biçimi, içinde lib/ref dependency groupskullanılan TFM ile karşılaştırıldığında farklıdır. ve lib/ref .nuspec dosyasında bildirilen dependencies group hedef çerçeveler tam eşleşmelere pack sahip değilse, komut NuGet Uyarısı NU5128'i tetikler.

Aşağıdaki örnek, öğesinin <group> farklı çeşitlemelerini gösterir:

<dependencies>
    <group>
        <dependency id="RouteMagic" version="1.1.0" />
    </group>

    <group targetFramework=".NETFramework4.7.2">
        <dependency id="jQuery" version="1.6.2" />
        <dependency id="WebActivator" version="1.4.4" />
    </group>

    <group targetFramework="netcoreapp3.1">
    </group>
</dependencies>

Açık derleme başvuruları

<references> öğesi, paketi kullanırken hedef projenin başvurması gereken derlemeleri açıkça belirtmek için kullanan packages.config projeler tarafından kullanılır. Açık başvurular genellikle yalnızca tasarım zamanı derlemeleri için kullanılır. Daha fazla bilgi için projeler tarafından başvuruda bulunan derlemeleri seçme sayfasına bakın.

Örneğin, aşağıdaki <references> öğe NuGet'e yalnızca xunit.dll ve xunit.extensions.dll pakette ek derlemeler olsa bile başvuru eklemesini sağlar:

<references>
    <reference file="xunit.dll" />
    <reference file="xunit.extensions.dll" />
</references>

Başvuru grupları

Tek bir düz listeye alternatif olarak, içindeki öğeler <references>kullanılarak <group> hedef projenin çerçeve profiline göre başvurular belirtilebilir.

Her grubun adlı targetFramework bir özniteliği vardır ve sıfır veya daha fazla <reference> öğe içerir. Hedef çerçeve projenin çerçeve profiliyle uyumlu olduğunda bu başvurular projeye eklenir.

<group> Özniteliği olmayan targetFramework öğe, başvuruların varsayılan veya geri dönüş listesi olarak kullanılır. Tam çerçeve tanımlayıcıları için bkz. Hedef çerçeveler.

Önemli

Grup biçimi düz bir listeyle karıştırılamaz.

Aşağıdaki örnek, öğesinin <group> farklı çeşitlemelerini gösterir:

<references>
    <group>
        <reference file="a.dll" />
    </group>

    <group targetFramework="net45">
        <reference file="b45.dll" />
    </group>

    <group targetFramework="netcore45">
        <reference file="bcore45.dll" />
    </group>
</references>

Çerçeve derleme başvuruları

Çerçeve derlemeleri, .NET çerçevesinin parçası olan ve belirli bir makine için genel derleme önbelleğinde (GAC) bulunması gereken derlemelerdir. Bir paket, öğesi içindeki <frameworkAssemblies> bu derlemeleri tanımlayarak, projenin bu tür başvurulara sahip olmaması durumunda bir projeye gerekli başvuruların eklenmesini sağlayabilir. Bu tür derlemeler elbette bir pakete doğrudan dahil değildir.

<frameworkAssemblies> öğesi, her biri aşağıdaki öznitelikleri belirten sıfır veya daha fazla <frameworkAssembly> öğe içerir:

Öznitelik Açıklama
assemblyName (Gerekli) Tam derleme adı.
targetFramework (İsteğe bağlı) Bu başvurunun uygulandığı hedef çerçeveyi belirtir. Atlanırsa, başvurunun tüm çerçeveler için geçerli olduğunu gösterir. Tam çerçeve tanımlayıcıları için bkz. Hedef çerçeveler.

Aşağıdaki örnekte tüm hedef çerçeveler için bir başvuru System.Net ve yalnızca .NET Framework 4.0 için başvuru System.ServiceModel gösterilmektedir:

<frameworkAssemblies>
    <frameworkAssembly assemblyName="System.Net"  />

    <frameworkAssembly assemblyName="System.ServiceModel" targetFramework="net40" />
</frameworkAssemblies>

Derleme dosyalarını dahil

Paket Oluşturma bölümünde açıklanan kuralları izlerseniz, dosyadaki .nuspec dosyaların listesini açıkça belirtmeniz gerekmez. nuget pack komutu gerekli dosyaları otomatik olarak alır.

Önemli

Bir paket projeye yüklendiğinde NuGet, yerelleştirilmiş uydu derlemeleri olduğu varsayıldığından adlandırılmış .resources.dll olanlar hariç olmak üzere paketin DLL'lerine otomatik olarak derleme başvuruları ekler. Bu nedenle, aksi takdirde temel paket kodu içeren dosyalar için kullanmaktan .resources.dll kaçının.

Bu otomatik davranışı atlamak ve bir pakete hangi dosyaların dahil olduğunu açıkça denetlemek için, bir <files> öğeyi öğesini öğesinin <package> alt öğesi (ve eşdüzey öğesi <metadata>) olarak yerleştirin ve her dosyayı ayrı <file> bir öğeyle tanımlayın. Örneğin:

<files>
    <file src="bin\Debug\*.dll" target="lib" />
    <file src="bin\Debug\*.pdb" target="lib" />
    <file src="tools\**\*.*" exclude="**\*.log" />
</files>

NuGet 2.x ve önceki sürümleriyle ve kullanan packages.config<files> projelerle, bir paket yüklendiğinde sabit içerik dosyalarını eklemek için öğesi de kullanılır. NuGet 3.3+ ve PackageReference projeleriyle bunun <contentFiles> yerine öğesi kullanılır. Ayrıntılar için aşağıdaki İçerik dosyalarını dahil edin bölümüne bakın.

Dosya öğesi öznitelikleri

Her <file> öğe aşağıdaki öznitelikleri belirtir:

Öznitelik Açıklama
Src Özniteliği tarafından exclude belirtilen dışlamalara tabi olarak, eklenecek dosyanın veya dosyaların konumu. Mutlak bir yol belirtilmediği sürece yol dosyaya .nuspec göre belirlenir. Joker karaktere izin verilir ve çift joker karakter * ** özyinelemeli klasör araması anlamına gelir.
hedef Kaynak dosyaların yerleştirildiği paketin içindeki klasörün göreli yolu, , content, buildveya toolsile libbaşlamalıdır. Bkz . Kural tabanlı bir çalışma dizininden .nuspec oluşturma.
Dışlamak Konumdan hariç tutulacak src dosyaların veya dosya desenlerinin noktalı virgülle ayrılmış listesi. Joker karaktere izin verilir ve çift joker karakter * ** özyinelemeli klasör araması anlamına gelir.

Örnekler

Tek bütünleştirilmiş kod

Source file:
    library.dll

.nuspec entry:
    <file src="library.dll" target="lib" />

Packaged result:
    lib\library.dll

Hedef çerçeveye özgü tek derleme

Source file:
    library.dll

.nuspec entry:
    <file src="assemblies\net40\library.dll" target="lib\net40" />

Packaged result:
    lib\net40\library.dll

Joker karakter kullanan DLL kümesi

Source files:
    bin\release\libraryA.dll
    bin\release\libraryB.dll

.nuspec entry:
    <file src="bin\release\*.dll" target="lib" />

Packaged result:
    lib\libraryA.dll
    lib\libraryB.dll

Farklı çerçeveler için DLL'ler

Source files:
    lib\net40\library.dll
    lib\net20\library.dll

.nuspec entry (using ** recursive search):
    <file src="lib\**" target="lib" />

Packaged result:
    lib\net40\library.dll
    lib\net20\library.dll

Dosyaları dışlama

Source files:
    \tools\fileA.bak
    \tools\fileB.bak
    \tools\fileA.log
    \tools\build\fileB.log

.nuspec entries:
    <file src="tools\*.*" target="tools" exclude="tools\*.bak" />
    <file src="tools\**\*.*" target="tools" exclude="**\*.log" />

Package result:
    (no files)

İçerik dosyalarını dahil

İçerik dosyaları, bir paketin projeye dahil etmesi gereken sabit dosyalardır. Sabit olduklarından, tüketen proje tarafından değiştirilmesi amaçlanmamıştır. Örnek içerik dosyaları şunlardır:

  • Kaynak olarak eklenmiş görüntüler
  • Zaten derlenmiş kaynak dosyalar
  • Projenin derleme çıkışına eklenmesi gereken betikler
  • Projeye eklenmesi gereken ancak projeye özgü herhangi bir değişikliğe ihtiyaç duymayan paket için yapılandırma dosyaları

İçerik dosyaları, özniteliğindeki klasörü belirterek content öğesi kullanılarak <files> bir pakete target eklenir. Ancak paket PackageReference kullanılarak bir projeye yüklendiğinde bu tür dosyalar yoksayılır ve bunun yerine öğesini kullanır <contentFiles> .

Projelerin tüketilmesiyle en yüksek uyumluluk için, bir paket her iki öğedeki içerik dosyalarını ideal olarak belirtir.

İçerik dosyaları için files öğesini kullanma

İçerik dosyaları için, derleme dosyalarıyla aynı biçimi kullanın, ancak aşağıdaki örneklerde gösterildiği gibi özniteliğinde target temel klasör olarak belirtincontent.

Temel içerik dosyaları

Source files:
    css\mobile\style1.css
    css\mobile\style2.css

.nuspec entry:
    <file src="css\mobile\*.css" target="content\css\mobile" />

Packaged result:
    content\css\mobile\style1.css
    content\css\mobile\style2.css

Dizin yapısına sahip içerik dosyaları

Source files:
    css\mobile\style.css
    css\mobile\wp7\style.css
    css\browser\style.css

.nuspec entry:
    <file src="css\**\*.css" target="content\css" />

Packaged result:
    content\css\mobile\style.css
    content\css\mobile\wp7\style.css
    content\css\browser\style.css

Hedef çerçeveye özgü içerik dosyası

Source file:
    css\cool\style.css

.nuspec entry
    <file src="css\cool\style.css" target="Content" />

Packaged result:
    content\style.css

adında nokta bulunan bir klasöre kopyalanan içerik dosyası

Bu durumda, NuGet içindeki target uzantısının içindeki src uzantıyla eşleşmediğini görür ve bu nedenle içinde adın target bu kısmını bir klasör olarak ele yapar:

Source file:
    images\picture.png

.nuspec entry:
    <file src="images\picture.png" target="Content\images\package.icons" />

Packaged result:
    content\images\package.icons\picture.png

Uzantı içermeyen içerik dosyaları

Uzantı içermeyen dosyaları eklemek için veya ** joker karakterlerini kullanın*:

Source file:
    flags\installed

.nuspec entry:
    <file src="flags\**" target="flags" />

Packaged result:
    flags\installed

Derin yol ve derin hedef içeren içerik dosyaları

Bu durumda, kaynak ve hedef dosya uzantıları eşleştiğinden, NuGet hedefin klasör değil dosya adı olduğunu varsayar:

Source file:
    css\cool\style.css

.nuspec entry:
    <file src="css\cool\style.css" target="Content\css\cool" />
    or:
    <file src="css\cool\style.css" target="Content\css\cool\style.css" />

Packaged result:
    content\css\cool\style.css

Paketteki içerik dosyasını yeniden adlandırma

Source file:
    ie\css\style.css

.nuspec entry:
    <file src="ie\css\style.css" target="Content\css\ie.css" />

Packaged result:
    content\css\ie.css

Dosyaları dışlama

Source file:
    docs\*.txt (multiple files)

.nuspec entry:
    <file src="docs\*.txt" target="content\docs" exclude="docs\admin.txt" />
    or
    <file src="*.txt" target="content\docs" exclude="admin.txt;log.txt" />

Packaged result:
    All .txt files from docs except admin.txt (first example)
    All .txt files from docs except admin.txt and log.txt (second example)

İçerik dosyaları için contentFiles öğesini kullanma

PackageReference ile NuGet 4.0+

Varsayılan olarak, bir paket içeriği bir contentFiles klasöre yerleştirir (aşağıya bakın) ve nuget pack varsayılan öznitelikleri kullanarak bu klasöre tüm dosyaları ekler. Bu durumda bir düğümün .nuspec dahil contentFiles edilmesi gerekmez.

Hangi dosyaların dahil olduğunu denetlemek için öğesini belirtir, <contentFiles> tam dosyaları tanımlayan bir öğe koleksiyonudur <files> .

Bu dosyalar, proje sisteminde nasıl kullanılmaları gerektiğini açıklayan bir öznitelik kümesiyle belirtilir:

Öznitelik Açıklama
include (Gerekli) Özniteliği tarafından exclude belirtilen dışlamalara tabi olarak, eklenecek dosyanın veya dosyaların konumu. Mutlak bir yol belirtilmediği sürece yol klasöre göre contentFiles belirlenir. Joker karaktere izin verilir ve çift joker karakter * ** özyinelemeli klasör araması anlamına gelir.
Dışlamak Konumdan hariç tutulacak src dosyaların veya dosya desenlerinin noktalı virgülle ayrılmış listesi. Joker karaktere izin verilir ve çift joker karakter * ** özyinelemeli klasör araması anlamına gelir.
buildAction MSBuild içerik öğesine atanacak derleme eylemi, örneğinContent, , NoneEmbedded Resource, , Compilevb. Varsayılan değerdirCompile.
copyToOutput İçerik öğelerinin derleme (veya yayımlama) çıkış klasörüne kopyalanıp kopyalanmayacağını gösteren Boole değeri. Varsayılan değer false.
Düzleştir İçerik öğelerinin derleme çıktısında tek bir klasöre kopyalanıp kopyalanmayacağını (true) veya paketteki klasör yapısının (false) korunup korunmayacağını gösteren boole değeri. Bu bayrak yalnızca copyToOutput bayrağı true olarak ayarlandığında çalışır. Varsayılan değer false.

Bir paketi yüklerken NuGet alt öğelerini <contentFiles> yukarıdan aşağıya uygular. Aynı dosyayla eşleşen birden çok girdi varsa, tüm girişler uygulanır. En üstteki girdi, aynı öznitelik için çakışma varsa alt girdileri geçersiz kılar.

Paket klasörü yapısı

Paket projesi aşağıdaki deseni kullanarak içeriği yapılandırmalıdır:

/contentFiles/{codeLanguage}/{TxM}/{any?}
  • codeLanguagescs, , vb, fs, anyveya belirli bir değerin küçük harfle eşdeğeri olabilir$(ProjectLanguage)
  • TxM NuGet'in desteklediği herhangi bir yasal hedef çerçeve adıdır (bkz . Hedef çerçeveler).
  • Bu söz diziminin sonuna herhangi bir klasör yapısı eklenebilir.

Örneğin:

Language- and framework-agnostic:
    /contentFiles/any/any/config.xml

net45 content for all languages
    /contentFiles/any/net45/config.xml

C#-specific content for net45 and up
    /contentFiles/cs/net45/sample.cs

Boş klasörler, belirli dil ve TxM bileşimleri için içerik sağlamayı geri çevirmek için kullanabilir _._ , örneğin:

/contentFiles/vb/any/code.vb
/contentFiles/cs/any/_._

Örnek contentFiles bölümü

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        ...
        <contentFiles>
            <!-- Embed image resources -->
            <files include="any/any/images/dnf.png" buildAction="EmbeddedResource" />
            <files include="any/any/images/ui.png" buildAction="EmbeddedResource" />

            <!-- Embed all image resources under contentFiles/cs/ -->
            <files include="cs/**/*.png" buildAction="EmbeddedResource" />

            <!-- Copy config.xml to the root of the output folder -->
            <files include="cs/uap/config/config.xml" buildAction="None" copyToOutput="true" flatten="true" />

            <!-- Copy run.cmd to the output folder and keep the directory structure -->
            <files include="cs/commands/run.cmd" buildAction="None" copyToOutput="true" flatten="false" />

            <!-- Include everything in the scripts folder except exe files -->
            <files include="cs/net45/scripts/*" exclude="**/*.exe"  buildAction="None" copyToOutput="true" />
        </contentFiles>
        </metadata>
</package>

Çerçeve başvuru grupları

Sürüm 5.1+ wih PackageReference yalnızca

Çerçeve Başvuruları, WPF veya Windows Forms gibi paylaşılan çerçeveleri temsil eden bir .NET Core kavramıdır. Paylaşılan bir çerçeve belirterek paket, tüm çerçeve bağımlılıklarının başvuran projeye dahil edilmesini sağlar.

Her <group> öğe için bir targetFramework öznitelik ve sıfır veya daha fazla <frameworkReference> öğe gerekir.

Aşağıdaki örnekte bir .NET Core WPF projesi için oluşturulan bir nuspec gösterilmektedir. Çerçeve başvuruları içeren el yazma nuspecs önerilmez. Bunun yerine, bunları projeden otomatik olarak çıkaracak olan hedef paketini kullanmayı göz önünde bulundurun.

<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <dependencies>
      <group targetFramework=".NETCoreApp3.1" />
    </dependencies>
    <frameworkReferences>
      <group targetFramework=".NETCoreApp3.1">
        <frameworkReference name="Microsoft.WindowsDesktop.App.WPF" />
      </group>
    </frameworkReferences>
  </metadata>
</package>

Örnek nuspec dosyaları

Bağımlılıkları veya dosyaları belirtmeyen basit .nuspec bir

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>sample</id>
        <version>1.2.3</version>
        <authors>Kim Abercrombie, Franck Halmaert</authors>
        <description>Sample exists only to show a sample .nuspec file.</description>
        <language>en-US</language>
        <projectUrl>http://xunit.codeplex.com/</projectUrl>
        <license type="expression">MIT</license>
    </metadata>
</package>

Bağımlılıkları olan A .nuspec

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>sample</id>
        <version>1.0.0</version>
        <authors>Microsoft</authors>
        <dependencies>
            <dependency id="another-package" version="3.0.0" />
            <dependency id="yet-another-package" version="1.0.0" />
        </dependencies>
    </metadata>
</package>

Dosya içeren A .nuspec

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>routedebugger</id>
        <version>1.0.0</version>
        <authors>Jay Hamlin</authors>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Route Debugger is a little utility I wrote...</description>
    </metadata>
    <files>
        <file src="bin\Debug\*.dll" target="lib" />
    </files>
</package>

Çerçeve derlemeleri ile A .nuspec

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>PackageWithGacReferences</id>
        <version>1.0</version>
        <authors>Author here</authors>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>
            A package that has framework assemblyReferences depending
            on the target framework.
        </description>
        <frameworkAssemblies>
            <frameworkAssembly assemblyName="System.Web" targetFramework="net40" />
            <frameworkAssembly assemblyName="System.Net" targetFramework="net40-client, net40" />
            <frameworkAssembly assemblyName="Microsoft.Devices.Sensors" targetFramework="sl4-wp" />
            <frameworkAssembly assemblyName="System.Json" targetFramework="sl3" />
        </frameworkAssemblies>
    </metadata>
</package>

Bu örnekte, belirli proje hedefleri için aşağıdakiler yüklenir:

  • . NET4 ->System.Web, System.Net
  • . NET4 İstemci Profili ->System.Net
  • Silverlight 3 ->System.Json
  • WindowsPhone ->Microsoft.Devices.Sensors