.net 获取英语异常消息而不是本地语言

.net 获取英语异常消息而不是本地语言,.net,localization,windows-runtime,locale,.net,Localization,Windows Runtime,Locale,在Windows8上,在德国系统上使用VisualStudio2012 RC,我将所有例外情况本地化为德语,这实际上意味着我无法在谷歌上搜索任何对他们有用的东西。为了解决这个问题,我已经使用以下方法将IDE更改为英语: Tools --> Options --> Internetional Settings --> Language --> English 尽管如此,我在本地化的德语中也有例外。我尝试使用以下代码更改代码中的ThreadUI区域性: Thread.Cur

在Windows8上,在德国系统上使用VisualStudio2012 RC,我将所有例外情况本地化为德语,这实际上意味着我无法在谷歌上搜索任何对他们有用的东西。为了解决这个问题,我已经使用以下方法将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");

我仍然收到德国例外信息。有人知道如何获取异常消息的未本地化版本吗?

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

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

另一种可能性是,如果这些异常包含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."

我将在这个系统中工作至少两个月,我真的不想谷歌翻译我在谷歌上搜索到的所有东西。你看到这个了吗:。unlocalize.com看起来很有用不起作用,正如我已经写过的,“new System.Threading.Thread”是不可能的,因为WinRT中已经不存在了。啊,是的,unlocalize.com可以帮助我解决这个问题,但它基本上与使用Google translate是一样的。我不想去另一个网站翻译所有东西,我只想在那里的某个地方看到原始信息。哦,顺便说一句。当然,你可以将Windows安装设置为英语,但请假设我不会或不能这样做。如果你解释一下他是如何做的,这将是一个更好的答案,还有可能是关于为什么IDE设置只影响IDE本身,而不影响使用IDE编译和运行的程序。。。。如果OP说他不会或不能这样做,那么消息就在那里,问题就在那里,尽管异常设计有问题(通过更改线程区域设置),但.NET 4和更低版本仍然可以使用编程解决方案,所以我不明白为什么.NET 4.5不应该有解决方案。这个答案是懒惰的,不适合我的问题。不总是可用的,例如HttpException(en:文件不存在,de:Die-Datei URL是nicht-vorhanden.)。但HRESULT是0x80004005,它转换为无意义的未指定错误消息。