目前我们正在尝试本地化我们相当广泛的模块,以及使用单个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核心内出现问题,还原到虚拟路径并更改代码行,而模块中的其他位置修复了问题
答案 0 :(得分:1)
我的猜测是你正在使用根相对路径,因为你在HTTP上下文之外系统失败了。这基于提供的堆栈跟踪和对“FailIfRelativePath()”方法的调用。
如果您查看Localization.GetString的DotNetNuke代码,通常会提供物理文件路径而不是相对路径。要确认这一点,请查看从PortalModuleBase继承的任何模块控件上可用的LocalResourceFile属性。