我们非常自豪地宣布,面向.NET和Visual Studio开发人员的获奖软件开发平台DevExpress Universal v23.2发布啦。v23.2拥有众多新产品和数十种极具影响力的功能,可以让您无限制、无折衷地构建自己的最佳产品。无论是桌面、网络还是移动世界,DevExpress Universal 都能让您提供直观的解决方案,全面应对各种使用场景。
探索我们的最新功能(v23.2)(本文解析内容标记:******)
常规功能
支持 .NET 8 ******
非 Windows 开发 ******
用户界面本地化 ******
支持 NuGet v3 ******
剪贴板访问策略 ******
Windows 桌面控件
WinForms
WPF
VCL
WEB 控件
Angular、React、Vue、jQuery
Blazor
ASP.NET Core
企业和服务器工具
报告
商业智能仪表板
办公文件 API
移动组件
.net maui(免费)
框架与生产力
XAF - 跨平台 .NET 应用程序用户界面
.NET 应用程序安全与 Web API(免费)
CodeRush (免费)
------------------------------------------------------------------------------------------------------------------
支持 .NET 8
DevExpress UI 控件/组件、框架和库现在支持 .NET 8 RTM。
以下产品库/平台支持 .NET 8 RTM:
.NET MAUI 控件
Blazor 组件
WinForms 控件
WPF 控件
ASP.NET Core 控件
报告
商业智能仪表盘
办公文件 API(DOC、XLS、PDF 生成文档 API)
XAF - 跨平台 .NET 应用程序用户界面
.NET应用程序安全和Web API服务
XPO - ORM 库
.NET 标准 2 支持结束
本次重大更新(v23.2,于 2023 年 12 月发布)完成后,我们将不再根据此目标构建程序集。
非 Windows 开发
随着 v23.2 版本的发布,我们已完全过渡到新的 DevExpress Drawing 图形库(由我们的跨平台 SkiaSharp 引擎提供支持):
我们的 Blazor 富文本编辑器现在使用 DevExpress Drawing 图形库,而不是 System.Drawing.Common。这将使 Blazor Server、WebAssembly 和混合应用程序能够在不支持 System.Drawing.Common 的非 Windows 机器(Linux、Mac、Android、iOS 和其他基于 Unix 的系统)上运行。请查看以下博文,了解这方面的更多信息: DevExpress 跨平台产品 - 为 .NET 7 做好准备。
我们不再在 XAF Blazor/WinForms UI 和 DevExpress Web API 服务中使用 System.Drawing.Common。这样,我们的跨平台库就可以在 Linux、Mac、Windows、Android、iOS、.NET 7、.NET 8 和未来目标框架中正常工作。这一变化将简化未来的开发策略和部署选项,如 .NET MAUI 和 .NET 8+ 的 Blazor WebAssembly。
用于 Visual Studio Code 的报表设计器(CTP)
我们很高兴地宣布 DevExpress VSCode 报告设计器扩展作为社区技术预览版 (CTP) 推出。该扩展允许您在以下平台上使用我们的 Visual Studio Code 报告设计器创建和编辑报告/文档: Windows、macOS、Linux。
切换到预发布版,使用 v23.2 测试扩展功能。

支持 Linux 和 macOS 打印
DevExpress Reports 现在支持通过通用 UNIX 打印系统 (CUPS) 打印文档。该库与 macOS 集成。对于基于 Unix 的系统,您需要单独安装 libcups2 软件包。
要在通过 CUPS 访问的打印机上打印报告,请使用 PrintToolBase 类。
报告 - 增强的 Visual Studio 项目模板
我们在项目模板中添加了 Docker 支持。您可以从各种基于 Linux 的操作系统的 Docker 映像中进行选择:
Debian
Alpine
Ubuntu
openSUSE
Amazon Linux
Dockerfile 会自动创建并添加到项目中。该文件包含所有必要的设置。
项目模板允许你指定用于缓存报告生成的文档的存储类型。选项包括:
文件存储
数据库
用于为分布式应用程序实施缓存机制的外部缓存服务
Azure 存储
内存存储
注意:在 macOS 和基于 Unix 的操作系统上使用我们的 .NET CLI 模板生成示例应用程序时,也可以使用这些新选项。
UI 本地化
全新本地化应用程序接口
通过 v23.2,我们为所有依赖于标准 RESX 本地化机制的 DevExpress .NET 产品简化了以下本地化相关任务:
识别应用程序中专门使用的本地化字符串。
根据应用程序文化查找未翻译的字符串。
将修改保存到 RESX 文件,并将其用作本地化字符串的额外来源。
现在,您可以在 DevExpress 支持的 .NET 应用程序(WinForms、WPF、ASP.NET WebForms、MVC、Blazor、Reporting、BI Dashboards 和 XAF UI)中识别和本地化非翻译字符串。
本地化 API 包括 XtraLocalizer 类中的以下新事件和属性:
QueryLocalizedStringContainerResource - 允许您本地化作为 DevExpress 发行版一部分的数据窗体和对话框的资源。要确定和更改自定义表单中包含的所有本地化字符串非常困难(因为这些表单没有单独的本地化程序)。
QueryLocalizedStringNonTranslated - 通过该事件,您可以关注应用程序中需要翻译的资源。处理该事件可收集非本地化资源字符串,以便进一步翻译。我们的默认翻译来源于社区,因此并不是 100% 的翻译(即使是德语、西班牙语或法语),有些翻译可能还需要更正(同样也是由于来源于社区)。
QueryLocalizedString - 通过该事件,您可以为应用程序中的所有 DevExpress UI 控件本地化资源。该事件在控件请求资源字符串时触发,允许您根据需要对其进行翻译或修改(我们使用有用的事件参数对该事件进行了扩展,如 IsTranslated、Value、StringIDType 等)。
UserResourceManager - 该属性允许您设置自定义资源管理器,以便将自定义 RESX 文件集成到应用程序中进行本地化。该 API 提供最高级别的控制,是调用层次结构中的最高级别。正如您所期望的那样,与目前使用我们的在线本地化服务相比,您可以更轻松地将此 RESX 传递给外部翻译人员(这也是我们希望根据调查反馈解决的难题之一)。
用户界面本地化客户端 - 非翻译资源的识别
我们实施了一个新的用户界面本地化客户端工具(VSIX 扩展)。这是一个跨平台工具,可让您快速识别 DevExpress UI 控件的非翻译字符串并进行翻译。该工具会自动生成包含已翻译资源的 RESX 文件,并将其添加到项目中。您可以在 Visual Studio 的 "扩展 > DevExpress > 所有平台 "菜单下调用该工具。

NuGet v3 支持
现在默认使用 NuGet v3 (nuget.devexpress.com)。NuGet v3 是从您的集成开发环境或 CI/CD 工具访问 DevExpress NuGet 软件包的一种更快、更安全的方式。NuGet v2 将继续得到支持。

根据授权偏好,请考虑以下选项之一:
Feed URL 授权:https://nuget.devexpress.com/{your-feed-authorization-key}/api/v3/index.json - 您可以从 DevExpress NuGet Gallery 复制 {your-feed-authorization-key} 部分。
基于用户名/密码的授权:https://nuget.devexpress.com/api/v3/index.json - 使用 "DevExpress "作为用户名,并使用您的 feed 授权密钥作为密码。
剪贴板访问策略
WinForms和WPF
我们推出了新的剪贴板访问策略,允许您控制(允许或禁止)用户在 Windows 窗体和 WPF 应用程序(包括报表和 BI 仪表板)中使用 DevExpress UI 控件时启动的剪贴板相关操作。
在应用程序启动时使用以下方法应用预定义的限制:
禁止复制操作
禁止粘贴操作
抑制清除操作
您还可以处理以下事件,以便根据需要配置策略:
复制
粘贴
清除
失败
下面的示例允许用户从剪贴板将 ANSI 文本格式的数据粘贴到 DevExpress UI 控件中。如果用户粘贴的数据格式不同,从剪贴板粘贴的操作将被取消:
C#
using System;
using System.Windows.Forms;
using DevExpress.Data.Utils;
namespace DXApplication {
internal static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ClipboardAccessPolicy.SuppressCopyOperations();
ClipboardAccessPolicy.Pasting += ClipboardAccessPolicy_Pasting;
Application.Run(new Form1());
}
private static void ClipboardAccessPolicy_Pasting(object sender, ClipboardAccessPolicy.ClipboardOperationRequestEventArgs e) {
if (e.DataFormat == DataFormats.Text)
e.Cancel = false;
}
}
}
渝公网安备50010702505508