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

时间:2017-04-28 19:37:59

标签: tfs build ilmerge build-definition

我想使用ILMerge将许多.dll合并为构建定义/脚本的一部分。我如何使用TFS 2015做到这一点?

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。这是我发现简单干净的一种方式。我只是将介绍有关将ILMerge进程添加到已成功构建和发布构建工件的现有构建定义的部分。我还将了解ILMerge如何工作以及从何处获取它。

打开构建定义以进行编辑;

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

添加一个'命令行'构建步骤

  • 假设您处于现有构建定义的编辑模式。
  • 点击'构建'标签(如果尚未显示)。
  • 点击'添加构建步骤...'。
  • 点击'实用程序'来自左侧的导航栏。
  • 点击'添加' '命令行'旁边的按钮并关闭对话框。

  • 注意:只需点击一次即可。获取已添加,但对话框保持打开状态。

  • 在'工具'输入,请指定:$(Build.ArtifactStagingDirectory)\ILMerge.exe

  • 注意:您可能需要根据从哪里获取ILMerge来自定义此路径。请参阅'引用ILMerge'以下部分。

  • 在'参数'输入,指定类似于此示例的内容,该示例将五个文件合并为一个,并在构造定义名称之后命名合并文件,该名称是可选的:
    
    /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`
    

引用ILMerge   - 注意:有很多方法可以做到这一点,所以我只注意一些。

<强> 1。在构建时从网络中复制ILMerge.exe。 (推荐)

  • 点击&#39;添加构建步骤...&#39;。
  • 点击&#39;实用程序&#39;从左侧导航栏。
  • 点击&#39;添加&#39; &#39;复制文件&#39;。
  • 旁边的按钮
  • 点击并拖动&#34;复制文件&#39;构建步骤,以便它出现在“命令行”之前。我们补充说。
  • 点击&#39;复制文件&#39;构建步骤,以便我们编辑它。
  • 在&#39;源文件夹&#39;中,指定可以找到ILMerge.exe的网络文件夹。
  • 在&#39;内容&#39;中,将ILMerge.exe指定为内容,除非您有更多要复制的文件。它是一个通配符搜索,指定ILMerge.exe是完全匹配搜索。
  • 在&#39;目标文件夹&#39;中,指定$(Build.ArtifactStagingDirectory)

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

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

第3。您可能能够找到直接从网络共享引用ILMerge的方法。

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

<强> 4。将ILMerge的副本添加到您的某个项目中。

  • 因为ILMerge.exe在构建后运行,所以将它放在解决方案中的位置并不重要。

  • 如果将ILMerge.exe放在除其中一个项目的根目录之外的任何位置,则可能需要更新“命令行”中的“工具”路径。构建步骤并且您需要更新参数中的任何路径以反映ILMerge.exe的工作目录。您可能会考虑需要一些&#39; .. \ .. \&#39;在你的路径。我没有测试过。*

参数说明:

  • / lib中:&#34; C:\的Windows \ Microsoft.NET \框架\ v4.0.30319&#34;

    • 您可能需要将其保留或更改。我们有一些我们需要支持的遗留项目。如果您需要有关此特定主题的更多信息,请查看以下内容:using ILMerge with .NET 4 libraries
  • 输入/输出:&#34; \ SomeServer \ BuildDrops \构建\ $(Build.DefinitionName)\ $(Build.BuildNumber)\ $(Build.DefinitionName).dll文件&#34;

    • 您应该能够通过进入“发布构建工件”找到自己的路径。步骤(在命令行构建步骤上方),并查看路径:&#39;领域。您应该能够复制整个路径,然后将所需的文件名和扩展名添加到最后。
  • 日志:&#34; \ SomeServer \ BuildDrops \构建\ $(Build.DefinitionName)\ $(Build.BuildNumber)\ MergeLog.txt&#34;

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

    • 这些是您打算合并在一起的.dll。
    • 他们只是被一个空间隔开。
    • Build.ArtifactStagingDirectory是构建客户端计算机上复制构建文件的位置。这是一个临时的暂存位置,然后才能发布到官方放置路径。
  • /上投放:V4

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

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