Aracılığıyla paylaş


NuGet Uyarısı NU5128

1. Senaryo

nuspec ve lib/ref klasörünün bağımlılıklar grubunda bildirilen bazı hedef çerçevelerin diğer konumda tam eşleşmeleri yoktur. Aşağıdaki eylemlerin listesine bakın:

  • için bir bağımlılık grubu ekleyin. NETStandard2.0 ile nuspec

Sorun

lib/<tfm>/ Paketteki veya ref/<tfm>/ dizini, uyarı iletisinde belirtilen Hedef Çerçeve Takma Adı (TFM) için en az bir dosya içerir. Ancak, dosyada nuspec bu TFM için hiçbir bağımlılık grubu yok. Bu, paket bağımlılıkları olmasa bile paket tüketicilerinin paketin TFM ile uyumlu olmadığına inanmasına neden olabilir. Paketin bildirilmemiş bağımlılıkları varsa, paketi kullanan proje çalışma zamanı hatalarıyla karşılaşır.

Çözüm

  • Projede NuGet'in paket hedefini çalıştırma

Mümkünse, projenin hedef çerçevelerindeki bağımlılık gruplarıyla derleme TFM'lerini otomatik olarak eşlediğinden NuGet'in MSBuild paketi hedefini kullanın. Projenizin kendi NuGet bağımlılıkları için kullanması PackageReference gerektiğini unutmayın. Projeniz packages.config kullanıyorsa ve dosyası nuspec kullanmanız nuget.exe pack gerekir.

  • El ile düzenlenen nuspec dosya

Özel nuspec bir dosya kullanıyorsanız, bağımlılıklar sonraki uyumlu TFM ile aynı olsa bile, var olan lib/ veya ref/ derlemelerin bulunduğu her TFM'nin eşleşen bir bağımlılık grubuna sahip olması önerilir. Örneğin, bir paket ve derlemeleri içeriyorsa netstandard1.0 netstandard2.0 ve bağımlılıklar her ikisi için de aynıysa, her iki TFM'nin de yinelenen bağımlılık öğeleri olan bağımlılık grupları olarak listelenmelerini öneririz.

Derleme yollarında kullanılan TFM tanımlayıcısının bağımlılık gruplarında kullanılan TFM tanımlayıcısına göre farklı bir biçim kullandığını unutmayın. Uyarı iletisi, bağımlılık grubunda kullanılacak doğru adı belirtir. Paketinizin bu hedef çerçeve için herhangi bir bağımlılığı yoksa boş bir grup kullanın. Örneğin:

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • lib/ veya ref/ dosyalarını kaldırma

Paketinizin bildirilen TFM ile uyumlu olmasını istemiyorsanız, projenizi bu TFM için pakette hiçbir veya ref/<tfm>/ dosya bulunmayacak lib/<tfm>/ şekilde değiştirin. Örneğin, uyarı için .NETFramework4.7.2 nuspecöğesine bir bağımlılık grubu eklemeyi söylüyorsa paketinizden ve lib/net472/* ref/net472/* dosyalarını kaldırın.

2. Senaryo

nuspec ve lib/ref klasörünün bağımlılıklar grubunda bildirilen bazı hedef çerçevelerin diğer konumda tam eşleşmeleri yoktur. Aşağıdaki eylemlerin listesine bakın:

  • Netstandard2.0 hedef çerçevesi için lib veya başvuru derlemeleri ekleme

Sorun

Dosya, nuspec bildirilen Hedef Çerçeve Takma Adı (TFM) için bir bağımlılık grubuna sahiptir, ancak ya ref/da lib/ içinde bu TFM için hiçbir derleme yoktur. Uyumlu bir TFM için derlemeler varsa, paket yüklenmeye devam eder, ancak derleme zamanında kullanılan derlemeler için bağımlılıklar yanlış olabilir ve projenin çalışma zamanında başarısız olmasına neden olabilir.

Çözüm

  • Projede NuGet'in paket hedefini çalıştırma

Mümkünse, projenin hedef çerçevelerindeki bağımlılık gruplarıyla derleme TFM'lerini otomatik olarak eşlediğinden NuGet'in MSBuild paketi hedefini kullanın. Projenizin kendi NuGet bağımlılıkları için kullanması PackageReference gerektiğini unutmayın. Projeniz packages.config kullanıyorsa ve dosyası nuspec kullanmanız nuget.exe pack gerekir.

  • Dosyayı el ile düzenleme nuspec

Bildirilen TFM'yi projenizin derlendiği ek bir Hedef Çerçeve olarak ekleyin ve derlemeleri pakete ekleyin. Birden çok TFM'ye birden çok hedef oluşturmak için SDK stilinde bir proje kullanıyorsanız NuGet'in MSBuild paketi hedefleri, derlemeleri otomatik olarak doğru lib/<tfm>/ klasöre ekleyebilir ve doğru TFM'ler ve bağımlılıklarla bağımlılık grupları oluşturabilir. SDK stili olmayan bir proje kullanıyorsanız, büyük olasılıkla ek TFM için ek bir proje dosyası oluşturmanız ve dosyanızı nuspec paketteki doğru konumdaki çıkış derlemelerini kopyalayacak şekilde değiştirmeniz gerekir.

  • Boş _._ dosya ekleme

Paketiniz meta paket gibi herhangi bir derleme içermiyorsa, uyarı iletisinde listelenen TFM'lerin dizinlerine boş _._ bir dosya lib/<tfm>/ eklemeyi göz önünde bulundurun. Örneğin, uyarı hedef çerçeve için netstandard2.0 derlemeler ekle diyorsa, paketinizde boş lib/netstandard2.0/_._ bir dosya oluşturun.

  • Bağımlılık grubunu kaldırma

Özel nuspec bir dosya kullanıyorsanız, bildirilen TFM'nin bağımlılık grubunu kaldırın ve yalnızca veya ref/<tfm>/ dosyaları olan lib/<tfm>/ TFM'ler için bağımlılık gruplarını bırakın.

  • Derlemelerle ilgili olmayan paketler için tüm bağımlılıkları kaldırma

Paketiniz herhangi bir lib/ veya ref/ dosya içermiyorsa ve bir meta paket değilse, büyük olasılıkla paket tüketicisinin ihtiyaç duyduğu herhangi bir bağımlılığı yoktur. NuGet'in MSBuild Pack hedefiyle paketleniyorsanız, proje dosyanızda herhangi bir PropertyGroup şekilde ayarlayabilirsiniz<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>. Özel nuspec bir dosya kullanıyorsanız öğesini kaldırın <dependencies> .

  • Diğer senaryolar

Bu uyarı NuGet 5.3'ün geliştirilmesi sırasında eklendi ve ilk olarak .NET Core SDK 3.0 Preview 9'da kullanıma sunuldu. NuGet/Home#8583 , uyarının çok fazla senaryoda tetiklendiği bir sorunu izler. MSBuild özelliğini kullanabilirsiniz NoWarn (proje dosyanızdaki herhangi bir PropertyGroup özelliğe ekleyebilirsiniz<NoWarn>$(NoWarn);NU5128</NoWarn>). Etkilenen birden çok projeniz varsa, tüm projelere otomatik olarak eklemek NoWarn için kullanabilirsinizDirectory.Build.targets.