分析相依性以將程式碼從 .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 套件資料夾的最簡單方式。 安裝後,您可以使用下列步驟來查看資料夾名稱:
- 開啟 NuGet 套件總管。
- 按一下 [Open package from online feed] (從線上摘要開啟套件)。
- 搜尋封裝的名稱。
- 從搜尋結果選取套件名稱,然後按一下 [開啟]。
- 展開右邊的 lib 資料夾,並查看資料夾名稱。
請使用下列其中一種模式尋找具有名稱的資料夾:netstandardX.Y
、netX.Y
或 netcoreappX.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 Upgrade Assistant 工具來判斷該相依性的可移植性。