2010-12-13 159 views
0

目前我们正在试图本地化我们相当广泛的模块,以及使用单个resx(为了便于管理),我们写了下面的代码,它返回键然而,这确实让我们在事件查看器日志消息(下面的代码)这里不允许使用相对虚拟路径'x.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,布尔permitNull)在 System.Web.Hosting.HostingEnvironment.MapPathInternal(VirtualPath virtualPath)在 系统.Web.Hosting.HostingEnvironment.MapPath(virtualPath virtualPath)在 System.Web.Hosting.HostingEnvironment.MapPath(字符串 virtualPath)在 DotNetNuke.Services.Localization.Localization.GetResourceFileCallBack在 DotNetNuke.Common(CacheItemArgs cacheItemArgs) .Utilities.DataCache.GetCachedData [TObject](CacheItemArgs cacheItemArgs, CacheItemExpiredCallback cacheItemExpired,布尔 storeInDictionary)

感谢任何帮助


UPDATE:

更改为物理路径引起了我的问题DNN的核心内,恢复回虚拟路径并更改模块中其他位置的代码行修正问题

回答

1

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

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

+0

标记答案,因为它帮助我找到问题,我真的不能看到一种方式来解释它的全部程度。 – Matt 2010-12-14 11:05:13