【问题标题】:Ignore Directory in MSDeploy and MSBuild忽略 MSDeploy 和 MSBuild 中的目录
【发布时间】: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 可以工作,而当我点击“发布网站”时却失败了?
  • 因为构建项目不会尝试将文件复制到任何地方。发布项目会将文件复制到一个临时位置,然后再打包/部署它们。

标签: asp.net msbuild msdeploy


【解决方案1】:

您想应用跳过规则,以便同步过程完全忽略目录。

将此添加到您的 .pubxml 文件中:

<ItemGroup>
  <MsDeploySkipRules Include="SkipNodeModules">
    <AbsolutePath>node_modules</AbsolutePath>
  </MsDeploySkipRules>
</ItemGroup>

如果您遇到无法正常工作的问题,您可能会看到this problem。如果是这样,只需添加:

<PropertyGroup>
  <UseMsDeployExe>true</UseMsDeployExe>
</PropertyGroup>

【讨论】:

  • 在 MSBuild 编译时仍然失败。 node_modules 中的子目录计算路径名太长,它会中断。
  • @BillHeitstuman - 从您的项目中排除 node_modules(它们仍将存在于文件系统中)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
相关资源
最近更新 更多