我试图将某些文件/文件夹从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?中的解决方案,但没有任何工作。
答案 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。