【问题标题】:Remove a DLL from the bin folder in the Build Pipeline从 Build Pipeline 的 bin 文件夹中删除一个 DLL
【发布时间】:2019-08-26 17:53:09
【问题描述】:

我有以下构建脚本,它不适用于 Azure Devops Build Pipelines。构建解决方案后,我试图从 bin 文件夹中删除特定的 DLL,该 DLL 在本地工作但不在构建管道中。

<PropertyGroup>
   <PostBuildEvent>
     cd $(TargetDir)
     del Sample.dll
   </PostBuildEvent>
</PropertyGroup>

构建解决方案定义

steps:
- task: VSBuild@1   displayName: 'Build solution'   inputs:
    solution: '$(Parameters.solution)'
    vsVersion: 15.0
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:PackageLocation="$(Build.ArtifactStagingDirectory)\\" /p:Configuration=Release'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    maximumCpuCount: true

删除

steps:
- task: DeleteFiles@1
  displayName: 'Delete files from $(Build.ArtifactStagingDirectory)'
  inputs:
    SourceFolder: '$(Build.ArtifactStagingDirectory)'
    Contents: |
     \Sage.Common.LinqBridge*\
     \Sage.Common.LinqBridge.dll*\

发布

steps:
- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    ArtifactName: '$(Parameters.ArtifactName)'
  condition: succeededOrFailed()

解决方案: 感谢@Levi Lu-MSFT 帮助我解决问题。

在删除任务中,更改删除模式有效。对于reference

steps: 
- task: DeleteFiles@1 
displayName: 'Delete files from $(Build.ArtifactStagingDirectory)' 
inputs: 
SourceFolder: '$(Build.ArtifactStagingDirectory)' 
Contents: '**\Sage.Common.LinqBridge.dll'

【问题讨论】:

    标签: msbuild azure-devops post-build-event


    【解决方案1】:

    从构建管道中的 bin 文件夹中删除一个 DLL

    我已经创建了一个样本进行测试,它在我这边运行良好。

    为解决此问题,我想提供以下故障排除:

    1. 查看构建日志,查看PostBuildEvent是否执行成功。

    2. 确保您在构建任务中指定了正确的 MSBuild 参数,例如:/property:Configuration=Release:

    3. 如果您使用的是私有代理,请确保您有权从私有代理中删除文件。或者您可以使用托管代理对其进行测试。

    更新:

    根据错误日志,我们可以知道您正在发布项目并删除构建后事件中的一个 .dll 文件。

    如果您检查日志,您会发现 MSBuild 从文件夹 obj\Release\Package\PackageTmp\bin 而不是 bin 文件夹中获取文件。这就是 Sage.Common.LinqBridge.dll 删除后仍然存在的原因。

    查看日志:

    Adding file (d:\a\8\s\xx\xxx\xxx\xxx\obj\Release\Package\PackageTmp\bin\Sage.Common.LinqBridge.dll)
    

    您无法通过删除任务删除 .zip 中的那个文件。

    要解决此问题,您可以将该 dll 文件的 Copy Local 设置为 False

    更新2:

    与mbharanidharan88交谈后,发现这个问题的原因是删除任务中的内容没有使用正确的语法。

    要只删除 bin 文件夹中的文件,我们可以使用以下语法:

    **\bin\Sage.Common.LinqBridge.dll
    

    希望这会有所帮助。

    【讨论】:

    • PostBuildEvent 执行了del 命令,但同样的 dll 仍然存在于 Artifacts 目录中?
    • @mbharanidharan88,这很奇怪。您能否分享有关您的构建任务的日志以及有关您的复制和发布构建任务的构建定义?
    • 这里是logs
    • 还用构建定义更新了问题
    • @mbharanidharan88,感谢您的快速回复。我已经检查了您的构建日志并找到了此问题的原因,您可以查看更新的答案以获取更多详细信息。
    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2017-01-28
    • 2011-03-21
    • 2020-11-08
    • 1970-01-01
    相关资源
    最近更新 更多