此处不允许使用相对虚拟路径“x.resx”

时间:2010-12-13 11:49:58

标签: localization dotnetnuke dotnetnuke-5 dotnetnuke-module

目前我们正在尝试本地化我们相当广泛的模块,以及使用单个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,Boolean permitNull)at   System.Web.Hosting.HostingEnvironment.MapPathInternal(VirtualPath   virtualPath)at   System.Web.Hosting.HostingEnvironment.MapPath(VirtualPath   virtualPath)at   System.Web.Hosting.HostingEnvironment.MapPath(字符串   virtualPath)at   DotNetNuke.Services.Localization.Localization.GetResourceFileCallBack(CacheItemArgs   cacheItemArgs)at   DotNetNuke.Common.Utilities.DataCache.GetCachedData [TObject的](CacheItemArgs   cacheItemArgs,   CacheItemExpiredCallback   cacheItemExpired,布尔值   storeInDictionary)

感谢任何帮助


更新

更改为物理路径会导致我在DNN核心内出现问题,还原到虚拟路径并更改代码行,而模块中的其他位置修复了问题

1 个答案:

答案 0 :(得分:1)

我的猜测是你正在使用根相对路径,因为你在HTTP上下文之外系统失败了。这基于提供的堆栈跟踪和对“FailIfRelativePath()”方法的调用。

如果您查看Localization.GetString的DotNetNuke代码,通常会提供物理文件路径而不是相对路径。要确认这一点,请查看从PortalModuleBase继承的任何模块控件上可用的LocalResourceFile属性。