使用MSBuild和VS2010生成的vcxproj文件作为目标 - 错误MSB4066(“元素中的属性标签无法识别”)

时间:2011-02-24 16:48:44

标签: visual-studio-2010 msbuild

使用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项目的一部分?

2 个答案:

答案 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)”时,我有这个问题奇迹般地解决了。