0

現在、かなり広範なモジュールをローカライズしようとしています。単一の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()at System.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath、Boolean permitNull)at System.Web.Hosting.HostingEnvironment.MapPathInternal(VirtualPath virtualPath)atSystem.Web.Hosting.HostingEnvironment。 MapPath(VirtualPath virtualPath)at System.Web.Hosting.HostingEnvironment.MapPath(String virtualPath)at DotNetNuke.Services.Localization.Localization.GetResourceFileCallBack(CacheItemArgs cacheItemArgs)at DotNetNuke.Common.Utilities.DataCache.GetCachedData [TObject](CacheItemArgs cacheItemArgs、 CacheItemExpiredCallback cacheItemExpired、ブールストアInDictionary)

助けてくれてありがとう


アップデート:

物理パスに変更すると、DNNコア内で問題が発生し、仮想パスに戻り、モジュール内の他の場所でコード行を変更して問題を修正しました

4

1 に答える 1

1

ここでの私の推測では、ルート相対パスを使用しています。これは、HTTPコンテキストの外部にあるため、システムに障害が発生しています。これは、提供されたスタックトレースと、「FailIfRelativePath()」メソッドの呼び出しに基づいています。

Localization.GetStringのDotNetNukeコードを見ると、通常、相対パスではなく物理ファイルパスが提供されています。これを確認するには、PortalModuleBaseから継承するモジュールコントロールで使用できるLocalResourceFileプロパティを確認します。

于 2010-12-13T14:08:59.027 に答える