我有一个针对.NET Framework 4.7.2的Windows Forms应用程序。由于.NET Core 3.0支持Windows窗体,因此我想尝试一下。有什么方法可以将VS2019项目从.NET Framework转换为.NET Core,或者唯一可行的方法是创建一个新的.NET Core项目并从旧项目添加文件?
我只问有关VS项目迁移的问题,不是问任何潜在的不兼容问题。
答案 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 核心的表单编辑器。