C# 可以在本地开发人员计算机上为en创建区域性
我刚刚将我们的应用程序部署到azure登台环境中,遇到了不支持C# 可以在本地开发人员计算机上为en创建区域性,c#,.net,.net-4.5.2,C#,.net,.net 4.5.2,我刚刚将我们的应用程序部署到azure登台环境中,遇到了不支持en区域性的问题。经过一番挖掘,我发现没有这样的文化,我应该使用en-GB或en-US 但是,现在我的问题是。在我的本地开发机器上,我可以用en创建CultureInfo CultureInfo ci = new CultureInfo("en-EN"); Console.WriteLine("culture: "+ ci.ThreeLetterISOLanguageName); 输出区域性:eng 我还尝试使用CultureIn
en
区域性的问题。经过一番挖掘,我发现没有这样的文化,我应该使用en-GB
或en-US
但是,现在我的问题是。在我的本地开发机器上,我可以用en
创建CultureInfo
CultureInfo ci = new CultureInfo("en-EN");
Console.WriteLine("culture: "+ ci.ThreeLetterISOLanguageName);
输出区域性:eng
我还尝试使用CultureInfo.GetCultures(CultureTypes.AllCultures)枚举所有文化代码>并且结果中没有相应的en-en
区域性
那么,到底发生了什么,为什么我可以创建一个不应该存在的区域性?如果您使用Windows 10,区域性行为已经改变:“未知”,但“可能存在”区域性(3个字母的iso)只会导致LCID 4096的“未知地区”区域性。
在Windows 10之前,这将导致异常(除非您安装了这样的自定义区域性)
如果您使用的是Windows 10,则区域性行为已更改:“未知”,但“可能存在”区域性(3个字母的iso)只会导致LCID为4096的“未知区域设置”区域性。
在Windows 10之前,这将导致异常(除非您安装了这样的自定义区域性)
作为缔约国:
从Windows 7或更高版本的.NET Framework 4或更高版本下运行的应用程序开始,该方法尝试从操作系统检索标识符为name的CultureInfo对象如果操作系统不支持该区域性,并且如果名称不是补充或替换区域性的名称,则该方法将抛出CultureNotFoundException异常
因此,基本上,您的操作系统将en-en
作为现有区域性的替代名称(更可能是en-US
),而它不在Azure VM上
解决方案是:使用真实的区域性名称(您可以找到),如下所示:
从Windows 7或更高版本的.NET Framework 4或更高版本下运行的应用程序开始,该方法尝试从操作系统检索标识符为name的CultureInfo对象如果操作系统不支持该区域性,并且如果名称不是补充或替换区域性的名称,则该方法将抛出CultureNotFoundException异常
因此,基本上,您的操作系统将en-en
作为现有区域性的替代名称(更可能是en-US
),而它不在Azure VM上
解决方案是:使用真实的文化名称(你可以找到)你总是可以创建一个不存在的文化。你的意思是什么?如果我在我们的登台机器上运行上面的代码片段,我会得到一个异常,说不支持区域性(这是我所期望的),您总是可以创建一个不存在的区域性。这是什么意思?如果我在我们的登台机器上运行上述代码段,我会得到一个异常,表示不支持该区域性(这是我所期望的)
try
{
// ok
CultureInfo culture1 = new CultureInfo("foo");
CultureInfo culture2 = new CultureInfo("xyz");
CultureInfo culture3 = new CultureInfo("en-xy");
// not ok - exception
CultureInfo culture4 = new CultureInfo("foox");
}
catch (Exception exc)
{
}