Ostrzeżenie narzędzia NuGet NU5128

Scenariusz 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

Problem

Katalog lib/<tfm>/ lub ref/<tfm>/ w pakiecie zawiera co najmniej jeden plik dla programu Target Framework Moniker (TFM) określonego w komunikacie ostrzegawczym. Jednak w pliku nie istnieje żadna grupa zależności dla tego serwera TFM nuspec . Może to spowodować, że użytkownicy pakietów uważają, że pakiet nie jest zgodny z programem TFM, nawet jeśli pakiet nie ma zależności. Jeśli pakiet ma niezdecydowane zależności, projekt korzystający z pakietu napotka błędy środowiska uruchomieniowego.

Rozwiązanie

  • Uruchamianie elementu docelowego pakietu NuGet w projekcie

Jeśli to możliwe, użyj docelowego pakietu MSBuild pakietu NuGet, ponieważ automatycznie pasuje do zestawów TFM z grupami zależności z platform docelowych projektu. Należy pamiętać, że projekt musi być używany PackageReference dla własnych zależności NuGet. Jeśli projekt używa pliku packages.config, musisz użyć pliku i go nuspec użyćnuget.exe pack.

  • Ręcznie edytowany nuspec plik

Jeśli używasz pliku niestandardowego nuspec , zalecamy, aby każdy serwer TFM, dla którego lib/ istnieją zestawy, ref/ powinien mieć pasującą grupę zależności, nawet jeśli zależności są takie same jak następny zgodny program TFM. Jeśli na przykład pakiet zawiera netstandard1.0 i netstandard2.0 zestawy, a zależności są takie same dla obu, zalecamy, aby oba moduły TFM zostały wymienione jako grupy zależności z zduplikowanymi elementami zależności.

Należy pamiętać, że identyfikator TFM używany w ścieżkach zestawów używa innego formatu do identyfikatora TFM używanego w grupach zależności. Komunikat ostrzegawczy określa poprawną nazwę do użycia w grupie zależności. Jeśli pakiet nie ma żadnych zależności dla tej platformy docelowej, użyj pustej grupy. Na przykład:

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • lib/ Usuwanie plików lub ref/

Jeśli nie chcesz, aby pakiet był zgodny z zgłoszonym programem TFM, zmodyfikuj projekt tak, aby żaden lib/<tfm>/ plik lub ref/<tfm>/ pliki nie były w pakiecie dla tego programu TFM. Jeśli na przykład ostrzeżenie informuje o dodaniu grupy .NETFramework4.7.2 zależności do nuspecelementu , usuń wszystkie lib/net472/* pliki i ref/net472/* z pakietu.

Scenariusz 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

Problem

Plik nuspec ma grupę zależności dla zgłoszonego programu Target Framework Moniker (TFM), ale nie istnieją żadne zestawy dla tego programu TFM w programie lib/ lub ref/. Jeśli istnieją zestawy zgodnego programu TFM, pakiet będzie nadal instalowany, ale zależności mogą być niepoprawne dla zestawów używanych w czasie kompilacji i może spowodować niepowodzenie projektu w czasie wykonywania.

Rozwiązanie

  • Uruchamianie elementu docelowego pakietu NuGet w projekcie

Jeśli to możliwe, użyj docelowego pakietu MSBuild pakietu NuGet, ponieważ automatycznie pasuje do zestawów TFM z grupami zależności z platform docelowych projektu. Należy pamiętać, że projekt musi być używany PackageReference dla własnych zależności NuGet. Jeśli projekt używa pliku packages.config, musisz użyć pliku i go nuspec użyćnuget.exe pack.

  • Ręczne edytowanie nuspec pliku

Dodaj zgłoszony program TFM jako dodatkową platformę docelową, dla której kompiluje się projekt, i dodaj zestawy do pakietu. Jeśli używasz projektu stylu zestawu SDK do wielu docelowych wielu serwerów TFM, obiekty docelowe pakietu MSBuild nuGet mogą automatycznie dodawać zestawy w poprawnym lib/<tfm>/ folderze i tworzyć grupy zależności z odpowiednimi serwerami TFM i zależnościami. Jeśli używasz projektu w stylu innego niż zestaw SDK, prawdopodobnie musisz utworzyć dodatkowy plik projektu dla dodatkowego programu TFM i zmodyfikować nuspec plik, aby skopiować zestawy wyjściowe w odpowiedniej lokalizacji w pakiecie.

  • Dodawanie pustego _._ pliku

Jeśli pakiet nie zawiera żadnych zestawów, takich jak meta-pakiet, rozważ dodanie pustego _._ pliku do lib/<tfm>/ katalogów dla serwerów TFM wymienionych w komunikacie ostrzegawczym. Jeśli na przykład ostrzeżenie informuje o dodaniu zestawów dla netstandard2.0 platformy docelowej, utwórz pusty lib/netstandard2.0/_._ plik w pakiecie.

  • Usuwanie grupy zależności

Jeśli używasz pliku niestandardowego nuspec , usuń grupę zależności dla zgłoszonego programu TFM, pozostawiając tylko grupy zależności dla programu TFM, dla których lib/<tfm>/ istnieją pliki lub ref/<tfm>/ .

  • Usuń wszystkie zależności dla pakietów, które nie są powiązane z zestawami

Jeśli pakiet nie zawiera żadnych lib/ plików lub ref/ nie jest pakietem metadanym, prawdopodobnie nie ma żadnych zależności, których potrzebuje odbiorca pakietu. Jeśli pakujesz element docelowy pakietu MSBuild Pack nuGet, możesz ustawić <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking> go w dowolnym PropertyGroup pliku projektu. Jeśli używasz pliku niestandardowego nuspec , usuń <dependencies> element .

  • Inne scenariusze

To ostrzeżenie zostało dodane podczas opracowywania pakietu NuGet 5.3 i po raz pierwszy było dostępne w zestawie .NET Core SDK 3.0 (wersja zapoznawcza 9). Narzędzie NuGet/Home#8583 śledzi problem polegający na tym, że ostrzeżenie zostało zgłoszone w zbyt wielu scenariuszach. Możesz użyć NoWarn właściwości MSBuild (dodaj <NoWarn>$(NoWarn);NU5128</NoWarn> do dowolnego PropertyGroup elementu w pliku projektu). Jeśli masz wpływ na wiele projektów, możesz użyć Directory.Build.targets polecenia , aby automatycznie dodać NoWarn do wszystkich projektów.