現在、VS2010を評価しており、VS2008 C ++/CLIプロジェクトを新しい.vcxproj形式にアップグレードしました。プロジェクト設定で設定した特定のプロパティが正しく変換されないことに気づきました。[構成のプロパティ]->[管理対象リソース]->[リソース論理名]で、(VS2008では)次の設定を使用していました。
$(IntDir)\$(RootNamespace).$(InputName).resources
これは、すべての.resxファイルがコンパイルされることを示していました
OurLib.SomeForm.resources
アセンブリの内部。(アセンブル時にデバッグ部分が削除されます)
MSDNによると、$(InputName)マクロは存在しないため、%(Filename)に置き換える必要があります。ただし、上記の行を変換してこれらのマクロを交換すると、拡張されないように見えます。コンパイルしようとする2番目の.resxファイルで、「LINK:致命的なエラーLNK1316:管理対象リソース名が重複しています'Debug \ OurLib。%(Filename).resources」が表示されます。これは、少なくともこの特定のプロパティでは、%スタイルマクロがここで展開されていないことを示しています。
そのプロパティに何も設定しない場合、デフォルトの動作は、次のようなプレフィックスとしてサブディレクトリを追加することであるように見えます。
OurLib.Forms.SomeForm.resources
ここで、Formsは、.resxファイルが存在するプロジェクトのサブディレクトリです。これは、.resxファイルがビルド中のプロジェクトの直接のサブディレクトリにある場合にのみ発生します。.resxファイルがディスク上の別の場所(別名.. \ OtherLib \ Forms \ SomeForm2.resx)に存在する場合、このプレフィックスは追加されません。
これにより、フォームリソースの読み込みで問題が発生します。これは、リソースを取得するための標準のForms Designerメソッドを使用している場合でも、この可能性のあるプレフィックスが考慮されていないためです。
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(SomeForm::typeid));
.resourcesファイルを名前で指定しないでください。
今説明した問題は元の質問と同じではないかもしれませんが、リソース論理名の問題を修正すると、これはすべてなくなると思います。誰かがこれらの%マクロとそれらが使用できる場所についての情報を持っていますか?