使用VS2010,我创建了一个名为“TfsBuildTestTarget”的Win32 C ++控制台应用程序。这只是向导创建的默认控制台应用程序。我没有做任何代码或项目更改,并且按照预期在VS2010中构建正常。
然后我按如下方式创建了一个MSBUILD项目文件:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="TfsBuildTestTarget.sln" Targets="TfsBuildTestTarget" Properties="Configuration=Release;Platform=Win32"/>
</Target>
</Project>
当我在这个项目文件上运行MSBUILD时,出现以下错误:
“C:\ dev的\ TfsBuildTestTarget \ testBuild.proj” (默认目标)(1) - &gt; “C:\ dev的\ TfsBuildTestTarget \ TfsBuildTestTarget.sln” (TfsBuildTe stTarget target)(2) - &gt; (TfsBuildTestTarget target) - &gt;
C:\ dev的\ TfsBuildTestTarget \ TfsBuildTestTarget \ TfsBuildTestTarget.vcxproj(3,14): 错误MSB4066:元素中的“标签”属性无法识别。
(VS生成的)vcxproj文件中的引用行如下所示:
<ItemGroup Label="ProjectConfigurations">
reference for the MSBuild item element不包含Label属性。
这里发生了什么?为什么VS2010生成的项目文件似乎与MSBuild不兼容?有没有办法让我在没有手动调整XML的情况下将此解决方案构建为MSBuild项目的一部分?
答案 0 :(得分:31)
确保您使用的是.NET 4.0版本的MSBuild。
如果对包含vcxproj文件的VS2010解决方案使用.NET 3.5版本的MSBuild,则会出现此错误。
我制作了一个像您指定的c ++控制台应用程序,并使用.NET 3.5和.NET 4.0 MSBuild版本运行它。我使用3.5得到了错误,它使用4.0。
Label属性是.NET 4.0中的新增功能。它可以添加到ItemGroup,PropertyGroup,Target和其他元素中。 msbuild的联机帮助中未提及label属性,但在msbuild 4.0模式文件中定义了该属性。
答案 1 :(得分:1)
我正在使用“开始菜单”的“Open Visual Studio命令提示符(2008)”条目进行构建,它给了我同样的错误,但当我切换到“打开Visual Studio命令提示符(2010)”时,我有这个问题奇迹般地解决了。