共用方式為


NuGet 警告 NU5128

案例 1

nuspec 和 lib/ref 資料夾相依性群組中宣告的一些目標架構在其他位置沒有完全相符專案。 請參閱下列動作清單:

  • 新增的相依性群組。NETStandard2.0 至 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

nuspec 和 lib/ref 資料夾相依性群組中宣告的一些目標架構在其他位置沒有完全相符專案。 請參閱下列動作清單:

  • 為 netstandard2.0 目標架構新增 lib 或 ref 元件

問題

檔案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 至所有專案。