Dot-Net

如何在 Visual Studio 2019 中將 .NET Framework 4.7.2 項目遷移到 .NET Core 3.0

  • March 2, 2021

我有一個針對 .NET Framework 4.7.2 的 Windows 窗體應用程序。由於 .NET Core 3.0 支持 Windows 窗體,我想嘗試一下。有沒有辦法將 VS2019 項目從 .NET Framework 轉換為 .NET Core,或者唯一可能的方法是創建一個新的 .NET Core 項目並從舊項目添加文件?

我只詢問 VS 項目遷移,而不是任何潛在的不兼容問題。

$$ EDIT $$官方工具發布:try-convert 查看最新版本的發行版。

在官方工具發布之前,這裡有一些人提供了替代Migration-von-NET-Framework-zu-NET-Core-per-PowerShell 的連結

請按照以下步驟操作:

使用可移植性分析器

使用以下說明執行 Portability Analyzer。

1.執行 PortabilityAnalyzer.exe ( https://github.com/Microsoft/dotnet-apiport-ui/releases/download/1.1/PortabilityAnalyzer.zip )

2.在應用程序路徑文本框中輸入 Windows 窗體或 WPF 應用程序的目錄路徑(通過插入路徑字元串或點擊瀏覽按鈕並導航到文件夾)。

3.點擊分析按鈕。

4.分析完成後,一份關於您的應用程序現在對 .NET Core 3.0 的可移植性的報告將保存到您的光碟中。您可以通過點擊打開報告按鈕在 Excel 中打開它。

NET 可移植性分析器來確定您的應用程序所依賴的任何 API 是否從 .NET Core 中失去。如果有,您需要重構程式碼以避免依賴於 .NET Core 中不支持的 API。有時可以找到提供所需功能的替代 API。

移民

1.將**packages.config替換為PackageReference 。如果您的項目使用 NuGet 包,則需要將相同的 NuGet 包添加到新的 .NET Core 項目中。.NET Core 項目僅支持通過 PackageReference 添加 NuGet 包。要將 NuGet 引用從 packages.config 移動到項目文件,請在解決方案資源管理器中右鍵點擊 packages.config -> Migrate packages.config to PackageReference …..

2.遷移到 SDK 風格的 .csproj 文件。要將我的應用程序遷移到 .NET Core,首先我需要將項目文件更改為 SDK 樣式格式,因為舊格式不支持 .NET Core。此外,SDK 樣式的格式更精簡且更易於使用。確保您擁有目前 .csproj 文件的副本。將 .csproj 文件的內容替換為以下內容。

對於 WinForms 應用程序:

<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
   <OutputType>WinExe</OutputType>
   <TargetFramework>net472</TargetFramework>
   <UseWindowsForms>true</UseWindowsForms>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 </PropertyGroup>
</Project>

對於 WPF 應用程序

<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
   <OutputType>WinExe</OutputType>
   <TargetFramework>net472</TargetFramework>
   <UseWPF>true</UseWPF>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 </PropertyGroup>
</Project>

3.從 .NET Framework 遷移到 .NET Standard 或 .NET Core。為此,請替換此

<TargetFramework>net472</TargetFramework>

<TargetFramework>netstandard2.0</TargetFramework>

或者

<TargetFramework>netcoreapp3.0</TargetFramework>

4.在項目文件中複製舊項目中的所有外部引用,使用舊csproj文件relpace this找到proejct引用。例如:

<PackageReference Include="Newtonsoft.Json" Version="9.0.1" />

到 .csproj 文件

<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
   <OutputType>WinExe</OutputType>
   <TargetFramework>netcoreapp3.0</TargetFramework>
   <UseWPF>true</UseWPF>
   <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
 </PropertyGroup>
</Project>

<ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
</ItemGroup>

引用自:https://stackoverflow.com/questions/58067997