从 VSO 构建到 Azure 网站时排除文件夹

Exclude folder when building from VSO to Azure website

我正在尝试将某些 files/folders 从 Visual Studio 在线部署到 Azure 网站的 Web 项目中排除。
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? 中的解决方案,但没有任何效果。

内置的持续交付选项是为方便起见而设计的。如果你需要一些自定义的东西,比如跳过未更改文件的部署,那么你将需要自己写一些东西。

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

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

Visual Studio 构建使用 Windows 工作流程 (xaml) 来制定构建应该执行的工作流程。您可以在构建之前或之后编辑此文件并对目录结构进行任何修改。

这是一个example

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

我了解到的第一件事是我无法阻止 msbuild 将具有构建操作 Content 的文件复制到输出目录,至少在不更改 Microsoft.WebApplication.targets 文件,我不想这样做,甚至不确定 VSO build 是否可行。

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

这个答案中描述了我们最终做的事情: 因此,通过将 ExcludeFoldersFromDeployment 语句添加到 .csproj 文件,Content 文件夹被排除在 webroot 之外。

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

这不是一个理想的解决方案,但至少如果开发人员忘记将构建操作设置为 None