2016-11-21 5 views
1

Прежде всего, это может быть ошибкой новичков с моей стороны, я довольно новичок в .net и C#.System.Globalization.CultureInfo.GetCultures, возвращающий нуль в среде dev (Visual Studio)

Я использую систему CMS Umbraco в нашем последнем проекте, и недавнее обновление означает, что система начала использовать класс System.Globalization.CultureInfo для работы с локализацией. Это привело к многочисленным ошибкам «Культура не найден» в бэк-офисе CMS, что делает его непригодным для использования. Вот трассировки стека от одного из них:

Server Error in '/' Application. 

Culture is not supported. 
Parameter name: name 
.-no is an invalid culture identifier. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Globalization.CultureNotFoundException: Culture is not supported. 
Parameter name: name 
.-no is an invalid culture identifier. 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 


[CultureNotFoundException: Culture is not supported. 
Parameter name: name 
.-no is an invalid culture identifier.] 
    System.Globalization.CultureInfo.GetCultureInfo(String name) +12488971 
    Umbraco.Core.Services.LocalizedTextServiceFileSources.<.ctor>b__0() +573 
    System.Lazy`1.CreateValue() +180 
    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +26 
    System.Lazy`1.get_Value() +12446617 
    Umbraco.Core.Services.LocalizedTextServiceFileSources.TryConvert2LetterCultureTo4Letter(String twoLetterCulture) +61 
    Umbraco.Core.Services.LocalizedTextService.ConvertToSupportedCultureWithRegionCode(CultureInfo currentCulture) +110 
    Umbraco.Core.Services.LocalizedTextService.GetAllStoredValues(CultureInfo culture) +72 
    Umbraco.Web.Editors.BackOfficeController.LocalizedText(String culture) +123 
    lambda_method(Closure , ControllerBase , Object[]) +77 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +157 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22 
    System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225 
    System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26 
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9765121 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

Я до сих пор не совсем уверен, где-нет. Исходит из, но после того, как некоторое количество исследований в этом я попытался запустить следующий код с точкой останова вставленного :

var locale = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures); 

Это возвращает значение null и, похоже, не выбрасывает исключение нигде. Я предполагаю, что это может быть причиной ошибок, судя по трассе стека. Может быть, это проблема с моей локальной настройкой? Я запускаю Windows 10, главным образом в среде виртуализации, но он также может запускаться изначально через OSX Bootcamp, где проблема все еще кажется присутствующей. Я также попытался использовать Powershell для вывода списка установленных культур, и это отлично работает.

Если это помогает, я использую IISExpress для веб-сервера, а база данных работает под SQL Server 2016 Express.

Заранее благодарен! Дайте мне знать, если я могу предоставить дополнительную информацию, чтобы помочь с этим.

ответ

0

Используйте тот факт, что Umbraco является открытым исходным кодом.

Судя трассировки стека и исключения детали вы предоставили, проблема вызвана этой линии:

https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/src/Umbraco.Core/Services/LocalizedTextServiceFileSources.cs#L102

Видимо недопустимое значение .-no передается в GetCultureInfo метод. Если вы посмотрите немного в исходном коде, кажется, что это значение происходит от имени файла XML или содержимого XML-файла.

Я не могу обеспечить полное решение для вашей проблемы, но вот некоторые вещи, чтобы попытаться определить причину этого:

1) Чистый развертывание папки

ли полный чистый & восстановить цикл

2) Проверьте файлы XML локализации, чтобы проверить, содержат ли они соответствующие культуры

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

3) Сравнить папки «свежего» установка и папка нерабочего решения

Проверьте обновление не оставило некоторые файлы XML из предыдущих версий;

+0

Спасибо за ваш быстрый ответ. Я попытался запустить некоторые из методов Umbraco, а затем отбросить трассировку, и, по-видимому, она по умолчанию обращается к культуре «en» при запросе XML-файлов, о которых идет речь. Что странно, так это System.Globalization.CultureInfo.GetCultureInfo («en») или «en-US»/«en-GB» в моей среде dev возвращает null. Любая причина, почему это было бы? – Mieduzka