1

次のような単純な .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 で機能しないことについては何も見つかりませんでした。

前もって感謝します。

4

2 に答える 2

1

プロジェクト ファイル ディレクトリ全体を破棄し、手動で最初から再構築した後、Visual Studio で問題が発生したファイルは、MSBuild プロジェクト ファイル自体ではなく、.filters ファイルであることが判明しました。Visual Studio のフィルタリングは、この種のアイテム リストでは機能しないようです。.filters ファイルがないと、Visual Studio でプロジェクトを開くことができ、すべて正常に動作します。ただし、任意の種類の .filters ファイルを指定したり、IDE 自体にフィルターを追加しようとすると、エラー メッセージが表示され、フィルター ファイルが削除されて IDE が再起動されるまで、Visual Studio はプロジェクトの操作を拒否します。

このバグはちょっと厄介です。私の苦労が同じ問題に遭遇した人の助けになることを願っています.

于 2013-01-22T23:32:30.553 に答える
1

これを試して。

<PropertyGroup>
    <Sources>*.c</Sources>
</PropertyGroup>
<ItemGroup>
    <!-- This doesn't work... -->
    <!-- <ClCompile Include="$(Sources)" /> -->
    <!-- ...but this does. -->
    <ClCompile Include="$(Sources);Dummy" Exclude="Dummy" />
</ItemGroup>
于 2013-02-28T16:57:14.347 に答える