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

Intro

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

迁移

这篇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>

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

单元测试的修改:

  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相关推荐

  1. Entity Framework Core 2.0 使用代码进行自动迁移

    一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...

  2. 多管齐下,解决dotNet FrameWork全角问题

    多管齐下,解决dotNet FrameWork全角问题 丽水市汽车运输集团有限公司信息中心苟安廷 用C#编写winform程序时,输入法经常自动变成全角,给用户的输入带来极的不便,微软至今没有解决这一 ...

  3. [Remoting]dotNet Framework升级后Remoting信道使用的安全问题

    [Remoting]dotNet Framework升级后Remoting信道使用的安全问题<?xml:namespace prefix = o ns = "urn:schemas-m ...

  4. 迁移应用程序到.NET Framework 4.5:弃用类型与新特性

    上周,微软宣布了.NET Framework 4.5 Beta中改动和弃用的成员及类型清单,并提供了一份指南用于帮助开发人员迁移使用老版本.NET Framework创建的应用程序. 虽然废弃类型和成 ...

  5. dotnet core 和 dotnet Framework 启动可执行文件的差别

    在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码.使用 .NET Core 构建出来的应用,将会包含一个 Exe ...

  6. DotNet Framework 版本历史

    .NET Framework(.NET框架) 是由微软开发,一个致力于敏捷软件开发(Agile software development).快速应用开发(Rapid application devel ...

  7. Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  8. Entity Framework Core 3.0 和 Entity Framework 6.3 正式发布

    Entity Framework Core 3.0 和 Entity Framework 6.3 通用版发布了,接下来我们看看它的新内容: Entity Framework Core 3.0 EF C ...

  9. Entity Framework Core 2.0 全局查询过滤器

    本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...

最新文章

  1. 从键盘输入的十个整数中的最大数和最小数
  2. 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...
  3. python 办公自动化-用python进行办公自动化都需要学习什么知识呢?
  4. Windows核心编程 第26章 窗口消 息
  5. 台湾国立大学郭彦甫Matlab教程笔记(10) basic plotting下
  6. 成功解决Instructions for updating: Use `tf.global_variables_initializer` instead.
  7. linux相关(find/grep/awk/sed/rpm)
  8. 计算机应用基础试模块5ACCSE,2015年计算机二级《Access》上机最后冲刺卷(1)
  9. 漫步微积分七——连续函数
  10. DSB2017第一名代码尝试运行(记录自用)(二)
  11. OracleXE安装完成后 http://127.0.0.1:8080/apex 总是在刷新无法打开
  12. 目录代码php_php获取某个目录大小的代码
  13. hdu 4609 3-idiots(FFT计数)
  14. 问题:宇视摄像机如何对接第三方录像机
  15. 网页保存视频最有效的几种方法
  16. 【java】IDEA设置自己的名字和时间(Created by)
  17. 国外免费电子书资源下载
  18. jQuery世界国家城市选择插件
  19. 搭建git私有化仓库
  20. iframe跨域嵌套头部

热门文章

  1. 如何做Teams Bot的测试覆盖
  2. 在c语言中load,一道题理清Objective-C中的load和initialize
  3. 虚拟化记录--No.1
  4. 抽象类和接口类的区别
  5. Shell配置_配置IP
  6. Navicat Premium 怎么安装比较快
  7. ASP.NET MVC 上传大文件时404
  8. 恢复Ext3下被删除的文件
  9. 构建根文件系统(2)Busybox init 进程
  10. Apache-不重启完成添加或更改域名