NuGet 警告 NU5128

案例 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

問題

套件lib/<tfm>/中的 或 ref/<tfm>/ 目錄包含警告訊息中指定的目標 Framework Moniker (TFM) 至少一個檔案。 不過,檔案中 nuspec 沒有此 TFM 的相依性群組。 這可能會導致套件取用者認為套件與 TFM 不相容,即使套件沒有相依性也一樣。 如果套件有未宣告的相依性,使用封裝的專案將會遇到運行時錯誤。

解決方案

  • 在專案上執行 NuGet 的套件目標

可能的話,請使用 NuGet 的 MSBuild 套件目標,因為它會自動比對來自專案目標架構之相依性群組的元件TFM。 請注意,您的項目必須 PackageReference 用於自己的 NuGet 相依性。 如果您的專案使用 packages.config,則需要使用 nuget.exe packnuspec 檔案。

  • 手動編輯 nuspec 的檔案

如果您使用自定義nuspec檔案,則即使相依性與下一個相容的 TFM 相同,還是建議存在或ref/元件的每個 TFM lib/ 都應該有相符的相依性群組。 例如,如果封裝包含 netstandard1.0netstandard2.0 元件,而且兩者的相依性都相同,則建議這兩個 TFM 都列為具有重複相依性專案的相依性群組。

請注意,元件路徑中使用的 TFM 識別符會使用與相依性群組中使用的 TFM 識別符不同的格式。 警告訊息會指定要在相依性群組中使用的正確名稱。 如果您的套件沒有該目標架構的任何相依性,請使用空的群組。 例如:

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • lib/拿掉或 ref/ 檔案

如果您不希望套件與回報的 TFM 相容,請修改您的專案,讓該 TFM 的套件中沒有 lib/<tfm>/ref/<tfm>/ 檔案。 例如,如果警告指出將的相依性群組 .NETFramework4.7.2 新增至 nuspec,則從套件中移除任何 lib/net472/*ref/net472/* 檔案。

案例 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

問題

檔案nuspec具有所報告目標 Framework Moniker (TFM) 的相依性群組,但 或 ref/lib/沒有此 TFM 的元件。 如果有相容 TFM 的元件,套件仍會安裝,但編譯時期所使用的元件相依性可能不正確,而且可能會導致專案在運行時間失敗。

解決方案

  • 在專案上執行 NuGet 的套件目標

可能的話,請使用 NuGet 的 MSBuild 套件目標,因為它會自動比對來自專案目標架構之相依性群組的元件TFM。 請注意,您的項目必須 PackageReference 用於自己的 NuGet 相依性。 如果您的專案使用 packages.config,則需要使用 nuget.exe packnuspec 檔案。

  • 手動編輯 nuspec 檔案

將回報的 TFM 新增為項目編譯的其他目標 Framework,並將元件新增至封裝。 如果您使用 SDK 樣式專案來多重目標多個 TTFM,NuGet 的 MSBuild 套件目標可以自動在正確的資料夾中新增元件,並使用正確的 lib/<tfm>/ TFM 和相依性建立相依性群組。 如果您使用非 SDK 樣式專案,您可能需要為其他 TFM 建立額外的項目檔,並修改檔案 nuspec ,以在套件的正確位置複製輸出元件。

  • 新增空白 _._ 檔案

如果您的套件未包含任何元件,例如中繼套件,請考慮將空白 _._ 檔案新增至 lib/<tfm>/ 警告訊息中所列之 TFM 的目錄。 例如,如果警告指出要新增目標架構的 netstandard2.0 元件,請在您的套件中建立空白 lib/netstandard2.0/_._ 檔案。

  • 拿掉相依性群組

如果您使用自定義nuspec檔案,請移除所報告 TFM 的相依性群組,只保留或ref/<tfm>/檔案存在的 TFM 的lib/<tfm>/相依性群組。

  • 拿掉與元件無關之套件的所有相依性

如果您的套件不包含任何 lib/ref/ 檔案,而且不是中繼套件,則套件取用者可能沒有任何相依性。 如果您使用 NuGet 的 MSBuild Pack 目標進行封裝,您可以在項目檔中的任何一個中PropertyGroup設定 <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking> 。 如果您使用自定義 nuspec 檔案,請移除 <dependencies> 專案。

  • 其他案例

此警告已在 NuGet 5.3 的開發期間新增,第一個可在 .NET Core SDK 3.0 Preview 9 中使用。 NuGet/Home#8583 會追蹤在太多案例中引發警告的問題。 您可以使用 NoWarn MSBuild 屬性(將 新增 <NoWarn>$(NoWarn);NU5128</NoWarn>PropertyGroup 項目檔中的任何專案)。 如果您有多個受影響的專案,您可以使用 Directory.Build.targets 自動新增 NoWarn 至所有專案。