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