TFS msbuild args/p: DeployOnBuild = true, похоже, ничего не делает

В настоящее время я использую TFS и регулярную деятельность процесса сборки для создания решения. Тем не менее, я хотел бы иметь возможность автоматизировать развертывание, чтобы я мог создавать и развертывать удаленно на сервере за один шаг.

В аргументах MSBuild я пытаюсь указать переключатель развертывания. Мой проект - это служба Windows, но я понимаю, что по-прежнему можно развернуть любые двоичные файлы, независимо от типа проекта (не являющегося веб-проектом).

Текущие параметры сборки:

/p:DeployOnBuild=True /p:UserName=user /p:Password=password

Когда сборка работает в TFS, она преуспевает, однако я ожидал увидеть некоторую попытку развертывания на сервере и некоторое полезное сообщение об ошибке, но ничего не отображается.

Ответ 1

Для дальнейшего использования я нашел именно то, что требуется для включения развертываний для чего-либо, кроме веб-сервисов/проектов. Причина, по которой параметр DeployOnBuild ничего не делает для чего-либо, кроме веб-проектов, заключается в том, что файл проекта должен включать в себя webapplication.targets, а также PropertyGroup, содержащий путь к VSToolsPath.

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

http://www.asp.net/web-forms/tutorials/deployment/web-deployment-in-the-enterprise/building-and-packaging-web-application-projects

  1. Для передачи параметров в MSBuild вам необходим файл.pubxml (называемый профилем публикации) в папке PublishProfiles в папке свойств вашего проекта.

  2. Мне нужно следующее в.csproj файле:

    <PropertyGroup>
        <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
        <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
      </PropertyGroup>
    
      <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
      <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
      <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
    
  3. Если вам нужны команды pre-sync/post-sync для MSDeploy, к сожалению, их нет в MSBuild. Для достижения этой функциональности вам нужно иметь X.Wpp.Targets (где X - имя вашего проекта) внутри корневой папки вашего проекта.

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Target Name="UninstallService" BeforeTargets="MSDeployPublish">    
          <!-- Do exec tasks here -->
      </Target>
    
      <Target Name="InstallService" AfterTargets="MSDeployPublish">    
          <!-- Do exec tasks here -->            
      </Target>
    </Project>