.NET 4.0 - CultureNotFoundException

51

我将我的ASP.NET MVC 2项目迁移到了VS 2010 + .NET 4.0。现在,当我启动应用程序时,在IntelliTrace和Output/Gebug窗口中会有很多"CultureNotFoundException":

'System.Globalization.CultureNotFoundException'类型的第一次机会异常发生在mscorlib.dll中。

我知道"A first chance exception"是什么意思,但是当我尝试调试(将“CultureNotFoundException”添加到Bebug/Exceptions[Thrown])以查明为什么会抛出该异常时,我得到了这个详细的异常文本:

System.Globalization.CultureNotFoundException出现 Message=不支持该区域性。 参数名: name designer是无效的区域性标识符。 Source=mscorlib ParamName=name InvalidCultureName=designer StackTrace: at System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride) InnerException:

我想知道为什么.NET要试图使用名称为"designer"的CultureInfo创建文化信息?

这不是一个错误吗?

10个回答

60

我遇到了与"UserCache"这个CultureName相似的问题。为了解决它,我删除了此处的所有文件夹:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

请参考 https://dev59.com/gXNA5IYBdhLWcg3wrf43 中的类似问题和解释,其中包含一个名为“uploads”的文件夹。 - eFloh
如果文件被锁定以进行删除,请终止iisexpress.exe - Youngjae
什么是 Azure 中的应用程序?我该怎么做? - alecellis1985

26

对于其他遇到此问题的人来说,通常是被忽略的异常。

前往“调试”菜单- >“异常...”,确保您在“异常列表”中的所有项未勾选。


1
有趣的是,这个错误突然出现了。在采纳您的建议取消勾选异常后,我注意到我通常看到的双列表变成了一个列表。不知道这是否有助于找出问题的根源。 - owen gerig
1
不确定为什么我现在调试时出现这个问题...我没有改变任何东西,从一刻到另一刻它开始失败了,至少我现在可以继续调试了,谢谢分享这个技巧,它帮了我大忙! - FabianSilva
3
根据您的配置,还可以通过在“选项”>“调试”>“常规”下启用“仅限我的代码”选项来修复它。 - bviale
20
忽视问题并不是解决之道。 - Randy
如果出现异常的是我使用的某个库,这样并没有什么帮助。 - Nyerguds

20

这实际上是 System.Web 中的设计(至少在 .NET Framework v4.0 之前如此),并不一定是最佳方法,但它可以工作。

您可以在此处找到更详细的描述,但基本上是因为 ASP.NET 检查每个文件夹以查看它是否包含卫星程序集,并在否则抛出异常。

考虑到卫星程序集位于具有可预测名称的文件夹中,人们会想知道为什么他们会决定这样做,而不是只检查与模式匹配的文件夹,特别是处理异常比简单条件检查要更昂贵得多。


16

我很好奇导致这个问题的原因,以便看看是否有什么我可以亲自做来消除这种特定的烦恼。

异常是调用“System.Web.UI.Util.IsCultureName(name)”的副作用

在我的MVC3应用程序中第一次调用它是关于一个名为“UserCache”的目录,该目录与几个带有预期文化名称“en-US”等的目录位于同一目录中。.Net正在尝试找到应用程序的卫星目录。

它被多次调用,甚至涉及文化文件,“EditorLocalization.bg-BG.designer.cs”例如(实际上所有这些文件都在App_GlobalResources中)。[这里代码所做的是获取App_GlobalResources中的所有文件,并查看文件是否以CultureName结尾,再次调用IsCultureName。

因此,您实际上无法避免这种情况...在生产中,.cs类将不存在,也许不会发生这种情况。虽然它肯定会拖慢启动速度!

无论如何,在我看来,微软在“IsCultureName()”内部抛出异常是完全错误的。


9

在 Visual Studio 中,前往“调试”->“选项”,然后勾选“仅仅我的代码”。


3

我曾经遇到过类似的“CultureNotFoundException”问题。为了解决这个问题,我不得不额外删除这里所有文件夹:

%LocalAppData%\Local\Temp\Temporary ASP.NET Files

仅从这里删除是不够的:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

3
我发现在Visual Studio 2017选项的调试部分开启“启用仅限我的代码”对我有用。这只是隐藏了那些异常,它们是框架正常操作的一部分。

1

我遇到了这个错误信息:

'ViewBag.XXXXX' 抛出了一个 'System.Globalization.CultureNotFoundException' 类型的异常 dynamic {System.Globalization.CultureNotFoundException}

内部消息说:

该区域设置不受支持。\r\n参数名称:名称\r\nneutral 是无效的标识符区域设置。

问题是在 AssemblyInfo.cs 文件中有一个无效的程序集区域设置定义:

[assembly: AssemblyCulture("neutral")]

为了解决这个问题,只需将“culture”参数留空,如下所示:
[assembly: AssemblyCulture("")]

这对我解决了问题。

0

我认为是实际的设计师搞砸了事情。尝试在解决方案中搜索“designer”字符串,看看是否有任何XML/HTML属性的值设置为此字符串。


我查了一下,但没有找到任何东西。 - Feryt

-4

看起来问题是 VS 2010 Beta 2 中的一个 bug。


1
哇,那是一个旧版本的VS.NET :-) - Eamon Nerbonne
5
这实际上是不正确的,伙计。这是System.Web中的一个漏洞,请看我的回复。 - Stefan Z Camilleri
这不是 VS 2010 的 bug。它在最新的 2019 更新中仍然存在问题。 - AbdulG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接