我在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设置)。
答案 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
.csproj
文件。在最后添加以下代码段,然后保存。
<Target Name="AfterBuild">
<MSBuild Condition="'$(DeployOnBuild)'!='true'" Projects="$(MSBuildProjectFullPath)" Properties="DeployOnBuild=true;PublishProfile=YourPublishProfile;BuildingInsideVisualStudio=False"/>
</Target>
以下帖子供您参考: