随着 .NET 6.0 的发布 NewLife 组件也进行了升级,并在 2022 年 1 月份全面停止了对 .NET Framework 的支持框架依赖升级至 .NET Standard 2.1 。

2022 年新年到来之际,笔者也打算将路遥工具箱全面迁移至 .NET 6.0 同时发布 3.0 版本。这意味着路遥工具箱将获得更先进的技术和加快的运行速度。

从 .NET Framework 4.6.2 到 .NET 6 的迁移过程

更改目标框架

因为从立项之初就采用了新版本的 csproj 格式,所以迁移过程并不复杂。在项目属性页面中将目标框架从 .NET Framework 4.6.2 更改为 .NET 6.0 之后,大部分工作其实就已经完成了。需要注意的是“目标操作系统版本”和“受支持的 OS 版本”需要设置为 7.0 才可以兼容 Windows 7 操作系统。

移除过时依赖

在 .NET Framework 4.6.2 环境下,路遥工具箱通过引用类库的方式添加了对 System.ComponentModel.DataAnnotations 和 WindowsFormsIntegration 程序集的依赖。在 .NET 6.0 中,这两个程序集已经被默认包含,所以以下代码可以从项目文件中删除:

<ItemGroup><Reference Include="System.ComponentModel.DataAnnotations" /><Reference Include="WindowsFormsIntegration" />
</ItemGroup>

添加对 GB2312 编码的支持

这是一个中文编程环境下绕不过的问题,很纳闷为什么微软没有将其内置。

.NET 6.0 中默认不支持 GB2312、GBK编码。要启用支持需要通过 NuGet 引入 System.Text.Encoding.CodePages ,地址在这里:https://www.nuget.org/packages/System.Text.Encoding.CodePages 。然后在 App 的 OnStartup 方法中调用方法(路遥工具箱是使用 WPF 开发的,并使用了 Prism 框架):

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

UTF8 和 UTF8-without-BOM

UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软的习惯)。BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)。微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开,但这样的文件在 Windows 之外的操作系统里会带来问题。

作者:梁海
链接:https://www.zhihu.com/question/20167122/answer/14194448
来源:知乎

在 .NET 6.0 中,如果使用默认的 UTF-8 编码去写文件则该文件默认是带 BOM 的。因为路遥工具箱的升级接口部署在 Linux 服务器上,所以使用 .NET 6.0 上传的 XML 文件在浏览时会报错。

写文件的代码类似这样:

var str = Serialize(updatePackage);
File.WriteAllText(path, str, Encoding.UTF8);

报错信息:

XML declaration allowed only at the start of the document

解决办法就是采用无 BOM 的 UTF-8 编码,以上代码修改一下即可:

var str = Serialize(updatePackage);
File.WriteAllText(xml, fn, new UTF8Encoding(false));

同时兼容 x86 和 x64 的打包发布

在 .NET 6.0 中,程序的入口 exe 变成了本地化代码。这也就代表着类似 .NET Framework 下那种一个 exe 可以同时适应 x86、x64 的神器操作没有了。

为了能更高效率的发挥路遥工具箱的性能,同时也兼顾目前仍在使用 x86 系统的用户,路遥工具箱采用了 x64 为主且附带 x86 支持的发布形式。

通过 Visual Studio 内置的发布功能将路遥工具箱使用 windows-x86 发布一次,即可得到一个 32 位的入口程序 exe 文件。将该文件改名为 Luyao.Toolkit-x86.exe 后复制到项目中,并设置为“始终复制”。这样每次生成新的 release 版本都是 64 位的并且携带了 32 位的启动器。

路遥工具箱全面迁移至 .NET 6.0 并发布 3.0 版本及迁移记录详解相关推荐

  1. ubuntu20.0.4更新至中文环境 | 具体步骤 + 图文详解

    ubuntu20.0.4更新至中文环境 | 具体步骤 + 图文详解 1.找到 Settings 即设置 2.找到Language and Region:点击下方的 Manage installed L ...

  2. php sprintf 后面补0,PHP数字前补0的自带函数sprintf 和number_format的用法(详解)

    下面小编就为大家带来一篇PHP数字前补0的自带函数sprintf 和number_format的用法(详解).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 很多时候我们 ...

  3. Pinterest 3.0 for iOS设计过程——升级iOS7设计思路详解

    Pinterest 3.0 for iOS设计过程--升级iOS7设计思路详解 时间2013-12-11 11:39:31  苹果开发中文站 原文  http://www.cocoachina.com ...

  4. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  5. android 7.0 裁剪,Android 7.0中拍照和图片裁剪适配的问题详解

    前言 Android 7.0系统发布后,拿到能升级的nexus 6P,就开始了7.0的适配.发现在Android 7.0以上,在相机拍照和图片裁剪上,可能会碰到以下一些错误: Process: com ...

  6. 升级鸿蒙系统如何退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统-操作教程详解...

    华为鸿蒙2.0系统升级了怎么退回EMUI11系统?很多用户升级了又不知道如何才能退回到原来的系统,下面就让老铁下载小编为大家带来,2.0系统升级退回EMUI11系统操作教程详解. 这次开启华为鸿蒙2. ...

  7. .NET Core 3.0 RC1 发布,最终版本将于下周发布

    .NET Core 3.0 RC1 已经发布,最终版本将于下周 9 月 23 日发布.此版本包括 .NET Core 3.0.0 RC1 和 .NET Core SDK 3.0.100 RC1. Vi ...

  8. Unified Functional Testing(UFT)15.0.2入门保姆级教程(二),图文详解。QTP

    UFT入门之验证点和参数化 UFT15.0.2教程之侦测器(ObjectSpy)及脚本录制 请移步:Unified Functional Testing(UFT)15.0.2入门保姆级教程(一),图文 ...

  9. springboot2.0日志配置 logback的使用和logback.xml详解

    logback的使用和logback.xml详解写的非常详细. 只根据上面的我们会发现,日志要么输出到文件.要么输出到控制台不能有选择的输出满足我们的要求,这是需要看下面这个文章, 多个xml路径,有 ...

最新文章

  1. Mixing Milk(USACO)
  2. JS性能--DOM编程之重排与重绘
  3. 《C语言课程设计》一3.1 文件复制
  4. 一种可行的简单的Scene结构in cocos2d
  5. python中如何输出中文_python中怎么输出中文-问答-阿里云开发者社区-阿里云
  6. 7-37 组个最小数 (20分)_波音737高度计上蹊跷的“8英尺”,09年土耳其航空1951号航班空难...
  7. java 头尾 队列_Java数据结构之队列(动力节点Java学院整理)
  8. Spring Boot文档阅读笔记-how-to-implement-2-way-ssl-using-spring-boot
  9. XML文件解析-DOM4J方式和SAX方式
  10. outlook 邮件 设置延迟送信
  11. vbox黑苹果10.6.5升级无法进入系统(解决)
  12. 对sppnet网络的理解
  13. python软件是什么作用,python-dotenv的用途是什么?
  14. 好文摘记——施一公教授:如何提高专业英语阅读水平
  15. 高考录取查询显示内部服务器错误,为什么江苏成人高考成绩查询网页一直打不开...
  16. minisforum HX90G/HX99G miniPC-Hackintosh-Opencore 黑苹果efi引导文件
  17. python flask自定义404错误页面
  18. 整理了一些常用的免费 API 接口,不限次数,收藏备用!(持续更新...)
  19. ACS 2017中国汽车CIO峰会10月强势登陆上海
  20. 跨境电商如何找代运营公司?星之河

热门文章

  1. Android选项切换条SHSegmentControl
  2. HDU 4864 Task(贪心或高斯消元)
  3. imagePreview接口调用微信自带图片播放器
  4. Silverlight 2.5D RPG游戏技巧与特效处理:(十六)动态资源
  5. java编译多个包_javac一次性编译多个包下的.java文件
  6. 如何彻底卸载MySQL
  7. LeetCode 77.组合求和
  8. shell脚本传可选参数 getopts 和 getopt的方法
  9. java_函数的重载
  10. ajax加php实现三级联动