迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0
迁移 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,项目格式也都是用的新的项目格式,项目格式和包引用方式都无需修改。
主要变更:
原来 winform 项目的依赖大都是
<TargetFrameworks>net462;netstandard2.0</TargetFrameworks>
现在直接去除 net462,只保留 netstanard2.0 ,变更为<TargetFramework>netstandard2.0</TargetFramework>
Winform 项目,项目文件修改,修改 TargetFramework 为
netcoreapp3.0
并且设置<UseWindowsForms>true</UseWindowsForms>
,如果是 WPF 项目需要设置<UseWPF>true</UseWPF>
在 netframework 下,我自己封装的一个基础类库 WeihanLi.Common 中有一个 ConfigurationHelper 的帮助类,可以帮助更方便的获取和更新配置,最初也是支持 netstandard2.0 的,但是后面为了减少依赖就去掉了去 netstandard2.0 的支持,这里我直接把这个文件添加到 winform 的项目中,可以直接使用 完整的 ConfigurationHelper 代码:
单元测试的修改:
单元测试原来是 net462,改成了netcoreapp2.1,原来配置文件用的 app.config, 迁移到 dotnetcore 下面使用 appsettings.json 来代替了。
单元测试依赖注入原来使用的 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相关推荐
- Entity Framework Core 2.0 使用代码进行自动迁移
一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...
- 多管齐下,解决dotNet FrameWork全角问题
多管齐下,解决dotNet FrameWork全角问题 丽水市汽车运输集团有限公司信息中心苟安廷 用C#编写winform程序时,输入法经常自动变成全角,给用户的输入带来极的不便,微软至今没有解决这一 ...
- [Remoting]dotNet Framework升级后Remoting信道使用的安全问题
[Remoting]dotNet Framework升级后Remoting信道使用的安全问题<?xml:namespace prefix = o ns = "urn:schemas-m ...
- 迁移应用程序到.NET Framework 4.5:弃用类型与新特性
上周,微软宣布了.NET Framework 4.5 Beta中改动和弃用的成员及类型清单,并提供了一份指南用于帮助开发人员迁移使用老版本.NET Framework创建的应用程序. 虽然废弃类型和成 ...
- dotnet core 和 dotnet Framework 启动可执行文件的差别
在 Windows 下,使用 .NET Framework 构建出来的应用,可以只有一个可执行文件,在可执行文件里面包含了 IL 代码.使用 .NET Core 构建出来的应用,将会包含一个 Exe ...
- DotNet Framework 版本历史
.NET Framework(.NET框架) 是由微软开发,一个致力于敏捷软件开发(Agile software development).快速应用开发(Rapid application devel ...
- Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- 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 ...
- Entity Framework Core 2.0 全局查询过滤器
本博文翻译自: http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查 ...
最新文章
- 从键盘输入的十个整数中的最大数和最小数
- 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...
- python 办公自动化-用python进行办公自动化都需要学习什么知识呢?
- Windows核心编程 第26章 窗口消 息
- 台湾国立大学郭彦甫Matlab教程笔记(10) basic plotting下
- 成功解决Instructions for updating: Use `tf.global_variables_initializer` instead.
- linux相关(find/grep/awk/sed/rpm)
- 计算机应用基础试模块5ACCSE,2015年计算机二级《Access》上机最后冲刺卷(1)
- 漫步微积分七——连续函数
- DSB2017第一名代码尝试运行(记录自用)(二)
- OracleXE安装完成后 http://127.0.0.1:8080/apex 总是在刷新无法打开
- 目录代码php_php获取某个目录大小的代码
- hdu 4609 3-idiots(FFT计数)
- 问题:宇视摄像机如何对接第三方录像机
- 网页保存视频最有效的几种方法
- 【java】IDEA设置自己的名字和时间(Created by)
- 国外免费电子书资源下载
- jQuery世界国家城市选择插件
- 搭建git私有化仓库
- iframe跨域嵌套头部