Upozornění NuGet NU5128
Scénář 1
Některé cílové architektury deklarované ve skupině závislostí nuspec a složka lib/ref nemají přesné shody v jiném umístění. Projděte si následující seznam akcí:
- Přidejte skupinu závislostí pro . NETStandard2.0 na nuspec
Problém
Soubor lib/<tfm>/
nebo ref/<tfm>/
adresář v balíčku obsahuje alespoň jeden soubor pro moniker cílové architektury (TFM) zadaný v upozornění zprávy. Pro tento TFM v nuspec
souboru však neexistuje žádná skupina závislostí. To může způsobit, že příjemci balíčků si myslí, že balíček není kompatibilní s TFM, i když balíček nemá závislosti. Pokud má balíček nedelarované závislosti, projekt, který balíček používá, dojde k chybám za běhu.
Řešení
- Spuštění cíle balíčku NuGet v projektu
Pokud je to možné, použijte cíl balíčku MSBuild NuGet, protože automaticky odpovídá sestavení TFM se skupinami závislostí z cílových architektur projektu. Mějte na paměti, že váš projekt musí používat PackageReference
pro vlastní závislosti NuGet. Pokud váš projekt používá packages.config, musíte použít nuget.exe pack
a nuspec
soubor.
- Ručně upravený
nuspec
soubor
Pokud používáte vlastní nuspec
soubor, doporučujeme, aby každý TFM, pro který lib/
nebo ref/
sestavení existuje, měl mít odpovídající skupinu závislostí, i když jsou závislosti stejné jako další kompatibilní TFM. Pokud například balíček obsahuje netstandard1.0
a netstandard2.0
sestavení a závislosti jsou pro oba stejné, doporučujeme, aby oba tfmy byly uvedeny jako skupiny závislostí s duplicitními položkami závislostí.
Všimněte si, že identifikátor TFM použitý v cestách sestavení používá jiný formát než identifikátor TFM použitý ve skupinách závislostí. Zpráva upozornění určuje správný název, který se má použít ve skupině závislostí. Pokud balíček nemá žádné závislosti pro tuto cílovou architekturu, použijte prázdnou skupinu. Příklad:
<package>
<metadata>
...
<dependencies>
<group targetFramework=".NETFramework4.7.2" />
</dependencies>
</metadata>
...
</package>
lib/
Odebrání souborů neboref/
souborů
Pokud nechcete, aby byl váš balíček kompatibilní s ohlášeným TFM, upravte projekt tak, aby nebyl v balíčku pro daný TFM žádný lib/<tfm>/
soubor nebo ref/<tfm>/
soubory. Pokud se například v upozornění zobrazí zpráva, že chcete do balíčku nuspec
přidat skupinu .NETFramework4.7.2
závislostí, odeberte z balíčku všechny lib/net472/*
soubory a ref/net472/*
soubory.
Scénář 2
Některé cílové architektury deklarované ve skupině závislostí nuspec a složka lib/ref nemají přesné shody v jiném umístění. Projděte si následující seznam akcí:
- Přidání sestavení lib nebo ref pro cílovou architekturu netstandard2.0
Problém
Soubor nuspec
obsahuje skupinu závislostí pro hlášený cílový framework Moniker (TFM), ale neexistují žádná sestavení pro tento TFM v ani lib/
ref/
. Pokud existují sestavení pro kompatibilní TFM, balíček se stále nainstaluje, ale závislosti můžou být nesprávné pro sestavení použitá v době kompilace a můžou způsobit selhání projektu za běhu.
Řešení
- Spuštění cíle balíčku NuGet v projektu
Pokud je to možné, použijte cíl balíčku MSBuild NuGet, protože automaticky odpovídá sestavení TFM se skupinami závislostí z cílových architektur projektu. Mějte na paměti, že váš projekt musí používat PackageReference
pro vlastní závislosti NuGet. Pokud váš projekt používá packages.config, musíte použít nuget.exe pack
a nuspec
soubor.
- Ruční úprava
nuspec
souboru
Přidejte ohlášený TFM jako další cílovou architekturu, pro kterou se projekt zkompiluje, a přidejte sestavení do balíčku. Pokud používáte projekt stylu sady SDK pro více cílových více TFM, cíle balíčku MSBuild nuGet mohou automaticky přidávat sestavení do správné lib/<tfm>/
složky a vytvářet skupiny závislostí se správnými TFM a závislostmi. Pokud používáte projekt bez sady SDK, budete pravděpodobně muset vytvořit další soubor projektu pro další TFM a upravit soubor nuspec
tak, aby zkopíroval výstupní sestavení ve správném umístění balíčku.
- Přidání prázdného
_._
souboru
Pokud balíček neobsahuje žádná sestavení, například metabalíč, zvažte přidání prázdného _._
souboru do lib/<tfm>/
adresářů pro TFM uvedené v upozornění zprávy. Pokud například upozornění říká, že se mají přidat sestavení pro cílovou architekturu netstandard2.0
, vytvořte v balíčku prázdný lib/netstandard2.0/_._
soubor.
- Odebrání skupiny závislostí
Pokud používáte vlastní nuspec
soubor, odeberte skupinu závislostí pro ohlášený TFM a ponechte pouze skupiny závislostí pro TFM, pro které lib/<tfm>/
nebo ref/<tfm>/
soubory existují.
- Odebrání všech závislostí pro balíčky, které nesouvisí se sestaveními
Pokud balíček neobsahuje žádné lib/
soubory ani ref/
soubory a nejedná se o metabal, pravděpodobně neobsahuje žádné závislosti, které příjemce balíčku potřebuje. Pokud balíte s cílem sady MSBuild Pack nuGet, můžete v libovolném PropertyGroup
souboru projektu nastavit<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
. Pokud používáte vlastní nuspec
soubor, odeberte <dependencies>
element.
- Další scénáře
Toto upozornění bylo přidáno během vývoje NuGetu 5.3 a první bylo k dispozici v sadě .NET Core SDK 3.0 Preview 9. NuGet/Home#8583 sleduje problém, kdy se upozornění vyvolalo v příliš mnoha scénářích. Můžete použít NoWarn
vlastnost MSBuild (přidat <NoWarn>$(NoWarn);NU5128</NoWarn>
do libovolného PropertyGroup
souboru projektu). Pokud máte ovlivněných více projektů, můžete ho použít Directory.Build.targets
k automatickému přidání NoWarn
do všech projektů.