ILMerge DLL: Assembly not merged in correctly, still listed as an external reference

In the build process for a .NET C# tool, I have been using ILMerge to merge the assemblies into a single exe.

I added a new class library recently, and now the ILMerge is failing. I have remembered to tell it to merge in the new DLL!

It is now giving me this error, which I don't really understand:

ILMerge.Merge: The assembly 'DataObjects' was not merged in correctly. It is still listed as an external reference in the target assembly.

All of the assembly references I have done using 'project' references, and it has not failed in the past.

Can anyone explain this error for me, or suggest a workaround please?

Upvotes: 44

Views: 18062

Answers (6)

Don Cheadle
Don Cheadle

Reputation: 5586

I got this error for System.Memory.dll which was odd. In the context of merging and deploying a Dynamics CRM Plugin dll.

I actually just ignored it and deployed my Merged DLL... trusting that Dynamics CRM's Plugin context would provide it when it's deployed.

The MergedPlugin.dll was still built even with the error about System.Memory.dll. So I just deployed the Plugin to CRM, and it worked.

Upvotes: 0

Paras Parmar
Paras Parmar

Reputation: 343

This is exactly @HughJeffner's answer as an image. It took me a while & some tries to replicate the instructions.

Locations of the fields that should NOT be identical.

Upvotes: 1

Suraj Panda
Suraj Panda

Reputation: 1

While publishing select 'Do not merge' from configure and than publish the Project

Upvotes: 0

I had to use the /closed argument. According to the official docs:

Closed

When this is set before calling Merge, then the "transitive closure" of the input assemblies is computed and added to the list of input assemblies. An assembly is considered part of the transitive closure if it is referenced, either directly or indirectly, from one of the originally specified input assemblies and it has an external reference to one of the input assemblies, or one of the assemblies that has such a reference. Complicated, but that is life...

Upvotes: 41

drzounds
drzounds

Reputation: 379

I got this error and it pointed to the Microsoft.Xrm.Sdk reference which I was merging into the single dll. The problem was fixed when I set another reference, Microsoft.Xrm.Sdk.Deployment to merge into the dll as well. Funny thing is in a separate project I had the 1st reference merging and the 2nd deployment dll not merging & it did not complain at all.

Upvotes: 1

Hugh Jeffner
Hugh Jeffner

Reputation: 2946

I got a similar error message when trying to publish a web app that merged all outputs to a single assembly:

An error occurred when merging assemblies: ILMerge.Merge: The target assembly lists itself as an external reference.

This happens if the assembly name you are merging to matches the assembly name of the web application under Properties > Application. Changing the output assembly name should fix it.

Upvotes: 8

Related Questions