如何将 ILMerge 与 TFS 构建脚本一起使用?

How do I use ILMerge with TFS Builds Scripts?

我想使用 ILMerge 合并许多 .dll 作为构建的一部分 definition/script。我如何使用 TFS 2015 做到这一点?

有多种方法可以做到这一点。这是我发现的一种简单明了的方法。我将只介绍有关将 ILMerge 过程添加到已成功构建和发布构建工件的现有构建定义的部分。我还将简要介绍 ILMerge 的工作原理和获取位置。

打开构建定义进行编辑;

  • 自 Visual Studio 2015 年起,在“团队资源管理器”窗格中,导航到主页 按钮。
  • 单击项目
  • 下的'Builds'
  • 找到您的构建定义,右键单击它并选择 'Edit Build Definition'

添加一个'Command Line'构建步骤

  • 假设您处于现有构建定义的编辑模式。
  • 单击 'Build' 选项卡(如果还没有)。
  • 点击'Add build step...'。
  • 单击左侧导航栏中的 'Utility'。
  • 单击 'Command Line' 旁边的 'Add' 按钮并关闭对话框。

  • 注意:只能点击一次。已添加但对话框保持打开状态。

  • 在 'Tool' 输入中,指定:$(Build.ArtifactStagingDirectory)\ILMerge.exe

  • 注意:您可能需要根据从何处获取 ILMerge 来自定义此路径。请参阅下面的 'Referencing ILMerge' 部分。

  • 在 'Arguments' 输入中,指定类似于此示例的内容,它将五个文件合并为一个,并在构建定义名称之后命名合并的文件,这是可选的:
    
    /lib:"C:\Windows\Microsoft.NET\Framework\v4.0.30319" /out:"\SomeServer\BuildDrops\Builds$(Build.DefinitionName)$(Build.BuildNumber)$(Build.DefinitionName).dll" /log:"\SomeServer\BuildDrops\Builds$(Build.DefinitionName)$(Build.BuildNumber)\MergeLog.txt" $(Build.ArtifactStagingDirectory)\ABC.Services.dll $(Build.ArtifactStagingDirectory)\ABC.Auth.dll $(Build.ArtifactStagingDirectory)\ABC.Lib.dll $(Build.ArtifactStagingDirectory)\ABC.Content.dll $(Build.ArtifactStagingDirectory)\ABC.Test.dll /targetplatform:v4`
    </pre>

引用 ILMerge - 注意:有多种方法可以做到这一点,所以我只记下其中的几种。

1.在构建时从网络上复制 ILMerge.exe。 (推荐)

  • 点击'Add build step...'。
  • 单击左侧导航栏中的 'Utility'。
  • 单击 'Copy Files' 旁边的 'Add' 按钮。
  • 单击并拖动“复制文件”构建步骤,使其位于我们添加的 'Command Line' 之前。
  • 单击 'Copy Files' 构建步骤以便我们对其进行编辑。
  • 在 'Source Folder' 中,指定可以找到 ILMerge.exe 的网络文件夹。
  • 在'Contents'中,指定ILMerge.exe作为目录,除非你有更多的文件要复制下来。这是一个通配符搜索,指定 ILMerge.exe 是一个完全匹配搜索。
  • 在'Target Folder'中指定$(Build.ArtifactStagingDirectory)

2。将 ILMerge 复制到构建客户端计算机并在构建客户端上为其创建一个环境变量。

  • 我没有对此进行测试,因为我无法直接访问构建客户端,这就是我选择替代路径的原因。

3。您或许能够找到一种直接从网络共享中引用 ILMerge 的方法。

  • 您的里程可能会有所不同,您需要传入的参数中的相对文件路径也会有所不同。

4.将 ILMerge 的副本添加到您的一个项目中。

  • 将它放在解决方案中的什么位置并不重要,因为 ILMerge.exe 运行 post-build.

  • 如果您将 ILMerge.exe 放置在项目根目录之外的任何位置,您可能需要在 'Command Line' 构建步骤中更新工具路径并且您需要更新参数中的任何路径以反映 ILMerge.exe 的工作目录。您可能会考虑在您的路径中需要一些 '..\..\'。我没有测试过。*


参数注释:

  • /库:"C:\Windows\Microsoft.NET\Framework\v4.0.30319"

    • 您可能需要忽略或更改它。我们有一些需要支持的遗留项目。如果您需要有关此特定主题的更多信息,请查看:using ILMerge with .NET 4 libraries
  • /out:"\SomeServer\BuildDrops\Builds\$(Build.DefinitionName)\$(Build.BuildNumber)\$(Build.DefinitionName).dll" =14=]

    • 您应该能够通过进入 'Publish Build Artifacts' 步骤(在命令行构建步骤上方)并查看 'Path:' 字段来找到您的路径。您应该能够复制整个路径,然后将所需的文件名和扩展名添加到末尾。
  • log:"\SomeServer\BuildDrops\Builds\$(Build.DefinitionName)\$(Build.BuildNumber)\MergeLog.txt"

    • 包括日志是可选的。我只会用它来解决 ILMerge 问题,然后在一切正常时将其删除。
  • $(Build.ArtifactStagingDirectory)\ABC.Auth.dll

    • 这些是您打算合并在一起的 .dll。
    • 它们只是被 space 隔开。
    • Build.ArtifactStagingDirectory 是您构建的文件在构建客户端计算机上被复制到的位置。这是它们发布到官方放置路径之前的临时暂存位置。
  • /目标平台:v4

    • 同样,您可能需要对此进行调整。

其他资源: https://www.visualstudio.com/en-us/docs/build/steps/utility/command-line