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/
veyaref/
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
.