我们有多种工具可以将程序集合并成为一个。比如 ILMerge、Mono.Merge。前者不可定制、运行缓慢、消耗资源(不过好消息是现在开源了);后者已被弃用、不受支持且基于旧版本的 Mono.Cecil。
而本文介绍用来替代它们的 ILRepack,使用 ILRepack 来合并程序集。
以 NuGet 包的形式使用 ILRepack
ILRepack 提供了可供你项目使用的 NuGet 包。如果你在团队项目当中安装了 ILRepack 的 NuGet 包,那么无论团队其他人是否安装了 ILRepack 的工具,都可以使用 ILRepack 工具。这可以避免要求团队所有成员安装工具或者将工具内置到项目的源代码管理中。
要以 NuGet 包的形式来使用 ILRepack,需要首先安装 ILRepack 的 NuGet 包:
或者直接在你的项目的 csproj 文件中添加 PackageReference
:
<ItemGroup>
<PackageReference Include="ILRepack" Version="2.0.17" />
</ItemGroup>
我现在有一个项目 Walterlv.Demo.AssemblyLoading,这是一个控制台程序。这个程序引用了一个 NuGet 包 Ben.Demystifier。为此带来了三个额外的依赖。
- Walterlv.Demo.AssemblyLoading.exe
- Ben.Demystifier.dll
- System.Collections.Immutable.dll
- System.Reflection.Metadata.dll
而我们可以使用 ILRepack 将这些依赖和我们生成的主程序合并成一个程序集,这样分发程序的时候只需要一个程序集即可。
那么,我们现在需要编辑我们的项目文件:
<Project Sdk="Microsoft.NET.Sdk"