我有一个简单的.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中不起作用。
提前致谢。
答案 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>