获取英文异常信息而不是本地语言

11

在德语系统上使用Visual Studio 2012 RC的Windows 8中,我的所有异常信息都是以德语本地化的,这意味着我无法通过谷歌获得任何有用的信息。为了解决这个问题,我已经使用以下方法将我的IDE更改为英语:

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

然而,我在本地化的德语语言中遇到了异常。我尝试使用以下代码在代码中更改ThreadUI Culture:

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

可悲的是,在WinRT中,Thread命名空间已经不存在了。因此,我尝试了以下方法:

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

我仍然得到德语异常信息。 有人知道如何获取异常消息的非本地化版本吗?


1
我将在这个系统中工作至少两个月,我真的不想用谷歌翻译每一件事。 - Akku
你看过这个吗:https://dev59.com/Y3VC5IYBdhLWcg3wsTfv。unlocalize.com看起来很有用。 - mcalex
啊,没错,unlocalize.com 可以帮我解决这个问题,但基本上和使用 Google 翻译一样。我不想去另一个网站翻译所有内容,我只想要原始信息在其中的地方。 - Akku
http://connect.microsoft.com/VisualStudio/feedback/details/760126/windows-8-net-4-5-unable-to-change-frameworks-exceptions-language - Juan Zamudio
卸载本地的.NET语言包解决了我的问题:https://dev59.com/Y3VC5IYBdhLWcg3wsTfv#23341306 - Nir
显示剩余3条评论
2个回答

2
您的另一个选择是检索和显示Exception.HResult值,该值可以进行搜索,并转换为有用的英文错误消息。
如果这些异常具有Win32代码,则还有另一种可能性,即使用一个技巧:
[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."

不是所有的都可用,例如HttpException(英文:文件不存在,德文:URL文件不存在)。但是HRESULT是0x80004005,它被翻译成无意义的“未指定错误”消息。 - tibx

-5

异常信息本来就是设计为本地化的,这是期望的行为。您应该更改您本地计算机的设置。


1
如果您解释一下他如何执行此操作,以及为什么 IDE 设置仅影响 IDE 本身而不影响已使用 IDE 编译并运行的程序,那将是更好的答案。 - TomH
...如果楼主说他不会或不能这样做。 - mcalex
3
好的,这里有信息和问题,并且.NET 4及以下版本已提供一种程序化解决方案,尽管异常设计可疑(通过更改线程区域设置),因此我不明白为什么.NET 4.5就没有解决方案。这个回答很懒惰,不符合我的问题。 - Akku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接