【问题标题】:Exclude folder when building from VSO to Azure website从 VSO 构建到 Azure 网站时排除文件夹
【发布时间】:2015-11-07 09:02:45
【问题描述】:

我正在尝试从将 Visual Studio Online 中的 Web 项目部署到 Azure 网站的过程中排除某些文件/文件夹。
Web 项目有一个 Content 文件夹,其中包含 CSS、JS、构建脚本等,这些只是开发所必需的,一旦部署到 Azure,CSS 和 JS 就会从 CDN 加载。目前,VSO 的构建将所有这些文件复制到 Azure 中的 webroot,这是不必要的,并且在构建脚本的情况下存在潜在的安全问题。

现在我知道可以通过将文件的构建操作设置为None 来避免这种情况,但这是一个非常繁琐的解决方案,因为正在进行大量开发,新文件一直在添加,而且很容易忘记此设置。

首先我尝试在构建定义源设置中将Content 文件夹设置为Cloaked,但这只会导致VSO 在构建时不下载此文件夹,msbuild 仍会抱怨这些文件丢失。

有没有办法告诉 msbuild 忽略整个 Content 文件夹?我已经尝试在构建定义中添加 /p:ExcludeFoldersFromDeployment="Content" 作为 msbuild 参数,并且还尝试了此处 How to get Visual Studio 'Publish' functionality to include files from post build event? 中的解决方案,但没有任何效果。

【问题讨论】:

  • 为什么不部署它呢?
  • 您是否考虑过继续部署这些资产并设置备用系统,以防您的 CDN 端点不可用。阅读这篇文章 hanselman.com/blog/… 以了解我的意思。
  • @LukkhaCoder 好吧,正如我所说,在 Web 服务器上包含其中一些文件是一个潜在的安全问题。此外,复制所有这些不必要的东西会导致构建时间更长,这最终会花费我们 VSO 构建时间。
  • @cory-fowler 谢谢,是的,我们已经有第二个 CDN 作为后备。对于生产,我们还捆绑并缩小了所有 CSS 和 JS,因此我们不希望原始文件与所有开发 cmets 一起存在。

标签: msbuild azure-web-app-service azure-devops


【解决方案1】:

我正在研究 msbuild 日志文件,并提出了一个足以让我们使用的解决方案。

我学到的第一件事是我不能阻止 msbuild 将带有构建操作 Content 的文件复制到输出目录,至少在不更改 Microsoft.WebApplication.targets 文件,我不想这样做,甚至不确定是否可以使用 VSO 构建。

无论如何,我们无法在构建定义中将Content 文件夹的源设置设置为Cloaked,因为这会导致构建失败。

这个答案描述了我们最终做的事情:https://stackoverflow.com/a/3140349/1230302 因此,通过将ExcludeFoldersFromDeployment 语句添加到 .csproj 文件中,Content 文件夹将从 webroot 中排除。

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
    <OutputPath>bin\</OutputPath>
    <ExcludeFoldersFromDeployment>Content</ExcludeFoldersFromDeployment>
</PropertyGroup>

这不是一个理想的解决方案,但至少如果开发人员忘记将构建操作设置为None,则不会部署任何东西。

【讨论】:

    【解决方案2】:

    内置的持续交付选项旨在方便使用。如果你需要一些自定义的东西,比如跳过未更改的文件的部署,那么你需要自己编写一些东西。

    您可以轻松调用 PowerShell 来完成构建过程中的任何任务。

    【讨论】:

      【解决方案3】:

      如果您想自定义您的构建作为 VSO 构建系统的一部分,您可以覆盖您的 BuildTemplate.xaml 文件。

      Visual Studio Build 使用 Windows 工作流 (xaml) 来创建关于构建应该做什么的工作流。您可以在构建之前或之后编辑此文件并对目录结构进行任何修改。

      这是example

      【讨论】:

      • 这很有趣,谢谢。我不知道那件事。无论如何,事实证明我的问题是 msbuild 而不是 VSO。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2014-07-23
      • 2015-10-25
      • 2017-12-28
      • 2017-07-13
      • 1970-01-01
      相关资源
      最近更新 更多