在Windows 8上使用德语系统上的Visual Studio 2012 RC,我将所有异常本地化为德语,这实际上意味着我不能谷歌任何对他们有用的东西。为了解决这个问题,我已经使用以下方法将IDE更改为英语:
Tools --> Options --> Internetional Settings --> Language --> English
尽管如此,我在本地化的德语中得到了例外。我尝试使用以下代码更改代码中的ThreadUI Culture:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us");
可悲的是,在WinRT中,线程命名空间在WinRT中消失了。所以我试过了:
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-us");
我仍然收到德国的异常消息。有谁知道如何获取异常消息的非本地化版本?
答案 0 :(得分: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."
答案 1 :(得分:-5)
异常按设计定制了消息,这是所需的行为。您应该更改本地计算机设置。