Ostrzeżenie narzędzia NuGet NU5128
Scenariusz 1
Niektóre struktury docelowe zadeklarowane w grupie zależności nuspec i folder lib/ref nie mają dokładnych dopasowań w innej lokalizacji. Zapoznaj się z listą akcji poniżej:
- Dodaj grupę zależności dla elementu . NetStandard2.0 do narzędzia 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 lubref/
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 nuspec
elementu , usuń wszystkie lib/net472/*
pliki i ref/net472/*
z pakietu.
Scenariusz 2
Niektóre struktury docelowe zadeklarowane w grupie zależności nuspec i folder lib/ref nie mają dokładnych dopasowań w innej lokalizacji. Zapoznaj się z listą akcji poniżej:
- Dodawanie zestawów lib lub ref dla platformy docelowej netstandard2.0
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.