如何在构建管道中覆盖MsBuild目标“构建解决方案”任务?

时间:2019-06-04 23:42:41

标签: azure-devops msbuild-task

我的解决方案中有2个Web项目。当我在构建管道中使用“构建解决方案任务”构建它们时,我将MS Build Params传递为“ / p:PackageAsSingleFile = true”。构建完成后,将两个项目都保存为Zip文件。但是,当我将Param修改为“ / p:PackageAsSingleFile = false”并重新生成时,我在放置文件夹中仅得到第二个项目(按生成顺序)。

当我比较两种情况的日志文件时,我找到了根本原因。当我将param设置为“ / p:PackageAsSingleFile = false”时,我看到在构建第一个项目之后,通过删除存档文件中第一个项目的构建输出,在此处发生了“ CleanWebsitesPackageCore”事件。在第二个项目构建之后,因此在最终的Drop文件夹中仅保留一个项目的Build输出。

如何覆盖此事件或阻止其删除? Microsoft Docs网站对此一无所知。文档很差。


2019-06-03T18:30:35.8155256Z CleanWebsitesPackageCore:
2019-06-03T18:30:35.8155396Z删除目录“ d:\ a \ 4 \ b \ Archive”。
2019-06-03T18:30:36.2608007Z CleanWebsitesPackage:
2019-06-03T18:30:36.2608223Z删除文件
“ d:\ a \ 4 \ b \ Archive.SourceManifest.xml”。
2019-06-03T18:30:36.2614576Z删除文件“ d:\ a \ 4 \ b \ Archive.deploy.cmd”。
2019-06-03T18:30:36.2619115Z删除文件“ d:\ a \ 4 \ b \ Archive.deploy-readme.txt”。
2019-06-03T18:30:36.2623864Z删除文件
 “ d:\ a \ 4 \ b \ Archive.SetParameters.xml”。


我希望Build生成2个文件夹,每个文件夹都有Build输出,而不要调用Delete。

1 个答案:

答案 0 :(得分:0)

  

如何在构建管道中覆盖MsBuild目标“构建解决方案”任务?

当我们检查Microsoft.Web.Publishing.targets文件时,我们可以找到以下脚本:

  <PropertyGroup>
    <CleanWebsitesPackageCoreDependsOn Condition="'$(CleanWebsitesPackageCoreDependsOn)' == ''">
      GenerateMsDeployManifestSettings;
    </CleanWebsitesPackageCoreDependsOn>
  </PropertyGroup>

  <Target Name="CleanWebsitesPackageCore" DependsOnTargets="$(CleanWebsitesPackageCoreDependsOn)">
    <!--Assertion check-->
    <CheckItemsCount Items="@(_MSDeployPackageLocation)" Condition="$(EnablePackageProcessLoggingAndAssert)">
      <Output TaskParameter="Count" PropertyName="_InternalItemsCount" />
    </CheckItemsCount>

因此,要解决此问题,我们可以尝试禁止执行该目标。您可以尝试在MSBuild参数中添加参数/p:CleanWebsitesPackageCoreDependsOn=False

如果上述方法仍不能解决您的问题,请与我们分享您的构建定义,或者您可以向我们分享一个示例演示,以便我们可以重现此问题并找到此问题的原因。

希望这会有所帮助。