我有一个针对.NET Framework 4.7.2的Windows Forms应用程序。由于.NET Core 3.0支持Windows表单,我想尝试一下。有没有办法将VS2019项目从.NET Framework转换为.NET Core,或者唯一可能的方法是创建一个新的.NET Core项目并从旧项目添加文件?
我只问VS项目迁移,而不是任何潜在的不兼容问题。
[编辑] 官方工具发布:尝试转换
查看最新版本的版本。
在官方工具发布之前,这里是某个人的链接,他们做了替代的迁移-von-NET-Framework-zu-NET-Core-per-PowerShell
请按照以下步骤操作:
使用可移植性分析器
使用以下说明运行可移植性分析器。
1.运行可移植性分析器.exe (https://github.com/Microsoft/dotnet-apiport-ui/releases/download/1.1/PortabilityAnalyzer.zip(
2.In"应用程序路径"文本框中,输入 Windows 窗体的目录路径或 WPF 应用(通过插入路径字符串或单击"浏览"按钮并导航 到文件夹(。
3.单击分析按钮。
4.分析完成后,报告您的应用程序现在如何移植到 .NET Core 3.0将保存到您的光盘中。您可以通过单击"打开报表"在 Excel 中打开它 按钮。
NET可移植性分析器,用于确定应用程序所依赖的任何 API 是否缺少 .NET Core 中缺少的 API。如果有,则需要重构代码以避免依赖 .NET Core 不支持的 API。有时可以找到提供所需功能的替代 API。
迁移
1.将packages.config替换为PackageReference。如果项目使用 NuGet 包,则 需要将相同的 NuGet 包添加到新的 .NET Core 项目。.NET Core 项目 仅支持用于添加 NuGet 包的包引用。移动 NuGet 引用 从 packages.config 到项目文件,在解决方案资源管理器中右键单击 packages.config ->将 packages.config 迁移到 PackageReference.....
2.迁移到开发工具包样式的 .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.In 项目文件复制旧项目中的所有外部引用,请使用旧的 csproj 文件查找与此相关的 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>
Microsoft发布了一个新的升级助手工具,该工具将.NET Framework项目迁移到.NET 5。迁移后,您可以将 csproj 文件中的 TargetFramework 更改为所需的任何 .NET 版本。
我运行以下命令来安装该工具:
dotnet tool install -g try-convert
dotnet tool install -g upgrade-assistant
然后使用它:
upgrade-assistant .MyProject.csproj
也许在某些情况下,残酷的强制迁移(在OP中提到(确实是最简单的,特别是当存在无法由工具自动处理的第三方库时。
My Winforms(.NET 4.6.2 with 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核心的表单编辑器。