2010-12-13 34 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.Hosting.HostingEnvironment.MapPathInternal(VirtualPath virtualPath)で System.Web.VirtualPath.FailIfRelativePath() でSystem.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath、ブールpermitNull)で DotNetNuke.CommonでDotNetNuke.Services.Localization.Localization.GetResourceFileCallBack(CacheItemArgs cacheItemArgs)で System.Web.Hosting.HostingEnvironment.MapPathで.Web.Hosting.HostingEnvironment.MapPath(VirtualPath virtualPath)(文字列 virtualPath) .Utilities.DataCache.GetCachedData [TObject](CacheItemArgs cacheItemArgsは、 CacheItemExpiredCallback は、任意のヘルプ


UPDATE感謝cacheItemExpired、ブール storeInDictionary)

:物理パスに変更

は、DNNのコア内に私の問題を引き起こしました仮想パスに戻ってコードの行を変更する他の場所でモジュール内で問題が解決される

答えて

1

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

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

+0

私はこの問題を見つけるのに役立ちました。私はこの問題を見つけるのに役立ちました。本当にすべてのことを説明する方法はありません。 – Matt

関連する問題