TFS msbuild args/p:DeployOnBuild = true似乎没有做任何事情

jaf*_*ffa 13 msbuild tfs msdeploy tfs2010 tfs2012

我目前正在使用TFS和常规构建流程活动来构建解决方案.但是,我希望能够自动部署,这样我就可以一步到位地远程构建和部署服务器.

在MSBuild参数上,我试图指定部署开关.我的项目是一个Windows服务,但我知道无论项目类型如何(不是Web项目),仍然可以部署任何二进制文件.

当前构建参数:

/p:DeployOnBuild=True /p:UserName=user /p:Password=password
Run Code Online (Sandbox Code Playgroud)

当构建在TFS中运行时它成功,但是我期望看到一些尝试部署到服务器和一些有用的错误消息,但没有显示.

jaf*_*ffa 27

为了将来参考,我已经找到了为Web服务/项目以外的任何其他内容启用部署所需的确切内容.究其原因,DeployOnBuild参数没有做比web项目以外的任何事情是,该项目文件需要包括webapplication.targets和也的PropertyGroup包含路径VSToolsPath.

这里的链接给了我一个很好的介绍,关于Web部署如何工作以及如何将其集成到我的项目中以部署服务:

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

  1. 要将参数传递到MSBuild,您需要在项目属性文件夹下的PublishProfiles文件夹中使用.pubxml文件(称为发布配置文件).

  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" />
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您需要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>
    
    Run Code Online (Sandbox Code Playgroud)