次のような単純な .vcxproj ファイルがあります。
...
<PropertyGroup>
<MyProjectName>sample_project</MyProjectName>
</PropertyGroup>
...
<ItemGroup>
<ClCompile Include="..\$(MyProjectName)\*.cpp" />
</ItemGroup>
...
Visual Studio 2012 はこのプロジェクトを読み込めず、"...vcxproj: エラー: オブジェクト参照がオブジェクトのインスタンスに設定されていません。" と表示されます。コマンド ラインで MSBuild を実行すると、プロジェクトが正常にビルドされます。つまり、..\sample_project 内のすべての .cpp ファイルがコンパイルされます。
これら 2 つのバリアントは、Visual Studio で動作します。
<ClCompile Include="..\sample_project\*.cpp" />
<ClCompile Include="..\$(MyProjectName)\main.cpp" />
ワイルドカードとプロパティの組み合わせだけでは失敗します。
これは Visual Studio のバグですか? また、回避策はありますか? 高度なワイルドカードを MSBuild で機能させることに関して、SO でいくつかのものを見つけましたが、MSBuild で問題なく動作するこのような単純な構造が Visual Studio で機能しないことについては何も見つかりませんでした。
前もって感謝します。