Web 部署忽略 MSBuild 设置的 SkipExtraFilesOnServer

Web Deploy ignores SkipExtraFilesOnServer set by MSBuild

我正在使用 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>

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

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

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

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

您可能 运行 遇到的问题是将包发布到服务器的时间。当 pass SkipExtraFilesOnServer=true 被翻译成 msdeploy 选项 -enableRule:DoNotDeleteRule。在您的案例中将 发布到包 时应用(并且相关)。现在您需要确保在将包发布到服务器 时设置该选项。该选项无论如何都没有嵌入到包中。

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

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

它将 -enableRule:DoNotDeleteRule 参数添加到 msdeply,每当生成包时 SkipExtraFilesOnServer 属性 设置为 True