TFS msbuild参数 /p:DeployOnBuild=true 似乎没有任何作用

15

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

在MSBuild参数中,我试图指定部署开关。我的项目是一个Windows服务,但我了解到无论项目类型如何(不是Web项目),都可以部署任何二进制文件。

当前的构建参数:

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

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


你需要提供一个发布配置文件。 - Andrew Clear
2
发布配置文件仅适用于Web项目。 - suresh2
@Suresh2 他们不能手动创建,然后仍然被MSBuild使用吗?毕竟,MSBuild仍然只是一个通过参数调用的命令行程序。 - jaffa
@Jaffa 从未尝试过这种方式,如果它有效,你需要创建一个发布配置文件的Windows服务版本。实际上,它是一个xml文件,位于您的项目文件夹->我的项目->发布配置文件中。为什么不尝试一下答案链接中提供的方法呢? - suresh2
2个回答

32

以备将来参考,我找到了启用除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" />
    
    如果您需要 MSDeploy 的预同步/后同步命令,遗憾的是,这不可从 MSBuild 获取。要实现此功能,您需要在项目根文件夹内拥有一个 X.Wpp.Targets(其中 X 是您的项目名称)。
  3. <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>
    

-2

谢谢您的帮助,但我想使用与Web项目部署相同的管道来实现上述目标。这可以使用WPP实现(请参见下面的答案)。 - jaffa
@jaffa 太好了。Web部署方法是否符合您的预期? - suresh2
是的,它运行得很好,谢谢。不过我不确定你的DeployService目标是如何调用的。我正在使用MSBuild 4.0的Before/AfterTargets功能与MSDeployPublish。 - jaffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接