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

时间:2015-08-14 07:19:23

标签: msbuild azure-web-sites azure-devops

我试图将某些文件/文件夹从Visual Studio Online中的Web项目部署中排除到Azure网站 Web项目有一个Content文件夹,包含CSS,JS,构建脚本等,这些只是开发所必需的,一旦部署到Azure,CSS就会从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?中的解决方案,但没有任何工作。

3 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您想在VSO构建系统中自定义构建,则可以覆盖BuildTemplate.xaml文件。

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

这是example