11

在德语系统上使用 Visual Studio 2012 RC 的 Windows 8 上,我将所有异常都本地化为德语,这实际上意味着我无法在谷歌上搜索任何对他们有用的东西。为了解决这个问题,我已经使用以下方法将我的 IDE 更改为英语:

Tools --> Options --> Internetional Settings --> Language --> English

尽管如此,我在本地化的德语中得到了例外。我尝试使用以下代码更改代码中的 ThreadUI 文化:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");

可悲的是,在 WinRT 中,线程命名空间在 WinRT 中消失了。因此我尝试了:

System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-us");

我仍然收到德国异常消息。有谁知道如何获取异常消息的非本地化版本?

4

2 回答 2

2

您的另一个选择是检索并显示该Exception.HResult值,可以对其进行搜索并将其转换为有用的英文错误消息。

另一种可能性,如果这些异常有 Win32 代码,尽管是 hack:

[DllImport("kernel32.dll",
           EntryPoint = "FormatMessageW",
           SetLastError = true,
           CharSet = CharSet.Auto)]
private static extern int FormatMessage(
    int dwFlags,
    IntPtr lpSource,
    int dwMessageId,
    int dwLanguageId,
    StringBuilder lpBuffer,
    int nSize,
    IntPtr[] Arguments);

// used like:
var builder = new StringBuilder(2048);
var res = FormatMessage(
    0x1000|0x0200/*System Message, Ignore Inserts*/,
    IntPtr.Zero,
    exception.HResult,
    new CultureInfo("en-US").LCID,
    builder,
    builder.Capacity,
    null);
 Console.WriteLine("{0}", builder.ToString());
 // throw new StackOverflowException()
 // "Recursion too deep; the stack overflowed."
于 2012-11-21T15:26:59.533 回答
-5

异常通过设计具有本地化消息,这是所需的行为。您应该更改本地计算机设置。

于 2012-11-21T13:46:28.940 回答