2011-02-24 15 views
12

使用VS2010,我創建一個名爲「TfsBuildTestTarget」一個Win32 C++控制檯應用程序。這只是嚮導創建的默認控制檯應用程序。我沒有做任何代碼或項目更改,並且按預期在VS2010中生成。使用的MSBuild與VS2010生成vcxproj文件作爲目標 - 錯誤MSB4066(「在元件屬性標籤是無法識別」)

然後,我創建了一個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" (default target) (1) -> "c:\dev\TfsBuildTestTarget\TfsBuildTestTarget.sln" (TfsBuildTe stTarget target) (2) -> (TfsBuildTestTarget target) ->
c:\dev\TfsBuildTestTarget\TfsBuildTestTarget\TfsBuildTestTarget.vcxproj(3,14): error MSB4066: The attribute "Label" in element is unrecognized.

的參考線,在( VS-生成)vcxproj文件看起來像這樣:

<ItemGroup Label="ProjectConfigurations"> 

reference for the MSBuild item element不INC lude一個Label屬性。

這是怎麼回事?爲什麼VS2010生成的項目文件看起來與MSBuild不兼容?有沒有辦法讓我將這個解決方案作爲MSBuild項目的一部分來構建,而無需手動調整XML?

回答

29

確保您使用的是.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的聯機幫助中未提及,但在msbuild 4.0模式文件中定義。

1

我用的是「打開Visual Studio命令提示符(2008)」開始菜單項來構建,它給了我同樣的錯誤,但是當我切換到「打開Visual Studio命令提示符(2010)」,我奇蹟般地解決了問題。

相關問題