2

ソリューションをVS2008からVS2010に移行するときに問題が発生します。問題は、管理対象リソースが正しい名前で埋め込まれていないため、実行時に見つからない場合があることです。

「指定されたカルチャまたはニュートラルカルチャに適切なリソースが見つかりませんでした。コンパイル時に「Production.ViewDocument.resources」がアセンブリ「RSProcess」に正しく埋め込まれているかリンクされていること、または必要なすべてのサテライトアセンブリがロード可能で完全にロード可能であることを確認してください署名しました。」

System.Resources.MissingManifestResourceExceptionは通常、タイプIDを渡して作成されたリソースに対するApplyResourcesの呼び出しでInitializeComponentがスローされます。私の場合、名前空間はProductionで、クラス名はViewDocumentです。ただし、(ViewDocument.resxから)生成されたリソースは、resxファイルが存在するフォルダー構造(この場合はProduction.folder1.folder2.ViewDocument.resources)から名前が付けられます。

VS2008では、.resxファイルの設定で(デフォルトの)論理名をオーバーライドできます。管理対象リソース/一般/リソース論理名。VS2010では、これを機能させることができません。この設定を完全に無視するだけです。これを解決する他の方法はありますか?

最後の手段は、現在のフォルダー構造を削除し、すべてのファイルをルートプロジェクトフォルダーに移動することですが、私の場合、これはかなりの作業のようです。

助言がありますか?

4

1 に答える 1

3

私は自分自身の質問に対する答えを見つけました!

VS2010 ではいくつかの変更があり、私を混乱させました。まず、VS2008 では、.resource ファイルの名前はプロジェクト設定の [リソースの論理名] の影響を受けていました。VS2010 では、ファイルは常にプロジェクトのルート名前空間とフォルダー構造 (拡張名前空間) に従って名前が付けられます。第 2 に、移行時にこれらの設定が空白になっていました。これはおそらく、%(Filename) に置き換えられたマクロ $(InputFile) を使用したためです。

この問題を解決するために、プロジェクト レベル (またはプロジェクト プロパティ ページを使用することもできます) で 'Resource Logical Name' を $(RootNamespace).%(Filename).resources に定義しました。.resource ファイルは引き続き拡張名を取得することに注意してください (ファイルが存在するフォルダーによって定義されます)。ただし、MSBuild のログ ファイルを確認すると、リソース ファイル名に加えて、リンカへの /ASSEMBLYRESOURCE スイッチに論理名が表示されていることがわかります。再構築後、ComponentResourceManager は、ビューのタイプ (この場合は Rootnamespace.filename) を使用して「InitializeComponent」内のリソースを検索します。また、これはビュークラスがクラスと同じ名前のファイルに配置されていることを前提としていることにも注意してください!

于 2012-09-13T10:55:24.207 に答える