Visual Studio 2012无法使用通配符和属性ItemGroup include加载项目

时间:2013-01-21 15:13:39

标签: visual-studio msbuild visual-studio-2012

我有一个简单的.vcxproj文件,如下所示:

...
<PropertyGroup>
  <MyProjectName>sample_project</MyProjectName>
</PropertyGroup>
...
<ItemGroup>
  <ClCompile Include="..\$(MyProjectName)\*.cpp" />
</ItemGroup>
...

Visual Studio 2012无法加载此项目并声明“... vcxproj:error:对象引用未设置为对象的实例。”。在命令行上运行MSBuild将按预期正常构建项目,即它将编译.. \ sample_project中的所有.cpp文件。

这两个变体可以在Visual Studio中使用:

<ClCompile Include="..\sample_project\*.cpp" />

<ClCompile Include="..\$(MyProjectName)\main.cpp" />

只是通配符和属性的组合失败。

这是Visual Studio中的错误,如果有解决方法吗?我发现了一些关于在MSBuild中使用高级通配符的东西,但是没有任何关于这个简单的构造 - 在MSBuild中有效而没有问题 - 在Visual Studio中不起作用。

提前致谢。

2 个答案:

答案 0 :(得分:1)

丢弃整个项目文件目录并从头开始重建它后,事实证明Visual Studio文件有问题不是MSBuild项目文件本身,而是.filters文件。似乎Visual Studio中的过滤无法使用此类项目列表。没有.filters文件将允许Visual Studio打开项目,一切正常。但是提供任何类型的.filters文件,甚至尝试在IDE本身添加过滤器都会导致错误消息,并且在删除过滤器文件并重新启动IDE之前,Visual Studio将拒绝使用该项目。

这个错误有点烦人,我希望我的斗争会帮助那些遇到同样问题的人。

答案 1 :(得分:1)

试试这个。

<PropertyGroup>
    <Sources>*.c</Sources>
</PropertyGroup>
<ItemGroup>
    <!-- This doesn't work... -->
    <!-- <ClCompile Include="$(Sources)" /> -->
    <!-- ...but this does. -->
    <ClCompile Include="$(Sources);Dummy" Exclude="Dummy" />
</ItemGroup>