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

时间:2019-08-23 14:02:55

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

我具有以下与Azure Devops生成管道不兼容的生成脚本。构建解决方案之后,我尝试从bin文件夹中删除一个特定的DLL,该bin在本地工作,但不能在构建管道中使用。

<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'

1 个答案:

答案 0 :(得分:1)

  

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

我已经创建了一个示例进行测试,并且对我而言效果很好。

要解决此问题,我想提供以下疑难解答:

  1. 检查构建日志,以了解PostBuildEvent是否成功执行。

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

    enter image description here

  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

Update2:

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

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

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

希望这会有所帮助。