ILRepack.Lib 2.0.31

dotnet add package ILRepack.Lib --version 2.0.31
NuGet\Install-Package ILRepack.Lib -Version 2.0.31
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ILRepack.Lib" Version="2.0.31" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ILRepack.Lib --version 2.0.31
#r "nuget: ILRepack.Lib, 2.0.31"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ILRepack.Lib as a Cake Addin
#addin nuget:?package=ILRepack.Lib&version=2.0.31

// Install ILRepack.Lib as a Cake Tool
#tool nuget:?package=ILRepack.Lib&version=2.0.31

Build status NuGet GitHub license
Gitter chat

Introduction

ILRepack is meant at replacing ILMerge / Mono.Merge.

The former being closed-source (now open-sourced), impossible to customize, slow, resource consuming and many more. The later being deprecated, unsupported, and based on an old version of Mono.Cecil.

Here we're using latest (slightly modified) Cecil sources (0.11.5), you can find the fork here.

Downloads

You can grab it using NuGet.

Or if you're old-school (and want to stay like that), this direct link will give you the latest nupkg file, which you can open as a zip file.

Syntax

A console application is available (can be used as DLL as well), using same syntax as ILMerge:

Syntax: ILRepack.exe [options] /out:<path> <path_to_primary> [<other_assemblies> ...]

 - /help                displays this usage
 - /keyfile:<path>      specifies a keyfile to sign the output assembly
 - /keycontainer:<name> specifies a key container to sign the output assembly (takes precedence over /keyfile)
 - /log:<logfile>       enable logging (to a file, if given) (default is disabled)
 - /ver:M.X.Y.Z         target assembly version
 - /union               merges types with identical names into one
 - /ndebug              disables symbol file generation
 - /copyattrs           copy assembly attributes (by default only the primary assembly attributes are copied)
 - /attr:<path>         take assembly attributes from the given assembly file
 - /allowMultiple       when copyattrs is specified, allows multiple attributes (if type allows)
 - /target:kind         specify target assembly kind (library, exe, winexe supported, default is same as first assembly)
 - /targetplatform:P    specify target platform (v1, v1.1, v2, v4 supported)
 - /xmldocs             merges XML documentation as well
 - /lib:<path>          adds the path to the search directories for referenced assemblies (can be specified multiple times)
 - /internalize[:<excludefile>]  sets all types but the ones from the first assembly 'internal'. <excludefile> contains one regex per
                                 line to compare against FullName of types NOT to internalize.
 - /renameInternalized  rename all internalized types
 - /excludeinternalizeserializable do not internalize types marked as Serializable
 - /delaysign           sets the key, but don't sign the assembly
 - /usefullpublickeyforreferences - NOT IMPLEMENTED
 - /align               - NOT IMPLEMENTED
 - /closed              - NOT IMPLEMENTED
 - /allowdup:Type       allows the specified type for being duplicated in input assemblies
 - /allowduplicateresources allows to duplicate resources in output assembly (by default they're ignored)
 - /zeropekind          allows assemblies with Zero PeKind (but obviously only IL will get merged)
 - /wildcards           allows (and resolves) file wildcards (e.g. `*`.dll) in input assemblies
 - /parallel            use as many CPUs as possible to merge the assemblies
 - /pause               pause execution once completed (good for debugging)
 - /repackdrop:AttributeClass allows dropping specific members during merging (#215)
 - /verbose             shows more logs
 - /out:<path>          target assembly path, symbol/config/doc files will be written here as well
 - <path_to_primary>    primary assembly, gives the name, version to the merged one
 - <other_assemblies>   ...

Note: for compatibility purposes, all options can be specified using '/', '-' or '--' prefix.

How to build

Builds directly from within Visual Studio 2022, or using msbuild:

git clone --recursive https://github.com/gluck/il-repack.git
cd il-repack
msbuild

TODO

  • Crash-testing
  • Add remaining features from ILMerge (closed / align)
  • Un-fork Cecil
  • Merge import process & reference fixing

DONE

  • PDBs & MDBs should be merged (Thanks Simon)
  • Fixed internal method overriding public one which isn't allowed in the same assembly (Simon)
  • Attribute merge (/copyattrs)
  • XML documentation merge
  • Clean command line parameter parsing
  • Add usage / version
  • App.config merge
  • Internalizing types (Simon)
  • Delay signing (Simon)
  • Target platform selection (Simon)
  • Automatic internal type renaming

Sponsoring / Donations

If you like this tool and want to express your thanks, you can contribute either time to the project (issue triage or pull-requests) or donate money to the Free Software Foundation.

Donate

Product Compatible and additional computed target framework versions.
.NET Framework net472 is compatible.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on ILRepack.Lib:

Package Downloads
OTAPI.Patcher

The Patching Engine for the Open Terraria API (OTAPI)

MockEverything

A tampering mechanism which makes it possible to rewrite methods, getters, setters and constructors of third-party libraries used by the tested code.

GitHub repositories (2)

Showing the top 2 popular GitHub repositories that depend on ILRepack.Lib:

Repository Stars
realm/realm-dotnet
Realm is a mobile database: a replacement for SQLite & ORMs
Thealexbarney/VGAudio
A library for encoding, decoding, and manipulating audio files from video games.
Version Downloads Last updated
2.0.31 105 4/21/2024
2.0.30 128 4/5/2024
2.0.28 141 3/19/2024
2.0.26 434 1/10/2024
2.0.25 135 1/8/2024
2.0.24 125 1/7/2024
2.0.18 32,297 9/8/2019
2.0.17 1,114 5/21/2019
2.0.16 10,814 7/30/2018
2.0.15 14,059 12/7/2017
2.0.14 1,022 11/21/2017
2.0.13 4,711 4/6/2017
2.0.12 2,468 10/24/2016
2.0.11 1,074 8/22/2016
2.0.10 2,877 1/8/2016
2.0.9 1,160 12/16/2015
2.0.8 1,530 10/6/2015
2.0.7 1,365 10/5/2015
2.0.5 1,315 8/19/2015
2.0.4 1,286 7/30/2015
2.0.3 1,244 7/22/2015
2.0.2 1,379 6/18/2015
2.0.1 1,111 6/14/2015
2.0.0 1,142 6/7/2015
1.26.0 1,329 5/2/2015
1.25.0 2,279 2/17/2014
1.24.0 1,204 1/20/2014
1.23.0 1,217 12/16/2013
1.22.2 1,652 3/3/2013
1.22.1 1,236 3/3/2013
1.22.0 1,372 3/3/2013