Построить VS2013 на сервере сборки TFS только с VS2013

Я создаю новый сервер сборки для поддержки миграции нашей команды разработчиков от VS2010 до VS2013. Мы еще не переносим наш сервер TFS, так что новый сервер сборки был настроен как контроллер сборки VS2010 с 2 агентами. Я также установил VS2013 на машине (метод кувалды).

Весь наш код был перенесен в целевой .Net 4.5.1 и компилируется на рабочей станции разработчика.

Большинство наших решений построены отлично, за исключением решения, содержащего веб-проекты. Эти проекты жалуются:

Не удалось найти импортированный проект "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets".

Импортированный проект использует переменную VisualStudioVersion в процессе сборки через эти две строки:

<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
...
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

который согласно этой странице:

http://msdn.microsoft.com/en-us/library/vstudio/bb383796.aspx

будет установлено значение "11.0" для целей 4.5 и 4.5.1. Но машина сборки имеет только 12.0 версию вышеуказанного пути:

"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets"

Эти же линии .csproj, кажется, используются в новом проекте VS2013, поэтому я не уверен, как это можно было бы корректно разрешить на машине сборки.

Ответ 1

Это связано с тем, что Vs2012 добавляет в файл csproj эту часть:

  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>

Вы можете безопасно удалить эту часть, и ваше решение будет построено.

Вы должны убедиться, что файл .proj начнется с <Project ToolsVersion="12", иначе при следующем запуске проекта с помощью visual studio 2010 он снова добавит удаленный node.

иначе, если вам нужно использовать webdeploy или вы используете сервер сборки, вышеуказанное решение не будет работать, но вы можете указать свойство VisualStudioVersion в своей сборке script:

msbuild myproject.csproj /p:VisualStudioVersion=12.0

или отредактируйте определение сборки:

edit build definition to specify the <code>VisualStudioVersion</code> property

Ответ 2

Что вы можете сделать, это указать свойство VisualStudioVersion при запуске msbuild на сервере сборки

msbuild myproject.csproj /p:VisualStudioVersion=12.0

Ответ 3

Я столкнулся с подобной проблемой... и вот почему. Начиная с VS2013, MSBuild поставляется как часть Visual Studio вместо .NET Framework. Обратитесь к этому блогу msdn.

Итак, чтобы решить мою проблему [правильный путь], мне пришлось использовать MSBuild из "C:\Program Files (x86)\MSBuild\12.0\bin \" вместо "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\"

Ответ 4

Вы можете исправить версию инструмента, отредактировав шаблон сборки.

Откройте файл шаблона .xaml и найдите действие "Запустить MsBuild для проекта". В свойствах есть опция для установки версии инструментов. При необходимости вы можете создать свойство уровня шаблона, чтобы упростить его настройку.

enter image description here