如何将 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
我想使用 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