Используя MSBuild с VSc001 -генерированным файлом vcxproj в качестве целевого - ошибка MSB4066 (атрибут "Ярлык в элементе непризнан" )
Используя VS2010, я создал консольное приложение Win32 С++ под названием "TfsBuildTestTarget". Это просто консольное приложение по умолчанию, созданное мастером. Я не делал изменений кода или проекта, и он строит ОК в 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: атрибут "Ярлык" в элементе непризнан.
Линия, на которую ссылается, в файле (vsxproj), создаваемом VS (VS-сгенерированный) выглядит следующим образом:
<ItemGroup Label="ProjectConfigurations">
Ссылка для элемента элемента MSBuild не включает атрибут Label.
Что здесь происходит? Почему VS2010 генерирует файлы проекта, которые не совместимы с MSBuild? Есть ли способ создать это решение в рамках проекта MSBuild без ручной настройки XML?
Ответы
Ответ 1
Убедитесь, что вы используете версию MSBuild.NET 4.0.
Если вы используете версию MSBuild.NET 3.5 для решения VS2010, содержащего файл vcxproj, вы получите эту ошибку.
Я создал консольное приложение С++, как вы указали, и запустило его, используя версии .NET 3.5 и .NET 4.0 MSBuild. Я получил ошибку, используя 3.5, и работал с 4.0.
Атрибут Label является новым в .NET 4.0. Его можно добавить в ItemGroup, PropertyGroup, Target и другие элементы. Атрибут метки не упоминается в онлайн-справке для msbuild, но он определен в файлах схемы it.mbbuild 4.0.
Ответ 2
Я использовал команду "Open Visual Studio Command Prompt (2008)" в меню "Пуск" для сборки, и это дало мне ту же ошибку, но когда я переключился на "Open Visual Studio Command Prompt (2010)", проблема чудесно решена.