Azure网络应用程序突然不再支持文化

出乎意料的是,我们的Azure网络应用程序正在喷出有关不受支持的文化的错误。 我们会在首页上显示要显示的国家/地区列表,但这会突然出错。 在其他各种Web应用程序上也使用相同的代码,并且它们没有问题。

以下代码给出了一个问题。

private List Countries() { RegionInfo country = new RegionInfo(new CultureInfo("nl-BE", false).LCID); List countryNames = new List(); foreach (CultureInfo cul in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) { country = new RegionInfo(new CultureInfo(cul.Name, false).LCID); countryNames.Add(new SelectListItem() { Text = country.DisplayName, Value = country.DisplayName }); } return countryNames.GroupBy(x => x.Text).Select(x => x.FirstOrDefault()).ToList().OrderBy(x => x.Text).ToList(); } 

我在for-each中放置了一个try-catch,因此我可以查明出错的文化。 以下文化突然返回错误:

  4096 ar-001   4096 el-CY   4096 en-BB   4096 en-BS   4096 en-HK   4096 en-NL   4096 en-SE   4096 es-419  

有人可以帮我解决这个问题吗? 我似乎无法理解为什么这个网络应用程序突然出现这些错误。

几乎所有Windows中的新语言环境都没有分配明确的LCID – 因为数百个国家的数千种语言没有足够的“空间”问题。 他们都被分配0x1000。

在这种情况下,我认为更改LCID名称可能对您有用:

 country = new RegionInfo(new CultureInfo(cul.Name, false).LCID); 

只使用文化名称:

 country = new RegionInfo(cul.Name); 

当然,LCID的任何其他用途也需要识别文化名称。

我们实际上建议使用完整的文化名称构造RegionInfo,因为它比区域名称更明确。 RegionInfo有一些“依赖”语言的属性,例如DisplayName。 例如,es-US和en-US为“美国”提供西class牙语或英语字符串。

希望有所帮助,

-Shawn

我确认这些是刚刚在Azure App Service中添加的新文化,显然它是以创建RegionInfo失败的方式完成的。 最简单的责任是:

 var culture = new CultureInfo("en-HK", false).LCID; var region = new RegionInfo(culture); 

这失败了:

Unhandled Exception: System.Globalization.CultureNotFoundException: Culture is not supported. Parameter name: culture 4096 (0x1000) is an invalid culture identifier. at System.Globalization.CultureData.GetCultureData(Int32 culture, Boolean bUseUserOverride) at System.Globalization.RegionInfo..ctor(Int32 culture)

我们正在进一步调查。 与此同时,建议的解决方法是捕获exception并忽略失败的文化。