18

Visual Studio 2008 で使用するにはGetGlobalResourceObject()、.resx ファイルを Visual Studio の App_GlobalResources フォルダーにコピーする必要があります。アプリケーションがプリコンパイルされると、リソース ファイルは対応するサテライト アセンブリにコンパイルされ、\bin\カルチャ名によってフォルダーの下に配置されます。これはすべてうまくいきます。

ただし、アプリケーションがプリコンパイルされた後は、新しいサテライト アセンブリを追加できません。私がやったことは:

  1. サテライト アセンブリを作成しました。

    resgen resources.applicationresources.es-ES.resx resources.applicationresources.es-ES.resources al /t:lib /culture:es-ES /embed:resources.applicationresources.es-ES.resources /out:App_GlobalResources.resources.dll

  2. フォルダー\bin\es-ES\を作成し、そこに .dll ファイルを展開しました。

残念ながら、新しく追加されたサテライト アセンブリは によって認識されずGetGlobalResourceObject()、デフォルト (英語) のリソースにフォールバックします。App_GlobalResources同じ .resx ファイルをアプリケーションにコピーしてコンパイルすると、すべて正常に動作するため、リソース ファイルに問題はないようです。

私は何が欠けていますか?ところで、私のプロジェクト タイプは Web サイトであり、Web アプリケーション プロジェクトではありません。

4

2 に答える 2

0

AppDomain.CurrentDomain の AssemblyResolve イベントに接続して、実際にアセンブリを探しているかどうかを確認してください。必要な場合は、動的に読み込まれたアセンブリとそのパスのリストを保持するだけです。

AssemblyResolve に関する注意点として、アセンブリがない場合は null を返します。これがデフォルトの動作です。

于 2011-08-13T22:06:03.650 に答える
0

(@ksa さんのコメントより)

うまくいかないことの 1 つは、resgen によって生成された DLL の名前空間パスが正しくないことです。ILDASM または Reflector を使用して、動作中の DLL と生成された動作していない DLL の名前空間を比較できます。その後、resgen コマンド ラインを変更して、正しい名前空間で生成できます。

于 2011-06-30T07:53:42.600 に答える