从 Visual Studio 2015 构建时自动发布 Web 应用程序

Posted

技术标签:

【中文标题】从 Visual Studio 2015 构建时自动发布 Web 应用程序【英文标题】:Automatically publish web application on build from Visual Studio 2015 【发布时间】:2017-03-13 10:23:54 【问题描述】:

有没有办法在成功构建时使用预先创建的发布配置文件自动发布 Web 应用程序? 我不想点击发布图标,需要在 Visual Studio 2015 上成功构建 Web 项目时发生这种情况 - 不使用宏。

任何样品都将不胜感激!

【问题讨论】:

【参考方案1】:

Rami 的解决方案有效,但它需要另一个“构建”通道。虽然这实际上不会重新编译,但如果您的解决方案很大,它仍然会导致不必要的延迟。

您无法通过 DeployOnBuild 触发 Web 发布,因为从 Visual Studio 构建时会自动禁用该功能。

但是,您可以通过一些 MSBuild 技巧将进程作为同一 MSBuild 调用的一部分触发:

<!-- In Directory.Build.props or the csproj (before the web targets import) -->
<PropertyGroup>
  <PublishProfile>Local</PublishProfile>
</PropertyGroup>

还有:

<!-- After the above, or in ProjectName.wpp.targets -->
<PropertyGroup>
  <AutoPublish Condition="'$(AutoPublish)' == '' and '$(Configuration)' == 'Debug' and '$(BuildingInsideVisualStudio)' == 'true' and '$(PublishProfile)' != ''">true</AutoPublish>

  <AutoPublishDependsOn Condition="'$(AutoPublish)' == 'true'">
    $(AutoPublishDependsOn);
    WebPublish
  </AutoPublishDependsOn>
</PropertyGroup>

<Target Name="AutoPublish" AfterTargets="Build" DependsOnTargets="$(AutoPublishDependsOn)">
</Target>

如果您在进行内容更改时发现您的发布项目并未构建,请添加以下内容:

<!-- csproj ONLY, won't work elsewhere -->
<PropertyGroup>
  <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>

【讨论】:

我已经在一个 VB ASP.NET 网站上实现了您的解决方案,并且确实在构建该网站时它也部署到了我的本地文件夹中。但是,尽管我的发布配置文件指定删除现有文件&lt;DeleteExistingFiles&gt;True&lt;/DeleteExistingFiles&gt;,但该设置被忽略。这意味着当我从 VS UI 发布时,目标文件夹中的文件被删除,但是当使用您的代码时,现有文件仍然存在(MSBuild 在它的输出中还说它正在跳过现有的未修改文件并且也没有删除目标目录中的文件不再发布)。有什么想法吗?【参考方案2】:

将以下内容添加到您的项目文件中:

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

PublishProfile(上例中为Local)的值是您要运行的发布配置文件的名称。

来源:https://www.dotnetcatch.com/2017/03/24/publish-webdeploy-automatically-with-vs-build/https://***.com/a/41830433/90287

【讨论】:

这个解决方案对我很有效。我使用了&lt;Target Name="PostBuild" AfterTargets="PostBuildEvent"&gt; 并将 MSBuild 任务的条件修改为仅在发布版本上运行:Condition=" '$(DeployOnBuild)' != 'true' and '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "【参考方案3】:

尝试如下,

msbuild mysln.sln /p:DeployOnBuild=true /p:PublishProfile=<profile-name>

您必须在项目属性中将以下内容作为构建参数传递。

/p:DeployOnBuild=true 
/p:PublishProfile=<profile-name>

【讨论】:

谢谢,我尝试在 csproj 文件中添加这些构建参数,然后从 IDE 构建项目,但没有按预期工作。 ... ... truesitecorejumpstart 有什么想法吗? 你能检查这个链接social.msdn.microsoft.com/Forums/vstudio/en-US/… 你也可以分享你尝试构建时得到的输出文本(来自输出窗口)。 感谢您的链接,我查看了那里,但提到的问题似乎与未安装 Visual Studio 的服务器部署有关。这是项目构建的诊断输出。我会很感激任何帮助! dropbox.com/s/eb9ho6eugra2zn5/DiagnosticBuildOutput.txt?dl=0 另外,这里是项目文件dropbox.com/s/tollt67muzcatm4/Epsilon.Web.Shared.txt?dl=0

以上是关于从 Visual Studio 2015 构建时自动发布 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 10 中从命令行构建 Visual Studio 2015 vb 解决方案

与 2013 相比,Visual Studio 2015 构建速度较慢

如何从 Visual Studio 2015 更新 3 中的构建中排除 node_module 文件夹

从 Visual Studio 2015 企业更新 1 面向 Windows XP

从 Visual Studio 文件构建动态库

.cpp 文件中的 Visual Studio 2015 IntelliSense #included 作为标头