Ответ 1
Кажется, проблема была ошибкой в VS 2010 Beta 2.
Я перенес проект 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"?
Разве это не ошибка?
Кажется, проблема была ошибкой в VS 2010 Beta 2.
У меня была аналогичная проблема с именем CultureName "UserCache". Чтобы решить эту проблему, я удалил все папки здесь:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
Для других людей, у которых есть эта проблема, обычно это исключение, которое игнорируется.
Перейдите в меню "Отладка" → "Исключения" и убедитесь, что у вас все не отмечено для списка "Исключения".
Это фактически по дизайну в System.Web(по крайней мере, до .NET Framework версии 4.0), не обязательно лучший подход, но он работает.
Здесь вы можете найти более подробное описание здесь, но в основном это происходит потому, что ASP.NET проверяет каждую отдельную папку, чтобы увидеть, содержит ли она сборки спутников, и выбрасывает исключение иначе.
Учитывая, что спутниковые сборки живут в папках с предсказуемыми именами, можно было бы задаться вопросом, почему они решили бы это сделать, а не только проверять папки, соответствующие шаблону, тем более, что обработка исключений довольно дорого по сравнению с простой условной проверкой.
Мне было любопытно узнать причину, чтобы увидеть, есть ли что-то, что я мог бы лично сделать, чтобы устранить это особое раздражение.
Исключение - побочный эффект вызова: "System.Web.UI.Util.IsCultureName(имя)"
Первый раз, когда он вызвал в моем приложении MVC3, относится к каталогу под названием "UserCache", который находится в том же каталоге, что и несколько каталогов с именами ожидаемой культуры "en-US" и т.д..Net пытается найти спутниковые каталоги для приложения.
Он называется несколько раз, даже относящийся к файлам, которые являются файлами культуры, например, "EditorLocalization.bg-BG.designer.cs" (фактически все из них находятся в App_GlobalResources). [Что здесь делает код, чтобы взять все файлы в App_GlobalResources и посмотреть, заканчивается ли файл в имени CultureName, снова вызвав IsCultureName.
Итак, вы ничего не можете сделать, чтобы этого избежать... В производстве, где классов .cs не будет, возможно, этого не произойдет. Это, конечно, замедляет запуск совсем немного!
В любом случае, на мой взгляд, это полная ошибка, из-за которой Microsoft выдает исключение внутри "IsCultureName().
Перейдите в "Отладка → Параметры" в Visual Studio и установите флажок "Просто мой код".
У меня была похожая проблема с "CultureNotFoundException". Чтобы решить эту проблему, мне пришлось удалить все папки здесь дополнительно:
%LocalAppData%\Local\Temp\Temporary ASP.NET Files
Удаление отсюда было недостаточно:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
Я думаю, что это настоящий дизайнер, который перепутал вещи. Попробуйте найти в своем решении строку "designer", чтобы узнать, имеют ли какие-либо атрибуты XML/HTML свои значения, установленные этой строкой.
У меня появилось это сообщение об ошибке:
'ViewBag.XXXXX' выбрал исключение типа 'System.Globalization.CultureNotFoundException' dynamic {System.Globalization.CultureNotFoundException}
В внутреннем сообщении сказано:
Культура не поддерживается. \r\nParameter name: name\r\nneutral является недопустимой культурой идентификатора.
Проблема заключалась в том, что в файле AssemblyInfo.cs было неверное определение культуры сборки:
[assembly: AssemblyCulture("neutral")]
Чтобы исправить это, просто оставьте пустой параметр "культура" следующим образом:
[assembly: AssemblyCulture("")]
Это исправило проблему для меня.
Я обнаружил, что включение "Включить только мой код" в разделе "Отладка" параметров Visual Studio 2017 работает для меня. Это просто скрывает те исключения, которые являются частью нормальной работы фреймворка.