如何在Visual Studio 2019中将.NET Framework 4.7.2项目迁移到.NET Core 3.0

时间:2019-09-23 18:12:41

标签: .net visual-studio .net-core visual-studio-2019

我有一个针对.NET Framework 4.7.2的Windows Forms应用程序。由于.NET Core 3.0支持Windows窗体,因此我想尝试一下。有什么方法可以将VS2019项目从.NET Framework转换为.NET Core,或者唯一可行的方法是创建一个新的.NET Core项目并从旧项目添加文件?

我只问有关VS项目迁移的问题,不是问任何潜在的不兼容问题。

4 个答案:

答案 0 :(得分:2)

[EDIT]已发布官方工具:try-convert

查看releases以获得最新版本。

在官方工具发布之前,这里是一些替代Migration-von-NET-Framework-zu-NET-Core-per-PowerShell的家伙的链接

答案 1 :(得分:1)

Microsoft 发布了一个新的 Upgrade Assistant 工具,可以将您的 .NET Framework 项目迁移到 .NET 5。迁移后,您可以将 csproj 文件中的 TargetFramework 更改为您想要的任何 .NET 版本。

我运行了以下命令来安装该工具:

dotnet tool install -g try-convert
dotnet tool install -g upgrade-assistant

然后使用它:

upgrade-assistant .\MyProject.csproj

答案 2 :(得分:0)

请按照以下步骤操作:

使用便携性分析仪

按照以下说明运行可移植性分析器。

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 Portability Analyzer,以确定您的应用程序所依赖的.NET Core中是否缺少任何API。如果存在,则需要重构代码以避免依赖于.NET Core不支持的API。有时可能会找到提供所需功能的替代API。

迁移

1。将 packages.config 替换为 PackageReference 。如果您的项目使用NuGet软件包,则您   需要将相同的NuGet包添加到新的.NET Core项目。 .NET Core项目   仅支持PackageReference以添加NuGet软件包。移动您的NuGet参考   从packages.config到您的项目文件,在解决方案资源管理器中右键单击   packages.config-> 将packages.config迁移到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文件查找该项目引用。例如:

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

答案 3 :(得分:0)

也许在某些情况下,残酷的强制迁移(在 OP 中提到)确实是最简单的,尤其是当存在工具无法自动处理的 3rd 方库时。

我的 Winforms(.NET 4.6.2 和 VS2019)示例:

(1) 创建新的 VS2019 .net core 3.0 WinForm 项目。

(2) 将除 .csproj 和 .csproj.user 之外的所有文件从旧项目复制并覆盖到新项目文件夹。

(3) VS2019 以某种方式自动将所有复制的文件添加到新项目中(在这种情况下,需要手动删除旧项目中未包含的某些文件)。如果没有,请将它们添加到项目中。

(4) 根据新项目中的错误,添加缺失的引用。

(5) 部分代码需要手动修改如MySql.Data.MySqlClient -> MySqlConnector。

(6) 升级到 VS2019 16.8 以支持具有 .NET 核心的表单编辑器。