Относительный виртуальный путь «x.resx» здесь не разрешен - PullRequest
0 голосов
/ 13 декабря 2010

В настоящее время мы пытаемся локализовать наш довольно обширный модуль, и для чего мы используем единственный resx (для простоты управления), МЫ написали следующий код, который возвращает ключи, однако он оставляет нам сообщение в журнале просмотра событий. (под кодом)

Я также должен добавить, что не могу использовать httpcontext.current.server.mappath, поскольку функции также используются там, где нет httpcontext

Код:

Public Shared Function GetString(ByVal key As String, ByVal ParamArray params As String()) As String
            Dim SharedResourceFolder As String = "~/App_GlobalResources/"
            Dim myStr As String = Nothing
            If CultureInfo.CurrentCulture.Name <> "en-GB" Then
                myStr = Localization.GetString(key, SharedResourceFolder & "Resources." & CultureInfo.CurrentCulture.Name & ".resx")
                If myStr Is Nothing OrElse myStr = "" Then
                    myStr = Localization.GetString(key, SharedResourceFolder & "Resources." & CultureInfo.CurrentCulture.Name.Substring(0, 2) & ".resx")
                End If
            End If

            If myStr Is Nothing OrElse myStr = "" Then
                myStr = Localization.GetString(key, SharedResourceFolder & "Resources.resx")
            End If

            If myStr IsNot Nothing AndAlso myStr <> "" Then
                Return String.Format(CultureInfo.CurrentCulture, myStr, params)
            End If
            Dim res As String = Localization.GetString(key, "Resources.resx", "en-GB")
            If String.IsNullOrEmpty(res) Then
               Return Nothing
            End If
            Return String.Format(CultureInfo.InvariantCulture, res, params)
        End Function

Сообщение об ошибке:

System.ArgumentException: относительный виртуальный путь «sharedresources.resx» здесь не разрешено в System.Web.VirtualPath.FailIfRelativePath () в System.Web.Hosting.HostingEnvironment.MapPathActual (VirtualPath virtualPath, логическое allowNull) в System.Web.Hosting.HostingEnvironment.MapPathInternal (VirtualPath virtualPath) в System.Web.Hosting.HostingEnvironment.MapPath (VirtualPath virtualPath) в System.Web.Hosting.HostingEnvironment.MapPath (String virtualPath) в DotNetNuke.Services.Localization.Localization.GetResourceFileCallBack (CacheItemArgs cacheItemArgs) в DotNetNuke.Common.Utilities.DataCache.GetCachedData [TObject] (CacheItemArgs cacheItemArgs, CacheItemExpiredCallback cacheItemExpired, Boolean storeInDictionary)

благодарен за любую помощь


UPDATE:

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

1 Ответ

1 голос
/ 13 декабря 2010

Я предполагаю, что вы используете корневой относительный путь, который, поскольку вы находитесь за пределами HTTP-контекста, вызывает сбой системы. Это основано на предоставленной трассировке стека и вызове метода "FailIfRelativePath ()".

Если вы посмотрите на код DotNetNuke для Localization.GetString, обычно ему предоставляется физический путь к файлу, а не относительный путь. Чтобы подтвердить это, посмотрите на свойство LocalResourceFile, которое доступно на любом элементе управления модуля, который наследуется от PortalModuleBase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...