路遥工具箱全面迁移至 .NET 6.0 并发布 3.0 版本及迁移记录详解
隨著 .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 版本及迁移记录详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何计算 string 的 crc32
- 下一篇: asp.net ajax控件工具集 Au