Merging assemblies with ILRepack
Typically, in .NET, to merge assemblies you would use ILMerge. ILRepack is another project you can use and that has had updates recently (and a lot of activity on Github).
I’ve found it useful to merge the lot of Dlls and Exe that can compose a simple app into a single executable file (think containers but without Docker), which facilitates using and distributing it. The new
.csproj file format is a great simplification and allows for tasks (as in the previous versions) in a smaller more understandable file.
To use ILRepack in a project, here are the steps you can perform to include the task during your build:
1 – add the
ILRepack package to the project you wish to merge files in
2 – validate that the
AssemblyName element is defined in the property groups in your
3 – in the
.csproj, add the following target element
3.1 – the
NetStandardLocation element is only required if you are targeting it or including a package that targets it.
3.2 – the
/lib:@(NetStandardLocation) argument in the Exec command is only required by 3.1
3.3 – adjust the
/out argument in the command to whatever you require.
4 – If you want to include the output in a package, define the package elements in a propertyGroup and include:
And that’s pretty much it. If you run build, ILRepack will be executed and build the merged file, and MSBuild will also wrap it in a NuGet package if you include the packaging step.