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

Msbuild 从VSO构建到Azure网站时排除文件夹,msbuild,azure-web-app-service,azure-devops,Msbuild,Azure Web App Service,Azure Devops,我正在尝试将Visual Studio Online中的web项目部署到Azure网站时排除某些文件/文件夹。 web项目有一个内容文件夹,其中包含CSS、JS、构建脚本等,这些都是开发所必需的,一旦部署到Azure,CSS和JS将从CDN加载。目前,来自VSO的构建正在将所有这些文件复制到Azure中的webroot,这是不必要的,而且在构建脚本的情况下,这是一个潜在的安全问题 现在我知道,通过将文件的构建操作设置为None,可以防止这种情况发生,但这是一个非常乏味的解决方案,因为有很多开发正

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

现在我知道,通过将文件的构建操作设置为
None
,可以防止这种情况发生,但这是一个非常乏味的解决方案,因为有很多开发正在进行,新文件总是被添加,并且很容易忘记此设置

首先,我尝试在生成定义源设置中将
内容
文件夹设置为
隐藏
,但这只会导致VSO在生成时不下载此文件夹,msbuild仍会抱怨缺少这些文件


有没有办法告诉msbuild忽略整个
内容
文件夹?我已经尝试将
/p:ExcludeFoldersFromDeployment=“Content”
添加为生成定义中的msbuild参数,还尝试了此处的解决方案,但没有任何效果。

内置的连续传递选项是为了方便而设计的。当然,您需要一些定制的东西,比如跳过未更改文件的部署,然后您需要自己编写一些东西


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

如果您想将生成作为VSO生成系统的一部分进行自定义,您只需覆盖BuildTemplate.xaml文件即可

VisualStudio Build使用Windows工作流(xaml)创建一个关于该生成应该执行的操作的工作流。您可以在生成之前或之后编辑此文件并对目录结构进行任何修改

这是一个。

我在研究msbuild日志文件时,提出了一个足够好的解决方案供我们使用

我学到的第一件事是,我无法阻止msbuild将包含build action
Content
的文件复制到输出目录,至少在不更改Microsoft.WebApplication.targets文件的情况下是这样,我不想这样做,甚至不确定VSO build是否可行

无论如何,由于这一点,我们无法在生成定义中将
内容
文件夹的源设置设置为
隐藏
,因为这将导致生成失败

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

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

垃圾箱\
内容

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

为什么不部署它呢?您是否考虑过继续部署这些资产并设置后备系统,以防CDN端点不可用。。阅读本文以了解我所指的内容。@LukkhaCoder,正如我所说的,在web服务器上保存这些文件可能会带来安全问题。同时,复制所有这些不必要的内容会导致构建时间延长,这最终会花费我们VSO构建时间。@cory fowler谢谢,是的,我们已经有了第二个CDN作为后备方案。对于产品,我们还捆绑并缩小了所有CSS和JS,因此我们不希望原始文件中包含所有开发注释。这很有趣,谢谢。我不知道那件事。无论如何,事实证明,我的问题是msbuild,而不是VSO。