Skip to content

Config File

Emerson Brito edited this page Jun 18, 2019 · 7 revisions

Creating a Configuration File

In the root of your Visual Studio project create a JSON file and name it:

ILMergeConfig.json

Copy and paste bellow content into the JSON file and tweak the properties as needed. This represents the default configuration used by ILMerge.MSBuild.Task.

{
  "General": {
    "OutputFile": null,
    "TargetPlatform": null,
    "KeyFile": null,
    "AlternativeILMergePath": null,
    "InputAssemblies": []
  },
  "Advanced": {
    "AllowDuplicateType": null,
    "AllowMultipleAssemblyLevelAttributes": false,
    "AllowWildCards": false,
    "AllowZeroPeKind": false,
    "AttributeFile": null,
    "Closed": false,
    "CopyAttributes": false,
    "DebugInfo": true,
    "DelaySign": false,
    "DeleteCopiesOverwriteTarget": false,
    "ExcludeFile": "",
    "FileAlignment": 512,
    "Internalize": false,
    "Log": false,
    "LogFile": null,
    "PublicKeyTokens": true,
    "SearchDirectories": [],
    "TargetKind": null,
    "UnionMerge": false,
    "Version": null,
    "XmlDocumentation": false
  }
}

Escaping Content

Since this is a JSON file make sure you escape characters according to JSON specification specially when entering paths where "\" should be replaced with "\\". For example:

Original Path Escaped Path
C:\MyFolder\MyLib.dll C:\\MyFolder\\MyLib.dll

You can have a look at the JSON specification or use string escape tools such as JavaScript String Escape @ freeformatter.com

Using Variables

The following variables are supported in the configuration file:

Variable Sample Value
$(ProjectDir) D:\Development\MyPluginSolution\MyPluginProject\
$(ProjectFileName) MyPluginProject.csproj
$(ProjectPath) D:\Development\MyPluginSolution\MyPluginProject\MyPluginProject.csproj
$(SolutionDir) D:\Development\MyPluginSolution\
$(SolutionPath) D:\Development\MyPluginSolution\MyPluginSolution.sln
$(TargetDir) D:\Development\MyPluginSolution\MyPluginProject\bin\Debug\
$(TargetPath) D:\Development\MyPluginSolution\MyPluginProject\bin\Debug\MyPluginProject.dll
$(TargetFileName) MyPluginProject.dll

In this example a variable is used to specify assemblies in the target directory (usually Release or Debug):

{
  "General": {
    "InputAssemblies": [
      "$(SolutionDir)libs\\Dependency1.dll",
      "$(SolutionDir)libs\\Dependency2.dll"
    ]
  }
}

Properties

The following properties can be used to change ILMerge.MSBuild.Task behavior:

Property description
AlternativeILMergePath A custom location for ILMerge.exe.
DeleteCopiesOverwriteTarget When set to true, all input assemblies (merged into the target assembly) will be deleted from the target directory.
OutputFile A custom location for the merged assembly. Default is: $(TargetDir)ILMerge$(TargetFileName)
InputAssemblies An array of assemblies to be merged into the project output. When specified, only these files will be merged (this will disable the default behavior which looks at the Copy Local property). There is no need to enter the project output.

when using InputAssemblies, there is no need to specify path if assemblies are expected to be in the output folder (copy local=true):

{
  "General": {
    "InputAssemblies": [
      "Dependency1.dll",
      "Dependency2.dll"
    ]
  }
}

All other properties are ILMerge.exe properties.

ILMerge Properties and Documentation

For documentation, download and Install ILMerge from Microsoft's website. Open the installation folder (usually C:\Program Files (x86)\Microsoft\ILMerge) and look for the document file. Each property is very well documented by Microsoft.