【问题标题】:Web Deploy ignores SkipExtraFilesOnServer set by MSBuildWeb 部署忽略 MSBuild 设置的 SkipExtraFilesOnServer
【发布时间】:2015-06-25 14:28:38
【问题描述】:

我正在使用 MSBuild 在我们的 CruiseControl 服务器上创建一个 Web 部署包,以部署我们的 Web 应用程序。在部署时,包中没有的所有内容都将在我们的服务器上删除。

我尝试将选项 SkipExtraFilesOnServer 选项设置为 true。但它被 Web Deploy 忽略了

<Target Name="CreateDeploymentPackage">
    <MSBuild Projects="$(Web)" Targets="Package"
      properties="Platform=$(Platform);
      Configuration=$(Configuration);
      DeployOnBuild=False;
      DeployTarget=Package;
      SkipExtraFilesOnServer=True;
      MSDeployUseChecksum=True;
      PackageLocation=$(DeployDirectory)\_PublishedWebsites\DeployPackage\$(CurrentProject).zip;
      PackageAsSingleFile=True;
      _PackageTempDir=$(PackageOutputDir)\temp;">
    </MSBuild>
</Target>

为什么这不起作用?我找到的每个文档都说应该。

【问题讨论】:

  • 我认为“SkipExtraFilesOnServer”仅在直接从 MSBuild (DeployTarget=MSDeployPublish) 部署时使用。该设置不包含在部署包中。
  • @StevenLiekens 不适用(尽管它的名称不适合包装案例)。我认为他遇到了其他问题,我已经在下面回答了。
  • @SayedIbrahimHashimi 你不是创建网络部署的人之一吗?
  • @spankmaster79 您是使用生成的部署脚本,还是直接从 CruiseControl 中的exec 任务执行 msdeploy.exe?
  • @StevenLiekens 我拥有基于 MSDeploy 以及其他技术的 Visual Studio 中的 Web 发布体验,但我不直接使用 MSDeploy。

标签: asp.net msbuild package msdeploy


【解决方案1】:

我不是 100% 关注你,但我想我明白这里发生了什么。这是我对您的情况的理解。

您已将构建服务器配置为执行以下操作。

  1. 使用 msbuild.exe 构建 Web 部署包
  2. 您在创建包时设置了SkipExtraFilesOnServer=true
  3. 使用 msdeploy.exe 发布 Web 部署包

您可能遇到的问题是软件包发布到服务器时。当 pass SkipExtraFilesOnServer=true 被转换为 msdeploy 选项 -enableRule:DoNotDeleteRule。在您的情况下发布到包时应用(并且相关)。现在您需要确保在将包发布到服务器时设置了该选项。无论如何,该选项都没有嵌入到包中。

【讨论】:

  • 在 IIS 管理器中导入包而不是使用生成的帮助脚本时,您将如何处理?
  • @StevenLiekens 我使用了 UI,但最近没有使用,是否有保留其他文件的选项?如果没有那就不好了。
  • 使用 MSBuild 创建包时似乎未应用 DoNotDelete 规则。当手动将其添加到执行的 .cmd 时,它实际上可以工作
  • @SayedIbrahimHashimi .cmd 文件是否应该包含-enableRule:DoNotDeleteRule 命令选项?我在里面没看到。
  • 手动添加规则有效。所以我会推荐这个解决方案
【解决方案2】:

您可以通过设置不同的属性来影响生成的.publish.cmd 文件。如果您想将SkipExtraFilesOnServer 属性翻译成-enableRule:DotNotDeleteRule,您可以将其添加到您的.csproj-文件中:

<PropertyGroup>
  <_GenerateSampleDeployScript_AfterSet_Destination
      Condition="$(SkipExtraFilesOnServer) == 'True'">
    set _MsDeployAdditionalFlags=%_MsDeployAdditionalFlags% -enableRule:DoNotDeleteRule
  </_GenerateSampleDeployScript_AfterSet_Destination>
</PropertyGroup>

无论何时生成包并将SkipExtraFilesOnServer 属性设置为True,它都会将-enableRule:DoNotDeleteRule 参数添加到msdeply。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2016-04-18
    • 2012-02-21
    相关资源
    最近更新 更多