【发布时间】:2015-09-22 23:35:24
【问题描述】:
我有一个使用 Visual Studio 中的“发布网站”功能部署的网站项目。我了解此功能使用调用 MSBuild 来编译站点的 WebDeploy (MSDeploy)。
网站中有一个目录需要被 WebDeploy 和 MSBuild 忽略,因为它破坏了网站。
我能够配置部署配置文件 (.pubxml) 以使 WebDeploy 忽略目录:
<PropertyGroup>
...
<ExcludeFoldersFromDeployment>node_modules</ExcludeFoldersFromDeployment>
</PropertyGroup>
我还可以通过将目录隐藏在文件系统中来编译网站。
但是,当从 WebDeploy 调用时,我无法让 MSBuild 忽略该目录。
如何在网站编译时忽略目录?
更新
编译器在失败时将其记录在输出窗口中:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.WebSite.Publishing.targets(172,5): Error MSB4018: The "CollectFilesinFolder" task failed unexpectedly.
【问题讨论】:
-
“当从 WebDeplay 调用时”是什么意思?你指的是 msdeploy.exe 吗?
-
我从解决方案资源管理器中单击“发布网站”,它会启动发布对话框。当我单击发布时,它会调用 MSDeploy,它会调用 MSBuild。
-
明白了。作为记录,实际上是相反的:MSBuild 调用 MSDeploy - MSDeploy 不依赖于 MSBuild。
-
啊,好的,很高兴知道。那么为什么当我点击“构建解决方案”时 MSBuild 可以工作,而当我点击“发布网站”时却失败了?
-
因为构建项目不会尝试将文件复制到任何地方。发布项目会将文件复制到一个临时位置,然后再打包/部署它们。