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

14

我使用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 ) -> "c:\dev\TfsBuildTestTarget\TfsBuildTestTarget.sln" (TfsBuildTe stTarget 目标) (2) -> (TfsBuildTestTarget 目标) ->
c:\dev\TfsBuildTestTarget\TfsBuildTestTarget\TfsBuildTestTarget.vcxproj(3,14): 错误 MSB4066: 在元素中,属性"label"无法识别。

在(由VS生成的)vcxproj文件中引用的行如下:

  <ItemGroup Label="ProjectConfigurations">

MSBuild item元素的参考文献中没有包含Label属性。

这是怎么回事?为什么VS2010生成的项目文件似乎与MSBuild不兼容?有没有办法在不手动调整XML的情况下将此解决方案作为MSBuild项目构建?

2个回答

31

请确保您正在使用.NET 4.0版本的MSBuild。

如果您使用.NET 3.5版本的MSBuild来处理包含vcxproj文件的VS2010解决方案,则会出现此错误。

我按照您指定的方式创建了一个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
我曾使用“开始菜单”中的“打开Visual Studio命令提示符(2008)”来构建,但它给了我同样的错误,但当我切换到“打开Visual Studio命令提示符(2010)”时,问题神奇地解决了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接