Share on Facebook Tweet on Twitter Share on LinkedIn Share by email
Mike Barnett
Version  Date  Notes 
2.14.1208  8 December 2014  Put ILMerge into the Tools sub-folder of the NuGet package instead of the Content sub-folder.
2.14.1203  3 December 2014 Fix a bug where XML documentation for fields on nested classes was not being preserved.
2.13.307  7 March 2013   
2.12.0803  3 August 2012  Fix a bug where the delaysign option was causing a null dereference exception and terminate the merge. 
2.11.1103  3 November 2011 

Fix a bug where the runtime version of a 4.0 target assembly was incorrectly set.

Fix the way the [COMVisible] attribute is added to merged assemblies: now only top-level namespace types have it added when necessary, not any nested types and not any non-type members. 

2.11.0930  30 September 2011  Fixes two bugs in custom attributes: 1) nested generic types were not being serialized correctly, and 2) null values for type expressions were not being serialized correctly.
2.11.0502  2 May 2011  Dupliate types that are compiler generated no longer have a unique number appended to their name. The assumption is that the compiler has guaranteed that the type is unique within the assembly and since the assembly name is made part of the duplicate type's name, the number is not needed. 
2.10.0526  26 May 2010  Fixed the checking of compatible PE kinds for a bug that showed up when processing 64-bit assemblies. Now using entirely new mechanism for generics that should fix many generic-related bugs. 
2.10.0219  19 February 2010  Fixed /ver option so that it correctly implements the AssemblyVersion specification. 
2.9.1118  18 November 2009  Added v4 option for targetplatform. Added the framework directory as a location that external references will be searched for. 
2.9.1026  26 October 2009  Bug fix for array indexers: ldelem.ref instructions were getting turned into "ldelem Object" which causes peverify to be unhappy.
2.9.0727  27 July 2009  Bug fixes in underlying infrastructure. Fixed an error that showed up only when using /union option.
2.9.0210  10 February 2009  Fixed an error where ldelem.any instructions were not being merged correctly. This showed up in F# generated code.
2.8.0626  26 June 2008  Fix a small bug for attributes (i.e., their constructors) that take arrays of values. 
2.8.0502  2 May 2008  Restored the code that controls whether the /v1.1 option is recognized. A build process break caused it to be left out. 
2.8.0422  22 April 2008  Added an option, /align, that allows the file alignment of the target assembly to be set. 
2.8.0202  2 February 2008  Fixed a regression that prevented v1.1 assemblies from being merged.  28 December 2007  Fix for method security attributes.  26 December 2007  Allow Merge() to be called more than once. (This changes ILMerge's behavior only if you are using it programmatically, i.e., not from the command-line.)  29 November 2007  Many bug fixes. New /union command-line option for merging duplicate types into a single type in the target assembly. 
28 February 2007 

Fixes problem where merged assemblies ran as a 32-bit process even on a 64-bit machine.
ILMerge is now a strongly-named assembly.
Fixes a problem with adjusting the accessibility of a type when a subtype has a more restricted accessibility.
Makes sure there are no duplicate assembly names in the list of input assemblies.

Various generics fixes.

On an error, the stack trace is now written to the log.
13 February 2007  Fixes problem with running merged assemblies in the Compact Framework. 
9 February 2007 

Fixes for running merged assemblies on 64 bit machines.

Treat security attributes the same way as "regular" assembly-level attributes (i.e., the /attr and /copyattrs options).
The visibility of the hidden class now matches that of the hidden class in the "attribute assembly" (i.e., the one specified by /attr or the primary assembly if /attr is not specified).
Other bug fixes. 
12 January 2007  Bug fixes for compact framework. 
2 January 2007  Changed the default so external references are listed in the manifest with their public key token and not their full public key. Use the new option /useFullPublicKeyForReferences to get the old behavior. Many fixes for generics. Other bug fixes. 
15 August 2006  Fixed a problem with generics. May have fixed the problem with resources that were not merged properly. Now if a type gets renamed, then any associated resources are also renamed appropriately. Bug fixes. 
28 February 2006  Public keys that are longer than 1024 bits now work. Bug fixes. 
7 February 2006  Made the v1.1 version available again. But it does not have the cross-platform capabilities of the v2.0 version.
Many bug fixes. 14 December 2005  When the target platform is not v2, then if debug info had been on, it is turned off.
Added an option /allowMultiple that can be used in combination with the /copyattrs option to allow multiple instances of assembly-level attributes. But only if the attribute is defined to allow multiples, otherwise each instance overwrites any previously copied over instances.  09 December 2005  Error checking to make sure the version number gets set correctly when specified on the command line. Don't set the version number when there is an error in the version number. Release all assemblies used during the merge, not just the ones specified as input assemblies. Added a check to make sure the target assembly does not list itself as an external reference. This catches situations where ILMerge fails because of a bad user command. Xmldocs files now have the extension ".xml" instead of ".doc". Many bug fixes, especially related to generics.  08 October 2005  Some generics fixes, check up front for any null strings passed in as input assembly names.  20 September 2005 

ILMerge is now a .NET Framework version 2.0 application. That means in order to run it, the v2 CLR must be installed. To merge assemblies for previous versions of .NET, use the /v1.1 option (e.g. for version 1.1).

The /xmldocs option has been added to merge any XML documentation files that are present for the input assemblies.

Version numbers are now "2.0.0.<last digit of year><month><day>". 

1.0.2081.20884  12 September 2005  More generics fixes.
Allow "/v2" to be used in place of the targetplatform option as long as the v2 framework is in the standard location.
(Also "/v1" or "/v1.1" can be used in the same way.) Unresolved reference exceptions now print out the name of the offending assembly. 
1.0.2060.16593  22 August 2005  More generics fixes. 
1.0.2053.16481  15 August 2005  Many bug fixes related to generics and other topics.
The /allowDup option has been added to allow duplicate public types to be renamed. This allows obfuscated assemblies to be merged since
obfuscators (at least one of them) defines the same attribute in each assembly it creates. 
1.0.1952.21848  9 May 2005  The /delaysign option has been added so the target assembly can be delay signed. Note that the /snk option has been renamed to be /keyfile.
Retargetable external assembly references are now handled correctly.
Fixed the reading of serialized array types in custom attributes.
Updated the documentation. 
1.0.1923.13862  7 April 2005  All errors encountered in the Main method are now written to the Console instead of the log. It had been the case that if /log was not specified, ILMerge was silent in the face of errors.
Abort processing if any of the input assemblies has a metadata import error.
Now exclusions to internalize can use the assembly name: "\[A\].*" excludes all types in assembly A from being made non-public. The backslashes are required because the string is treated as a regular expression. The regular expression is still checked against just the type name first, so the assembly
does not need to be specified: "N.T" will exclude all types with that name no matter what assembly they are found in.
The requirement on the PeKind of each input assembly is now weaker: all must agree by either not being machine/processor-specific or have the same machine/processor-specific marking. 
1.0.1899.17933  16 March 2005  Same as previous version, but first released on MSDN which permits commercial usage. 
1.0.1896.20590  11 March 2005  Fixed a problem that cause the /wildcards option to make the searching in the search directories not
work. Correctly adjust the accessibility of methods even if they are in a nested type. Correctly implement the /copyattrs option. ILMerge is now instance-based. This should affect only its programmatic use and should be invisible when used from the command line. It might help with releasing resources acquired during merging. 
1.0.1816.20370  21 December 2004  For backward compatibility, wild cards in input assembly names are allowed only when the /wildcards option is specified. Fixed some general errors. 
1.0.1810.17247  15 December 2004  Allow wild cards in
input assembly names. 
1.0.1762.21538  28 October 2004  Last release somehow had bad bits in it which meant that exceptions were propagated to the
1.0.1760.24350  26 October 2004  Another fix for marshalling of return values. Widen
method accessibility if it is "protected" and verriding a "protected internal" method from nother input assembly. 
1.0.1733.14048  29 September 2004  General bug fixes (includes marshalling info preservation). 
1.0.1713.28770  09 September 2004  Added /zeroPeKind option, fix for marshalling of return values 
1.0.1704.20936  31 August 2004  Added /publickeytokens option, fixes for C++ assemblies. 
1.0.1698.27076  25 August 2004  General bug fixes. 
1.0.1683.11907  10 August 2004  General bug fixes. 
1.0.1663.20263  22 July 2004  Previous version produced unverifiable assemblies. (Sigh.) 
1.0.1661.24486  19 July 2004  Fix for incorrect behavior for /ndebug option and /t:exe option. General bug fixes. 
1.0.1545.17990  25 March 2004  Fixed the /t:winexe option. 
1.0.1532.17922  12 March 2004  General bug fixes. 
1.0.1528.38113  9 March 2004  Added /targetplatform option. General bug fixes. 
1.0.1508.17205  17 February 2004  General bug fixes. 
1.0.1500.21612  10 February 2004  Assembly-level attributes: /copyattrs, /attr options added.