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


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

640?wx_fmt=png

Intro

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

640?wx_fmt=png

迁移

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

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

主要变更:


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



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

    640?wx_fmt=png



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


640?wx_fmt=png

单元测试的修改:


  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

640?wx_fmt=png

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

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

640?wx_fmt=png

再看一下发布的文件的大小,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 发布之后不能正常工作的示例

640?wx_fmt=png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值