迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0

迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0

Intro

微软从 dotnetcore3.0 开始已经开始支持 wpf 以及 winform 的开发,dotnet core 3.0 preview7 已经发布,官方称已经可以准备上生产了 Production Ready

Production Ready

迁移

这篇WPF的迁移还是比较不错的,如果第一次迁移,强烈推荐看一下 https://www.cnblogs.com/hippieZhou/p/10661181.html

迁移的过程还算比较顺利,因为我的依赖都是 netstandard2.0 和 net462,项目格式也都是用的新的项目格式,项目格式和包引用方式都无需修改。

主要变更:

  1. 原来 winform 项目的依赖大都是 net462;netstandard2.0 现在直接去除 net462,只保留 netstanard2.0 ,变更为 netstandard2.0

  2. Winform 项目,项目文件修改,修改 TargetFramework 为 netcoreapp3.0 并且设置 true,如果是 WPF 项目需要设置 true

    diff
  3. 在 netframework 下,我自己封装的一个基础类库 WeihanLi.Common 中有一个 ConfigurationHelper 的帮助类,可以帮助更方便的获取和更新配置,最初也是支持 netstandard2.0 的,但是后面为了减少依赖就去掉了去 netstandard2.0 的支持,这里我直接把这个文件添加到 winform 的项目中,可以直接使用
    完整的 ConfigurationHelper 代码:

ConfigurationHelper.cs

单元测试的修改:

  1. 单元测试原来是 net462,改成了netcoreapp2.1,原来配置文件用的 app.config, 迁移到 dotnetcore 下面使用 appsettings.json 来代替了。

  2. 单元测试依赖注入原来使用的 AutoFac,现在改成微软的依赖注入框架了。

完整的迁移过程可以参考这个 commit
https://github.com/WeihanLi/DbTool/commit/8ea3fa8a01f951af565162c290d5af7d16511fdb

发布

微软从 netcore3.0 preview 5 支持开始发布成单文件,可以使用下面的命令来发布成单文件

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true

发布完看一下文件大小,172M。。。我的天啊,感觉好大,虽然说集成了运行所需要的所有环境,但还是觉得有些大,在网上找一些解决办法,发现从 dotnetcore3.0 preview6 开始支持一个 PublishTrimmed 的参数可以减小发布出来文件的大小,下面我们来试一下

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true

再看一下发布的文件的大小,109M:

虽然还是很大,可以看到相比没有 trim 还是小了很多。

使用 PublishTrimmed 来压缩文件大小的时候会使用 ilinker 来减小文件的大小,详细参考 https://github.com/dotnet/core/blob/master/samples/linker-instructions.md
,需要注意的是,发布之后最好测试一下,因为有时候可能会有问题,参考这篇文章 https://dotnetcoretutorials.com/2019/06/27/the-publishtrimmed-flag-with-il-linker/, 这篇文章给出了一个使用反射 trim 发布之后不能正常工作的示例

Reference

  • https://devblogs.microsoft.com/dotnet/are-your-windows-forms-and-wpf-applications-ready-for-net-core-3-0/
  • https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0-preview-7/
  • https://dotnetcoretutorials.com/2019/06/20/publishing-a-single-exe-file-in-net-core-3-0/
  • https://dotnetcoretutorials.com/2019/06/27/the-publishtrimmed-flag-with-il-linker/
  • https://www.cnblogs.com/hippieZhou/p/10661181.html
  • https://github.com/dotnet/winforms
  • https://github.com/dotnet/wpf

你可能感兴趣的:(迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0)