Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure web应用突然不再支持区域性_C#_Asp.net_Asp.net Mvc_Azure_Azure Web App Service - Fatal编程技术网

C# Azure web应用突然不再支持区域性

C# Azure web应用突然不再支持区域性,c#,asp.net,asp.net-mvc,azure,azure-web-app-service,C#,Asp.net,Asp.net Mvc,Azure,Azure Web App Service,出乎意料的是,我们的Azure web应用程序正在抛出有关不受支持的文化的错误。我们加载了一个国家列表,在头版上显示,但这突然出现了错误。同样的代码也用于其他各种web应用程序,它们没有问题 下面的代码给出了一个问题 private List<SelectListItem> Countries() { RegionInfo country = new RegionInfo(new CultureInfo("nl-BE", false).LCI

出乎意料的是,我们的Azure web应用程序正在抛出有关不受支持的文化的错误。我们加载了一个国家列表,在头版上显示,但这突然出现了错误。同样的代码也用于其他各种web应用程序,它们没有问题

下面的代码给出了一个问题

 private List<SelectListItem> Countries()
        {
            RegionInfo country = new RegionInfo(new CultureInfo("nl-BE", false).LCID);
            List<SelectListItem> countryNames = new List<SelectListItem>();
        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<SelectListItem>().OrderBy(x => x.Text).ToList();
    }
private List Countries()
{
RegionInfo country=newregioninfo(new CultureInfo(“nl-BE”,false).LCID);
List countryNames=新列表();
foreach(CultureInfo.GetCultures(cultureType.SpecificCultures)中的CultureInfo cul)
{
country=新区域信息(新文化信息(cul.Name,false).LCID);
添加(新的SelectListItem(){Text=country.DisplayName,Value=country.DisplayName});
}
返回countryNames.GroupBy(x=>x.Text).Select(x=>x.FirstOrDefault()).ToList().OrderBy(x=>x.Text).ToList();
}
我在for each中放置了一个try-catch,这样我就可以精确地指出出现错误的文化。以下区域性突然返回错误:

<errors>
<LCID>4096</LCID>
<Name>ar-001</Name>
</errors>
<errors>
<LCID>4096</LCID>
<Name>el-CY</Name>
</errors>
<errors>
<LCID>4096</LCID>
<Name>en-BB</Name>
</errors>
<errors>
<LCID>4096</LCID>
<Name>en-BS</Name>
</errors>
<errors>
<LCID>4096</LCID>
<Name>en-HK</Name>
</errors>
<errors>
<LCID>4096</LCID>
<Name>en-NL</Name>
</errors>
<errors>
<LCID>4096</LCID>
<Name>en-SE</Name>
</errors>
<errors>
<LCID>4096</LCID>
<Name>es-419</Name>
</errors>

4096
ar-001
4096
艾尔西
4096
恩BB
4096
恩布斯
4096
香港
4096
恩荷兰
4096
恩泽
4096
es-419

有人能帮我解决这个问题吗?我似乎无法理解为什么这个web应用突然出现这些错误。

我确认这些是刚刚添加到Azure应用程序服务中的新区域性,显然这是以创建RegionInfo失败的方式完成的。最简单的复制是:

var culture = new CultureInfo("en-HK", false).LCID;
var region = new RegionInfo(culture);
而这在以下情况下失败:

未处理的异常:System.Globalization.CultureNotFoundException:不支持区域性。
参数名称:区域性
4096(0x1000)是无效的区域性标识符。
在System.Globalization.CultureData.GetCultureData(Int32 culture,布尔bUseUserOverride)
在System.Globalization.RegionInfo..ctor(Int32文化)


我们正在进一步调查。同时,捕获异常并忽略失败的区域性是推荐的解决方法。

几乎所有Windows中的新区域设置都没有分配明确的LCID,因为没有足够的“空间”容纳数百个国家的数千种语言。它们都被分配了0x1000

在这种情况下,我认为将LCID更改为name可能适合您:

country = new RegionInfo(new CultureInfo(cul.Name, false).LCID);
要仅使用区域性名称,请执行以下操作:

country = new RegionInfo(cul.Name);
当然,LCID的任何其他用途也需要识别区域性名称

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

希望有帮助


-肖恩

我的问题与几个小时前完全一样!我强烈怀疑这是Microsoft Azure更新/更改导致的,因为我们已经好几个星期没有部署到我们的网站了。我几乎一直都会遇到以下错误(有时我实际上可以访问网站,比如说1%的时间):不支持区域性。参数名称:区域性4096(0x1000)是无效的区域性标识符。请尝试利用此powershell命令
[system.Globalization.CultureInfo]::GetCultures('AllCultures')
,通过访问中的“调试控制台>powershell”检索支持的区域性。然后尝试查找是否可以找到上述文化。我已向Azure提交了一份技术支持通知单,他们正在调查我的问题。重要提示:请阅读即将进行的更改。该博客文章中包含的解决方案解决了我的问题,谢谢@davidebo:-)请参阅Shawn Steele的答案,这更好地解释了为什么这是失败的。论坛引用LCID不支持的区域性列表。那个“需要”的名字。