Sdílet prostřednictvím


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ů nebo ref/ 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 nuspecpř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ů.