介绍
由于历史原因, 基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序, 如果将这些程序全部基于 DotNetCore 3.0 重写一遍显然是不现实的, 但是 DotNetCore 是未来发展的趋势. 所以本文通过以 WPF 为例, 介绍一下如何将传统 WPF 迁移到 DotNetCore 3.0 上.
环境
我在之前的一篇文章 DotNetCore 3.0 助力 WPF 开发 有提到过, 如果想开发基于 DotNetCore 3.0 的 WPF 程序, 我们需要安装 Visual Studio 2019 和 DotNetCore 3.0 SDK, 这两个条件是必须具备的. 同样的, 我们做框架迁移, 这两个条件同样也是必须的.
注: 为了不必要的麻烦, 建议使用 Visual Studio 2019 来进行迁移工作.
实验
首先, 我们通过 Visual Studio 2019 创建一个传统的基于 .NetFramework 的 WPF 程序. 如下图所示:
项目创建完成之后, 你会发现还是那个属性的味道, 没有什么变化. 尝试编译运行, 也是没什么问题.
更新 NuGet
在做迁移之前, 我们需要确认一下我们的项目是否引用了 NuGet 上的一些包, 如果引用了, 请务必更新至最新版本. 虽然这不是必须的, 但是却是有必要的, 避免在迁移过程中出现一些未知错误.
这里, 我引用一下 Newtonsoft.JSON 作为示例. 在 MainWindow.xaml.cs 中尝试使用
- public partial class MainWindow : Windows
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- protected override void OnContentRendered(EventArgs e)
- {
- var user = new User { Name = "hippieZhou", Eamil = "hippiezhou@outlook.com" };
- var JSON = Newtonsoft.JSON.JsonConvert.SerializeObject(user);
- Trace.WriteLine(JSON);
- base.OnContentRendered(e);
- }
- }
- public class User
- {
- public string Name { get; set; }
- public string Eamil { get; set; }
- }
编译运行程序, 可以正常编译运行和执行. 控制台也输出了 User 对象也能正确序列化.
使用 Portability Analyzer
.NET Portability Analyzer 工具是用于检测我们当前的 WPF 程序中使用的所有 API 是否支持迁移到 DotNetCore 3.0 上. 运行该工具后如下图所示:
点击 Browser 按钮, 将我们的项目目录加载进来, 之后点击 Analyze, 等分享完成之后, 点击 Open Report 即可查看检测结果, 如下图所示:
从上图中, 我们可以看到, 我们的程序当前的框架为 .NetFramework 4.7.2, 当前使用的程序集 在 DotNetCore 3.0 受支持率为 100%, 这就表明我们的程序可以无缝迁移到 DotNetCore 上了.
迁移 packages.config
如果我们的程序引用了 NuGet 上的包, 那么 VS 会为我们创建一个 packages.config, 这个文件在 DotNetCore 中不受支持, 所以我们需要将它修改为受支持的类型.
鼠标右键它, 然后点击 Migrate packages.config to PackageReference 即可, 如下图所示:
迁移 XXX.csproj
这里, 我们修改我们示例程序中的 WpfApp1.csproj, 在传统的 .csproj 中会有一大堆配置, 这些配置方式在 DotNetCore 中同样不适用了. 因此, 我们需要将我们的内容修改一下, 如下所示:
- <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
- <PropertyGroup>
- <OutputType>WinExe</OutputType>
- <TargetFramework>netcoreapp3.0</TargetFramework>
- <UseWPF>true</UseWPF>
- </PropertyGroup>
- <ItemGroup>
- <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
- </ItemGroup>
- </Project>
重新加载项目后, 会如下图所示:
接着, 我们需要删除掉项目中的 Properties, 操作完毕后尝试重新编译运行, 如果不出意外的话, 应该是可以正常执行的.
最后, 我们可以对比一下这种迁移后的项目结构和直接通过 DotNetCore 创建的项目结构之间的差别, 如下图所示:
总结
需要补充的一点是, 目前在 VS2019 中创建 DotNetCore 3.0 的 WPF 项目时, XAML 的设计视图还是不可用的状态, 所以这个需要注意一下.
DotNetCore 是未来发展的趋势, 由于目前还是预览版, 所以我们可以先试着做一些技术储备, 等待正式版出来后, 我们就可以很快的迁移过来.
相关参考
来源: https://www.cnblogs.com/hippieZhou/p/10661181.html