Подтвердить что ты не робот

.NET 4.0 - CultureNotFoundException

Я перенес проект ASP.NET MVC 2 в VS 2010 +.NET 4.0. Теперь, когда я запускаю приложение, я получаю много "CultureNotFoundException" в окне IntelliTrace и Output/Gebug:

Первое исключение исключения типа "System.Globalization.CultureNotFoundException" произошло в mscorlib.dll

Я знаю, что означает "Случайное исключение", но когда я пытаюсь отлаживать (добавляет "CultureNotFoundException" в Bebug/Exceptions [Thrown]), почему быстр. я получил этот подробный текст исключения:

Ошибка System.Globalization.CultureNotFoundException   Message = Культура не поддерживается. Имя параметра: имя Дизайнер является недопустимым идентификатором культуры.   Источник = mscorlib   ParamName = имя   InvalidCultureName = дизайнер   Трассировки стека:        в System.Globalization.CultureInfo..ctor(Имя строки, Boolean useUserOverride)   InnerException:

Интересно, почему .NET пытается создать CultureInfo с именем "designer"?

Разве это не ошибка?

4b9b3361

Ответ 1

Кажется, проблема была ошибкой в ​​VS 2010 Beta 2.

Ответ 2

У меня была аналогичная проблема с именем CultureName "UserCache". Чтобы решить эту проблему, я удалил все папки здесь:

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

Ответ 3

Для других людей, у которых есть эта проблема, обычно это исключение, которое игнорируется.

Перейдите в меню "Отладка" → "Исключения" и убедитесь, что у вас все не отмечено для списка "Исключения".

Ответ 4

Это фактически по дизайну в System.Web(по крайней мере, до .NET Framework версии 4.0), не обязательно лучший подход, но он работает.

Здесь вы можете найти более подробное описание здесь, но в основном это происходит потому, что ASP.NET проверяет каждую отдельную папку, чтобы увидеть, содержит ли она сборки спутников, и выбрасывает исключение иначе.

Учитывая, что спутниковые сборки живут в папках с предсказуемыми именами, можно было бы задаться вопросом, почему они решили бы это сделать, а не только проверять папки, соответствующие шаблону, тем более, что обработка исключений довольно дорого по сравнению с простой условной проверкой.

Ответ 5

Мне было любопытно узнать причину, чтобы увидеть, есть ли что-то, что я мог бы лично сделать, чтобы устранить это особое раздражение.

Исключение - побочный эффект вызова: "System.Web.UI.Util.IsCultureName(имя)"

Первый раз, когда он вызвал в моем приложении MVC3, относится к каталогу под названием "UserCache", который находится в том же каталоге, что и несколько каталогов с именами ожидаемой культуры "en-US" и т.д..Net пытается найти спутниковые каталоги для приложения.

Он называется несколько раз, даже относящийся к файлам, которые являются файлами культуры, например, "EditorLocalization.bg-BG.designer.cs" (фактически все из них находятся в App_GlobalResources). [Что здесь делает код, чтобы взять все файлы в App_GlobalResources и посмотреть, заканчивается ли файл в имени CultureName, снова вызвав IsCultureName.

Итак, вы ничего не можете сделать, чтобы этого избежать... В производстве, где классов .cs не будет, возможно, этого не произойдет. Это, конечно, замедляет запуск совсем немного!

В любом случае, на мой взгляд, это полная ошибка, из-за которой Microsoft выдает исключение внутри "IsCultureName().

Ответ 6

Перейдите в "Отладка → Параметры" в Visual Studio и установите флажок "Просто мой код".

Ответ 7

У меня была похожая проблема с "CultureNotFoundException". Чтобы решить эту проблему, мне пришлось удалить все папки здесь дополнительно:

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

Удаление отсюда было недостаточно:

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

Ответ 8

Я думаю, что это настоящий дизайнер, который перепутал вещи. Попробуйте найти в своем решении строку "designer", чтобы узнать, имеют ли какие-либо атрибуты XML/HTML свои значения, установленные этой строкой.

Ответ 9

У меня появилось это сообщение об ошибке:

'ViewBag.XXXXX' выбрал исключение типа 'System.Globalization.CultureNotFoundException' dynamic {System.Globalization.CultureNotFoundException}

В внутреннем сообщении сказано:

Культура не поддерживается. \r\nParameter name: name\r\nneutral является недопустимой культурой идентификатора.

Проблема заключалась в том, что в файле AssemblyInfo.cs было неверное определение культуры сборки:

[assembly: AssemblyCulture("neutral")]

Чтобы исправить это, просто оставьте пустой параметр "культура" следующим образом:

[assembly: AssemblyCulture("")]

Это исправило проблему для меня.

Ответ 10

Я обнаружил, что включение "Включить только мой код" в разделе "Отладка" параметров Visual Studio 2017 работает для меня. Это просто скрывает те исключения, которые являются частью нормальной работы фреймворка.