.NET 4.0 – CultureNotFoundException
我已经将我的ASP.NET MVC 2项目迁移到VS 2010 + .NET 4.0。 现在,当我启动应用程序,我在IntelliTrace和Output / Gebug窗口中得到了很多“CultureNotFoundException”:
在mscorlib.dll中发生types为“System.Globalization.CultureNotFoundException”的第一次机会exception
我知道什么“第一次机会exception”的意思,但是当我尝试debugging(添加“CultureNotFoundException”到Bebug / Exceptions [投掷])为什么前。 被抛出我得到这个详细的例外文本:
发生System.Globalization.CultureNotFoundException消息=不支持文化。 参数名称:名称devise者是一个无效的文化标识符。 来源= mscorlib ParamName =名称InvalidCultureName =devise器StackTrace:在System.Globalization.CultureInfo..ctor(string名称,布尔useUserOverride)InnerException:
我想知道为什么.NET正在试图创build名为“devise师”的CultureInfo?
是不是bug?
我有一个与CultureName“UserCache”类似的问题。 为了解决这个问题,我从这里删除了所有的文件夹:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
对于有这个问题的其他人,这通常是一个被忽略的exception。
转到“debugging”菜单 – >“exception…”,并确保您没有选中“exception”列表中的所有内容。
我很好奇原因,看看是否有我可以亲自做的事情来消除这个特别的烦恼。
exception是调用“System.Web.UI.Util.IsCultureName(name)”的副作用
第一次在我的MVC3应用程序中调用的是一个名为“UserCache”的目录,它与几个预期文化名称为“en-US”的目录位于同一目录中.Net试图findSatellite目录为应用程序。
它被称为多次,甚至涉及文化文件,例如“EditorLocalization.bg-BG.designer.cs”的文件(实际上所有这些都在App_GlobalResources中)。 [这里的代码是在App_GlobalResources中获取所有文件,然后查看文件是否以CultureName结尾,再次调用IsCultureName。
所以没有什么事情可以避免这种情况……在.cs类不在的生产环境中,也许不会发生这种情况。 不过,这肯定会减慢启动速度!
无论如何,在我看来,这是微软在内部抛出一个exception的错误,“IsCultureName()。
这实际上是通过System.Web中的devise(至less直到.NET Framework v4.0),不一定是最好的方法,但它的工作原理。
你可以在这里find更详细的描述,但是这基本上是因为ASP.NET检查每个文件夹来查看它是否包含附属程序集,否则抛出exception。
鉴于卫星程序集生活在具有可预测名称的文件夹中,人们会问他们为什么决定这么做,而不是仅仅检查与该模式相匹配的文件夹,特别是因为与简单的有条件检查相比,处理exception的计算相当昂贵。
我认为这是真正的devise师搞砸了。 尝试search“devise器”string的解决scheme,看是否有任何XML / HTML属性的值设置为此string。
我有这个错误消息:
'ViewBag.XXXXX'抛出了一个'System.Globalization.CultureNotFoundException'types的exceptiondynamic{System.Globalization.CultureNotFoundException}
内心的信息说:
不支持该文化。\ r \ n参数名称:name \ r \ nneutral是一个无效的标识符文化。
问题是在AssemblyInfo.cs文件中有一个无效的程序集文化定义:
[assembly: AssemblyCulture("neutral")]
要解决这个问题,只需要将这个“文化”参数清空即可:
[assembly: AssemblyCulture("")]
这为我解决了这个问题。
这似乎是VS 2010 Beta 2中的一个错误。