分析相依性以將程式碼從 .NET Framework 移植到 .NET

若要識別專案中不支援的第三方相依性,您必須先了解您的相依性。 外部相依性是您在專案中參考的 NuGet 套件或 .dll 檔案,但您不會自行建置。

將您的程式碼移植到 .NET Standard 2.0 或更舊版本,可確保其可與 .NET Framework 和 .NET 搭配使用。 不過,如果您不需要搭配 .NET Framework 使用程式庫,請考慮以最新 .NET 版本為目標。

將 NuGet 套件移轉至 PackageReference

.NET 無法針對 NuGet 參考使用 packages.config 檔案。 .NET 和 .NET Framework 都可以使用 PackageReference 來指定套件相依性。 如果您使用 packages.config 在專案中指定套件,請將其轉換成 PackageReference 格式。

若要了解移轉的方法,請參閱 從 packages.config 移轉至 PackageReference 一文。

升級 NuGet 套件

將專案移轉至 PackageReference 格式之後,請確認您的套件是否與 .NET 相容。

首先,請將套件升級至所能升級的最新版本。 這可以使用 Visual Studio 中的 NuGet 套件管理員 UI 來完成。 較新版本的套件相依性可能已經與 .NET Core 相容。

分析套件相依性

如果尚未確認已轉換和升級的套件相依性是否可在 .NET Core 上運作,有兩種方法可以達到此目的:

使用 nuget.org

您可以在 nuget.org 上,於套件頁面的 [Dependencies] 區段下,查看每個套件支援的目標 Framework Moniker (TFM)。

雖然使用網站是確認相容性的較簡單方法,但網站上不會提供所有套件的相依性資訊。

使用 NuGet 套件總管

NuGet 套件本身是一組包含平台特定組件的資料夾。 請檢查套件中是否有包含相容組件的資料夾。

使用 NuGet Package Explorer 工具是檢查 NuGet 套件資料夾的最簡單方式。 安裝後,您可以使用下列步驟來查看資料夾名稱:

  1. 開啟 NuGet 套件總管。
  2. 按一下 [Open package from online feed] (從線上摘要開啟套件)
  3. 搜尋封裝的名稱。
  4. 從搜尋結果選取套件名稱,然後按一下 [開啟]
  5. 展開右邊的 lib 資料夾,並查看資料夾名稱。

請使用下列其中一種模式尋找具有名稱的資料夾:netstandardX.YnetX.YnetcoreappX.Y

這些值是對應至 .NET Standard、.NET 和 .NET Core 版本的 目標 Framework Moniker (TFM),且這些版本都與 .NET 相容。

重要

查看套件支援的 TFM 時,請注意,netstandard* 以外的 TFM 會以特定 .NET 實作為目標,例如 .NET 5、.NET Core 或 .NET Framework。 從 .NET 5 開始,net* TFM (無作業系統指定) 實際上會將 netstandard* 取代為可移植目標。 例如,net5.0 以 .NET 5 API 介面為目標,且可跨平台使用;但 net5.0-windows 會以 Windows 作業系統上實作的 .NET 5 API 介面為目標。

.NET Framework 相容性模式

分析 NuGet 套件之後,您可能會發現這些套件只會以 .NET Framework 為目標。

從 .NET Standard 2.0 開始,引進了 .NET Framework 相容性模式。 此相容性模式可讓 .NET Standard 和 .NET Core 專案參考 .NET Framework 程式庫。 並非所有專案都適合參考 .NET Framework 程式庫 (例如,如果程式庫使用 Windows Presentation Foundation (WPF) API),但它確實會解決許多移植案例。

當您在專案中參考以 .NET Framework 為目標的 NuGet 套件時 (例如 Huitian.PowerCollections),您會收到類似下列範例的套件後援警告 (NU1701):

NU1701: Package ‘Huitian.PowerCollections 1.0.0’ was restored using ‘.NETFramework,Version=v4.6.1’ instead of the project target framework ‘.NETStandard,Version=v2.0’. This package may not be fully compatible with your project.

當您新增套件及每次建置時,都會顯示該警告,以確定您會隨專案測試該套件。 如果您的專案正常運作,則您可在 Visual Studio 中編輯套件屬性,或在慣用的程式碼編輯器中以手動方式編輯專案檔,以隱藏該警告。

若要透過編輯專案檔來隱藏警告,請尋找您要隱藏警告之套件的 PackageReference 項目,然後新增 NoWarn 屬性。 NoWarn 屬性接受所有警告識別碼的逗號分隔清單。 下列範例示範如何透過手動編輯專案檔,來隱藏 Huitian.PowerCollections 套件的 NU1701 警告:

<ItemGroup>
  <PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" />
</ItemGroup>

如需如何在 Visual Studio 中隱藏編譯器警告的詳細資訊,請參閱隱藏 NuGet 套件的警告

如果 NuGet 套件無法在 .NET 上執行

如果您依賴的 NuGet 套件在 .NET Core 上不執行,您可以做幾件事:

  • 如果專案是開放原始碼並裝載在 GitHub 等位置,您可以直接連絡開發人員。
  • 您可以在 nuget.org 上直接連絡作者。搜尋套件,然後按一下套件頁面左邊的 [Contact Owners] (連絡擁有者)
  • 您可以搜尋在 .NET Core 上執行並與您所用套件達成相同工作的其他套件。
  • 您可以嘗試自行撰寫封裝執行工作的程式碼。
  • 您可以變更應用程式的功能,消除封裝的相依性,至少等到有可用的相容版本封裝。

請記住,開放原始碼專案維護者和 NuGet 套件發行者通常是志工。 他們因關心特定領域而參與並免費提供服務,而且通常會有不同的日間工作。 連絡他們以取得 .NET Core 支援時請留意。

如果上述任何選項都無法解決您的問題,則稍後可能必須移植到 .NET Core。

.NET 小組希望知道哪些程式庫最重要,是 .NET Core 要支援的對象。 您可以傳送電子郵件至 dotnet@microsoft.com 討論您想使用的程式庫。

分析非 NuGet 相依性

您可能有不是 NuGet 套件的相依性,例如檔案系統中的 DLL。 您可以使用 .NET 升級小幫手二進位分析功能,判斷相依性的可移植性。

下一步