本文详细介绍DevExpress跨平台产品中与System.Drawing.Common 相关的重大变化的解决方案,由于部署在非 Windows 机器上的应用程序数量不断增加,因此这项任务是 DevExpress 多个开发团队的高度优先事项。
改变了什么?
Microsoft将System.Drawing.Common归结为.NET 6及更高版本中的Windows特定库,请访问以下页面并查看更改原因部分以获取更多信息:System.Drawing.Common only supported on Windows 。
在 .NET 6 中,在非 Windows 操作系统上使用 System.Drawing.Common 库会产生编译时警告并引发TypeInitializationException和 PlatformNotSupportedException 异常。 为了让软件开发人员有时间迁移到更现代的图形库,Microsoft 引入了运行时配置开关。 您可以在 runtimeconfig.json 文件中将 System.Drawing.EnableUnixSupport 选项设置为 true 以启用对非 Windows 平台的支持并避免运行时异常:
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
但是,.NET 7 及更高版本将不支持此运行时配置开关,并且所有在非 Windows 平台上使用 Sytem.Drawing.Common API 的应用程序都会抛出 PlatformNotSupportedException。
对现有应用程序的影响
此重大更改影响以下 DevExpress 跨平台产品 - 使用 System.Drawing.Common 作为渲染/文本测量引擎的组件:
- DevExpress Reporting
- DevExpress Office File API
- DevExpress Dashboard
- 用于 DevExpress 图表、地图和仪表的跨平台程序集,供上面列出的产品使用时
由于在所有受支持的非 Windows 环境(Linux 和 macOS、Azure 应用服务和 Docker 容器)中维护组件功能十分重要,技术团队计划在 2022 年更新产品来消除对 System.Drawing.Common 的依赖并实现 一个自定义的跨平台渲染引擎。
官方即将发布的计划
在即将发布的 v22.1 周期中引入新的 DevExpress.Drawing 程序集,此程序集将包含非 Windows 系统(图像、字体、笔、画笔等)不支持的所有 System.Drawing 类的自定义实现。在 v22.2 中,官方技术团队计划使用基于 SkiaSharp 的跨平台渲染引擎发布另一个程序集它是一个稳定、功能齐全的开源库,完全符合要求。一旦有新的程序集可用,您需要将它们合并到您的项目中。(如果您开发特定于 Windows 的应用程序,将能够使用项目转换器工具将项目升级到较新的版本并添加必要的程序集引用/更新 NuGet 包)。
在 2022 年下半年,官方技术团队还计划修改公共API,用自定义的 DevExpress.Drawing 对应物替换 System.Drawing 对象,您将需要更新代码来使用这些新的 API。
DevExpress Universal Subscription拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。
DevExpress技术交流群6:600715373 欢迎一起进群讨论