我有一个令人讨厌的错误,只有当我在非英语Windows上运行我的C#程序时才能表现出来。它是从double到string的转换(我在某些值上得到逗号而不是点,我们不应该本地化)。为了测试修复(即在任何地方应用InvariantLocale
),我需要构建可执行文件并在非英语VM上运行它,这非常耗时。
我的问题是:是否有可能在VS2017内调试假装在非英语Windows环境中? (让我们说例如荷兰语Windows)
答案 0 :(得分:2)
我使用实用程序类来设置语言:
public static class LanguageSetter
{
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
private static extern ushort SetThreadUILanguage(ushort _languageId);
public static void SetLanguage(string uiLanguage)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(uiLanguage);
SetThreadUILanguage((ushort) Thread.CurrentThread.CurrentUICulture.LCID);
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo(uiLanguage);
}
}
只需使用LanguageSetter.SetLanguage("nl-NL");
如果您使用WPF,请在该函数的末尾添加另一行:
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.IetfLanguageTag)));