3

衛星アセンブリについていくつか質問があることは知っていますが、それらを実装しようとするとまだ問題があります。

私の目標は、各カルチャを1つのアセンブリに分離し、必要に応じて一度に1つのアセンブリのみを再コンパイルできる柔軟性を提供することです。1つだけに小さな変更を加えるだけの場合は、すべての言語をコンパイルしたくありません。言語

衛星アセンブリがどのように機能するかを完全に理解したいと思います。これが私の現在の理解です:

  • サテライトアセンブリは、アプリケーション全体を再コンパイルしなくてもbinディレクトリにドロップできます。つまり、アプリが正しく機能するためにこれらのアセンブリを必要としません(フォールバックリソースが指定されている場合)。

  • SAは単一の文化にリンクする必要があります

これで、ツールを使用してSAを生成できます。alまたは、.resxファイルを追加すると、Visual Studioで生成できます。SAが作成されます(binフォルダーに、指定したカルチャのフォルダー構造を確認できます)。

質問1.これらのdllは、Visual Studioによって生成されたものと、alツールによって生成されたものと同等ですか?

質問2.これらのdllはすべて、機能するために共通の名前を共有する必要がありますか?(一貫性を保つために必要なことはわかっていますが、名前を共有していない場合、たとえば、al異なる名前を指定するツールを使用して作成する場合)、ロードする.Net Frameworkで認識できますか?

質問3.クラスを使用する場合ResourceManager、アセンブリカルチャごとに1つのインスタンスをインスタンス化する必要がありますか?(名前にカルチャが含まれているため、アセンブリ名が異なります。現在のカルチャに一致するようにロードするように埋め込みリソースファイルを手動でフォーマットし、そのアセンブリを手動でロードする必要がありますか?おそらく最初はロードされないためです。 、カルチャフォルダ内のファイルパスを指定して手動でロードする必要がありますか?)

質問4.これらのSAは.NetFrameworkによって自動的にロードされますか、それとも明示的にロードする必要がありますか?

質問5。それらをロードする必要がある場合、これは、コントロールタグで宣言的にリソースを指定する場合、それらをロードするためにカスタムリソースファクトリを作成して登録する必要があることを意味しますか?

質問6.コードなしでVisualStudioのクラスプロジェクトにいくつかのカルチャのリソースを追加すると、それらは自動的に埋め込まれます。コンパイルすると、各カルチャのサテライトアセンブリが作成されますが、これらのdllは関連していますか?名前や名前空間などで関係しているのかな

これらの質問はすべてこれに基づいています。アセンブリをbinフォルダーに追加し、でグローバルアセンブリのようなものを指定するだけResourceManagerで、別のアセンブリにある場合でもリソースが自動的に読み込まれると思いました。 (そのため、アセンブリ名や複数の衛星アセンブリがどのように関連しているかについての私の懸念)単一のアセンブリでリソースを定義する場合と同じように、を呼び出すだけですResources.MyResourceKey

私はあなたの地獄に感謝します、このトピックは私を夢中にさせています=(

4

1 に答える 1

3

resgenおよびツールが本来よりも少し複雑に見えることは知ってalいますが、目標は達成可能であると確信しています。つまり、Visual Studioソリューションの外部で衛星アセンブリを構築できます(翻訳されたものをすべて維持する必要がなくなります)。ソリューション内のリソース)が、まったく同じ結果を取得します。

質問1:はい

質問2:はい、ResourceManagerはローカライズされたリソースをロードするために命名規則に依存しています

質問3:いいえ。標準のResourceManagerを使用できます。実際、ResourceManagerを直接使用する必要はまったくありません。ソリューションに基本リソースを含め、ビルドアクション=埋め込みリソースおよびカスタムツール= PublicResXFileCodeGeneratorで構成すると、Visual Studioは、静的プロパティを介してリソースにアクセスできるクラス(resxファイルと同じ名前)を自動的に生成および維持します。 。Thread.CurrentThread.CurrentUICultureと、デプロイされているサテライトアセンブリに応じて、これらのプロパティは、サテライトアセンブリまたはベースアセンブリからローカライズされたリソースを提供します。

質問4:いいえ。ResourceManagerはそれを自動的に行います。

質問5:Q4を参照してください。何もしません。

質問6:Q2を参照してください。これは、命名規則(カルチャごとに名前が付けられたフォルダ、ベースdllに従って名前が付けられたサテライトアセンブリ)とメタデータ(alを使用してコンパイルするときに使用されるカルチャ名など)に基づいています。

于 2012-06-19T11:06:18.107 に答える