NuGet-Warnung NU5128

Szenario 1

Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below:
- Add a dependency group for .NETStandard2.0 to the nuspec

Abgang

Das lib/<tfm>/- oder ref/<tfm>/-Verzeichnis im Paket enthält mindestens eine Datei für den Target Framework Moniker (TFM), der in der Warnmeldung angegeben ist. Für diese TFM in der nuspec-Datei ist jedoch keine Abhängigkeitsgruppe vorhanden. Dies kann dazu führen, dass Paketkunden glauben, dass das Paket nicht mit dem TFM kompatibel ist, auch wenn das Paket keine Abhängigkeiten aufweist. Wenn das Paket nicht deklarierte Abhängigkeiten aufweist, treten bei dem Projekt, das das Paket verwendet, Laufzeitfehler auf.

Lösung

  • Ausführen des NuGet-Paketziels für das Projekt

Wenn möglich, verwenden Sie das MSBuild-Paketziel von NuGet, da es automatisch Assembly-TFMs mit Abhängigkeitsgruppen aus den Zielframeworks des Projekts übereinstimmt. Beachten Sie, dass Ihr Projekt für PackageReference seine eigenen NuGet-Abhängigkeiten verwendet werden muss. Wenn Ihr Projekt packages.config verwendet, müssen Sie eine nuget.exe pack und nuspec Datei verwenden.

  • Manuell bearbeitete nuspec Datei

Wenn Sie eine benutzerdefinierte nuspec-Datei verwenden, wird empfohlen, dass jedes TFM, für das lib/ oder ref/, für welche Assemblys vorhanden sind, über eine übereinstimmende Abhängigkeitsgruppe verfügen sollte, auch wenn die Abhängigkeiten mit dem nächsten kompatiblen TFM identisch sind. Wenn ein Paket z. B. netstandard1.0- und netstandard2.0-Assemblys enthält und die Abhängigkeiten für beide identisch sind, wird empfohlen, dass beide TFMs als Abhängigkeitsgruppen mit doppelten Abhängigkeitselementen aufgeführt werden.

Beachten Sie, dass der in den Assemblypfaden verwendete TFM-Bezeichner ein anderes Format als der TFM-Bezeichner verwendet, der in Abhängigkeitsgruppen verwendet wird. Die Warnmeldung gibt den richtigen Namen an, der in der Abhängigkeitsgruppe verwendet werden soll. Wenn ihr Paket keine Abhängigkeiten für dieses Zielframework aufweist, verwenden Sie eine leere Gruppe. Zum Beispiel:

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • Entfernen Sie die lib/ oder ref/ Dateien.

Wenn Ihr Paket nicht mit dem gemeldeten TFM kompatibel sein soll, ändern Sie Das Projekt so, dass sich keine lib/<tfm>/ oder ref/<tfm>/ Dateien im Paket für dieses TFM befinden. Wenn die Warnung z. B. besagt, dass eine Abhängigkeitsgruppe für .NETFramework4.7.2 zum nuspec hinzugefügt werden soll, dann entfernen Sie alle lib/net472/* und ref/net472/* Dateien aus Ihrem Paket.

Szenario 2

Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below:
- Add lib or ref assemblies for the netstandard2.0 target framework

Abgang

Die nuspec Datei verfügt über eine Abhängigkeitsgruppe für den gemeldeten Target Framework Moniker (TFM), für diesen TFM sind jedoch weder lib/ noch ref/ Assemblys vorhanden. Wenn es Assemblys für eine kompatible TFM gibt, wird das Paket weiterhin installiert, die Abhängigkeiten sind jedoch möglicherweise für Assemblys falsch, die zur Kompilierungszeit verwendet werden, und das Projekt kann zur Laufzeit fehlschlagen.

Lösung

  • Ausführen des NuGet-Paketziels für das Projekt

Wenn möglich, verwenden Sie das MSBuild-Paketziel von NuGet, da es automatisch Assembly-TFMs mit Abhängigkeitsgruppen aus den Zielframeworks des Projekts übereinstimmt. Beachten Sie, dass Ihr Projekt für PackageReference seine eigenen NuGet-Abhängigkeiten verwendet werden muss. Wenn Ihr Projekt packages.config verwendet, müssen Sie eine nuget.exe pack und nuspecDatei verwenden.

  • Manuelles Bearbeiten der nuspec-Datei

Fügen Sie das gemeldete TFM als zusätzliches Zielframework hinzu, für das Ihr Projekt kompiliert wird, und fügen Sie die Assemblys zum Paket hinzu. Wenn Sie ein SDK-Formatprojekt für mehrere TFMs verwenden, können die MSBuild-Packziele von NuGet automatisch Assemblys im richtigen lib/<tfm>/ Ordner hinzufügen und Abhängigkeitsgruppen mit den richtigen TFMs und Abhängigkeiten erstellen. Wenn Sie ein Projekt im Nicht-SDK-Stil verwenden, müssen Sie wahrscheinlich eine zusätzliche Projektdatei für die zusätzliche TFM erstellen und die nuspec Datei ändern, um die Ausgabeassemblys am richtigen Speicherort im Paket zu kopieren.

  • Hinzufügen einer leeren _._ Datei.

Wenn Ihr Paket keine Assemblys enthält, z. B. ein Metapaket, sollten Sie in Betracht ziehen, den _._ Verzeichnissen für die in der Warnmeldung aufgeführten TFMs eine leere lib/<tfm>/ Datei hinzuzufügen. Wenn die Warnung beispielsweise besagt, dass Assemblys für das netstandard2.0 Zielframework hinzugefügt werden, erstellen Sie eine leere lib/netstandard2.0/_._ Datei in Ihrem Paket.

  • Entfernen der Abhängigkeitsgruppe

Wenn Sie eine benutzerdefinierte nuspec Datei verwenden, entfernen Sie die Abhängigkeitsgruppe für das gemeldete TFM, sodass nur Abhängigkeitsgruppen für TFMs übrig bleiben, für die lib/<tfm>/ bzw ref/<tfm>/ Dateien vorhanden sind.

  • Entfernen aller Abhängigkeiten für Pakete, die nicht mit Assemblys zusammenhängen

Wenn Ihr Paket keine lib/ oder ref/ Dateien enthält und kein Metapaket ist, verfügt es wahrscheinlich nicht über Abhängigkeiten, die der Paketanwender benötigt. Wenn Sie das MSBuild Paket-Ziel von NuGet packen, können Sie <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking> in einer beliebigen PropertyGroup Projektdatei festlegen. Wenn Sie eine benutzerdefinierte nuspec Datei verwenden, entfernen Sie das <dependencies> Element.

  • Andere Szenarien

Diese Warnung wurde während der Entwicklung von NuGet 5.3 hinzugefügt und war zuerst in .NET Core SDK 3.0 Vorschau 9 verfügbar. NuGet/Home#8583 verfolgt ein Problem, bei dem die Warnung in zu vielen Szenarien ausgelöst wurde. Sie können die NoWarn MSBuild-Eigenschaft verwenden (Sie können <NoWarn>$(NoWarn);NU5128</NoWarn> zu PropertyGroup in einer beliebigen Projektdatei hinzufügen). Wenn mehrere Projekte betroffen sind, können Sie Directory.Build.targets nutzen, um NoWarn allen Projekten automatisch hinzufügen.