Aracılığıyla paylaş


project.json başvurusu

Önemli

Bu içerik kullanım dışı bırakıldı. Projeler PackageReference biçimlerini kullanmalıdır. project.json projenizi PackageReference 'e geçirmeyiöğrenin.

NuGet 3.x

project.json dosyası, paket yönetimi biçimi olarak bilinen bir projede kullanılan paketlerin listesini tutar. packages.config yerini alır, ancak sırasıyla PackageReference NuGet 4.0+ ile değiştirilir.

project.lock.json dosyası (aşağıda açıklanmıştır) project.jsonkullanan projelerde de kullanılır.

project.json, dört üst düzey nesnenin her birinin herhangi bir sayıda alt nesneye sahip olabileceği aşağıdaki temel yapıya sahiptir:

{
    "dependencies": {
        "PackageID" : "{version_constraint}"
    },
    "frameworks" : {
        "TxM" : {}
    },
    "runtimes" : {
        "RID": {}
    },
    "supports" : {
        "CompatibilityProfile" : {}
    }
}

project.json PackageReference'a geçirme

project.json ile PackageReference arasındaki geçiş basittir. En son Visual Studio 2022 Güncelleştirme 14'te yerleşik geçiş aracını kullanmak için bunu yapmanın en kolay yolu.

  1. Visual Studio'da project.json projesini yükleyin.
  2. project.json projesinin çözüm gezginine gidin ve bağımlılıklar düğümünü bulun.
  3. Migrate project.json to PackageReference...! seçeneğine tıklayın.

project.json'den PackageReference 'a Geçiş

Alternatif olarak, dotnet geçişikullanabilir veya project.json dosyasındaki tüm içeriği alıp eşdeğerPackageReference söz dizimi ile değiştirerek geçişi el ile yapabilirsiniz.

Bağımlılık

Projenizin NuGet paket bağımlılıklarını aşağıdaki biçimde listeler:

"PackageID" : "version_constraint"

Mesela:

"dependencies": {
    "Microsoft.NETCore": "5.0.0",
    "System.Runtime.Serialization.Primitives": "4.0.10"
}

dependencies bölümü, NuGet Paket Yöneticisi iletişim kutusunun projenize paket bağımlılıkları eklediği bölümdür.

Paket kimliği, nuget.org üzerindeki paketin kimliğine karşılık gelir ve paket yöneticisi konsolunda kullanılan kimlikle aynıdır: Install-Package Microsoft.NETCore.

Paketler geri yüklenirken, "5.0.0" sürüm kısıtlaması >= 5.0.0anlamına gelir. Yani, sunucuda 5.0.0 yoksa ancak 5.0.1 mevcutsa, NuGet 5.0.1'i yükler ve yükseltme hakkında sizi uyarır. NuGet aksi takdirde sunucuda kısıtlamayla eşleşen en düşük olası sürümü seçer.

Çözüm kuralları hakkında daha fazla bilgi için bkz. Bağımlılık çözümlemesi.

Bağımlılık varlıklarını yönetme

Bağımlılıklardan en üst düzey projeye akan varlıklar, bağımlılık başvurusunun include ve exclude özelliklerinde virgülle ayrılmış bir etiket kümesi belirtilerek denetlenmektedir. Etiketler aşağıdaki tabloda listelenmiştir:

Etiketi dahil et/hariç tut Hedefin etkilenen klasörleri
contentFiles İçerik
Çalışma zamanı Çalışma Zamanı, Kaynaklar ve FrameworkAssemblies
derlemek Lib
yapmak build (MSBuild props ve targets)
yerli yerli
hiç kimse Klasör yok
tüm Tüm klasörler

exclude ile belirtilen etiketler, includeile belirtilenlerden önceliklidir. Örneğin, include="runtime, compile" exclude="compile"include="runtime"ile aynıdır.

Örneğin, bir bağımlılığın build ve native klasörlerini eklemek için aşağıdakileri kullanın:

{
  "dependencies": {
    "packageA": {
      "version": "1.0.0",
      "include": "build, native"
    }
  }
}

Bir bağımlılığın content ve build klasörlerini dışlamak için aşağıdakileri kullanın:

{
  "dependencies": {
    "packageA": {
      "version": "1.0.0",
      "exclude": "contentFiles, build"
    }
  }
}

Çerçeve

projenin üzerinde çalıştığı net45, netcoreappnetstandardgibi çerçeveleri listeler.

"frameworks": {
    "netcore50": {}
    }

frameworks bölümünde yalnızca tek bir girişe izin verilir. (Özel durum, birden çok hedefe izin veren kullanım dışı DNX araç zinciriyle derlenen ASP.NET projelerin dosyaları project.json.)

Çalışma Zamanları

uygulamanızın üzerinde çalıştığı win10-arm, win8-x64win8-x86gibi işletim sistemlerini ve mimarileri listeler.

"runtimes": {
    "win10-arm": { },
    "win10-arm-aot": { },
    "win10-x86": { },
    "win10-x86-aot": { },
    "win10-x64": { },
    "win10-x64-aot": { }
}

Herhangi bir çalışma zamanında çalışabilen bir PCL içeren paketin çalışma zamanı belirtmesi gerekmez. Bu durum tüm bağımlılıklar için de geçerli olmalıdır, aksi takdirde çalışma zamanlarını belirtmeniz gerekir.

Destekle -yen

Paket bağımlılıkları için bir dizi denetim tanımlar. PCL veya uygulamanın nerede çalışmasını beklediğinizi tanımlayabilirsiniz. Kodunuz başka bir yerde çalıştırabildiğinden tanımlar kısıtlayıcı değildir. Ancak bu denetimlerin belirtilmesi, NuGet'in listelenen TxM'lerde tüm bağımlılıkların karşılandığından emin olmasını sağlar. Bunun için değerlere örnek olarak şunlar verilebilir: net46.app, uwp.10.0.appvb.

Taşınabilir Sınıf Kitaplığı hedefleri iletişim kutusunda bir girdi seçtiğinizde bu bölüm otomatik olarak doldurulmalıdır.

"supports": {
    "net46.app": {},
    "uwp.10.0.app": {}
}

Ithalat

İçeri aktarmalar, dotnet TxM kullanan paketlerin dotnet TxM bildirmeyen paketlerle çalışmasına izin verecek şekilde tasarlanmıştır. Projeniz dotnet TxM kullanıyorsa, dotnet olmayan platformların dotnetuyumlu olmasına izin vermek için project.json aşağıdakini eklemediğiniz sürece, bağımlı olduğunuz tüm paketlerin de dotnet bir TxM'ye sahip olması gerekir:

"frameworks": {
    "dotnet": { "imports" : "portable-net45+win81" }
}

dotnet TxM kullanıyorsanız, PCL proje sistemi desteklenen hedeflere göre uygun imports deyimini ekler.

Taşınabilir uygulamalar ve web projelerinden farklar

NuGet tarafından kullanılan project.json dosyası, ASP.NET Core projelerinde bulunan bir alt kümesidir. ASP.NET Core project.json proje meta verileri, derleme bilgileri ve bağımlılıklar için kullanılır. Diğer proje sistemlerinde kullanıldığında, bu üç şey ayrı dosyalara ayrılır ve project.json daha az bilgi içerir. Önemli farklar şunlardır:

  • frameworks bölümünde yalnızca bir çerçeve olabilir.

  • Dosya, DNX project.json dosyalarında gördüğünüz bağımlılıkları, derleme seçeneklerini vb. içeremez. Yalnızca tek bir çerçeve olabileceği düşünüldüğünde, çerçeveye özgü bağımlılıkları girmek mantıklı değildir.

  • Derleme MSBuild tarafından işlenir, bu nedenle derleme seçenekleri, önişlemci tanımları vb. hepsi MSBuild proje dosyasının bir parçasıdır ve project.jsondeğildir.

Visual Studio'daki Paket Yöneticisi kullanıcı arabirimi içeriği işlediğinden, NuGet 3+ uygulamasında geliştiricilerin project.jsonel ile düzenlemesi beklenmemektedir. Bununla birlikte, dosyayı kesinlikle düzenleyebilirsiniz, ancak bir paket geri yükleme başlatmak veya geri yüklemeyi başka bir şekilde çağırmak için projeyi oluşturmanız gerekir. Bkz. paket geri yükleme .

project.lock.json

project.lock.json dosyası, project.jsonkullanan projelerde NuGet paketlerini geri yükleme işleminde oluşturulur. NuGet paketlerin grafiğinde ilerledikçe oluşturulan tüm bilgilerin anlık görüntüsünü tutar ve projenizdeki tüm paketlerin sürümünü, içeriğini ve bağımlılıklarını içerir. Derleme sistemi, projenin kendisindeki yerel paketler klasörüne bağlı olarak değil, projeyi oluştururken uygun olan genel bir konumdan paketleri seçmek için bunu kullanır. Bu, çok sayıda ayrı .nuspec dosyası yerine yalnızca project.lock.json okunması gerektiğinden daha hızlı derleme performansına neden olur.

project.lock.json paket geri yüklemesinde otomatik olarak oluşturulur, bu nedenle .gitignore ve .tfignore dosyalarına eklenerek kaynak denetiminden atlanabilir (bkz. Paketler ve kaynak denetimi. Bununla birlikte, kaynak denetimine eklerseniz, değişiklik geçmişi zaman içinde çözülen bağımlılıklardaki değişiklikleri gösterir.