在Visual Studio 2017中构建Web应用程序时,DeployOnBuild不生效

时间:2017-09-29 15:02:43

标签: asp.net visual-studio tfs msbuild

我在VS 2017中有一个Web应用程序,我已经定义了一个发布配置文件,可以很愉快地将网站部署/发布到文件系统上的某个位置。

我知道这可以作为常规构建过程的一部分,即只是在Visual Studio或TFS构建中构建解决方案 - 并且这可以通过以下部分实现:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <DeployOnBuild>True</DeployOnBuild>    
    <PublishProfile>ProfileName</PublishProfile>
</PropertyGroup>

但是,这没有任何效果,构建输出日志只显示正常构建发生而不尝试发布。

这应该在这里和MSDN上的各种答案中提出 - 如果是这样,上面有什么问题?

(如果有人想知道,这样做的原因是由TFS构建的单个解决方案无法单独发布&gt; 1具有单独发布配置文件的Web应用程序,具体取决于构建定义MSBuildArguments设置)。

2 个答案:

答案 0 :(得分:4)

我想赞扬@ Andy-MSFT发布了一个非常接近的答案,但最后还是遗漏了一些重要的细节,并且需要进行一些修正才能使其发挥作用。

首先,工作解决方案是:

<Target Name="Deploy" AfterTargets="Build">
    <MSBuild
      Condition="'$(DeployOnBuild)'!='true' And '$(Configuration)|$(Platform)' == 'Release|AnyCPU'"
      Projects="$(ProjectPath)"
      Targets="WebPublish"
      Properties="DeployOnBuild=true;PublishProfile=FolderProfile"/>
</Target>

如果&#34; Web开发人员工具&#34; WebPublish目标仅适用于TFS构建服务器。安装Visual Studio(在我的情况下,2017年,根据问题)。请注意&#34;项目&#34;属性必须使用$(ProjectPath)设置,这也与Andy的答案不同,并且还需要这个才能工作。

答案 1 :(得分:1)

在项目文件中静态设置时,忽略了DeployOnBuild属性。显然,它是一个必须在命令行上全局设置的特殊属性。

作为解决方法,您可以再次调用MSBuild来传递属性。见How to: Extend the Visual Studio Build Process

  1. 使用文本编辑器打开.csproj文件。
  2. 在最后添加以下代码段,然后保存。

    <Target Name="AfterBuild"> <MSBuild Condition="'$(DeployOnBuild)'!='true'" Projects="$(MSBuildProjectFullPath)" Properties="DeployOnBuild=true;PublishProfile=YourPublishProfile;BuildingInsideVisualStudio=False"/> </Target>

  3. 以下帖子供您参考:

    enter image description here