C# 检测所有语言变体中的“找不到模块”

本文关键字:找不到 模块 找不到模块 检测 语言 | 更新日期: 2023-09-27 18:36:05

任何人都可以阐明来自 .NET 中 FileNotFoundException 的异常消息是否显示在线程 UI 区域性中,或者它是否始终为英语(我怀疑这将是他们当前的 UI 区域性)?

目前,我正在检查字符串"找不到指定的模块",以帮助向用户生成更有用的响应,通知他们缺少第三方库。有谁知道当未检测到指定模块时在其他语言中会发生什么?

C# 检测所有语言变体中的“找不到模块”

与其对消息进行字符串比较,不如检查 HResult 属性并进行比较。MOD_NOT_FOUND是0x8007007E。

您可以在此处阅读有关它的更多信息,并在此处查看常见的HResult值

编辑

经过一些进一步的研究,我想补充一件事:如果你使用的是比 .NET 4.5 旧的 .NET 版本,则不能只获取HResult值,而是需要调用方法。看这里

.NET 框架包含本地化的异常消息。对于Microsoft来说,本地化这些框架异常消息似乎是合理的,因为它们的目标受众可以位于任何地方。

我建议您在不对消息进行字符串比较的情况下捕获预期的异常,而是使用您知道在这种情况下会得到FileNotFoundException的事实,然后根据需要向用户显示消息。

该消息已本地化,您不应检查字符串,而只需检查代码中的 FileNotFoundException 实例,因为如果没有很多努力,您将无法在任何文化中捕获它,并且它可能会在以后的版本中更改。

在其他语言中,还会抛出 FileNotFoundException 的实例,并带有本地化的消息。