Solved

Merging .NET assemblies using ILMerge

Posted on 2009-07-10
3
1,031 Views
Last Modified: 2013-11-26
I am having trouble making ILMerge merge several assemblies into one. Even when I create a completely stripped down solution with three basic projects, the executable doesn't behave.

The ILMerge command runs without error:
ilmerge /target:winexe /out:ModuleMerging.exe Com.Fjaer.Test.ModuleMerging.Console.exe Com.Fjaer.Test.ModuleMerging.Library1.dll Com.Fjaer.Test.ModuleMerging.Library2.dll

However, when running the new exe, it crashes when it reach the line System.Console.ReadKey(); As it crashes immediately, I haven't been able to attach and debug the application at the point where it crashes, so I don't have an Exception that explains what happens.

Also, when I comment out the line the crashes, the rest of the code doesn't seem to run at all. When running the original exe the WriteLine statements are printed as expected:
In Class2
In Class1
In Program
... while the exe created by ILMerge prints nothing, but still exits without any exception or error code.

I'm theorizing that there must be something either about the security settings on the new assembly, or that the new assembly doesn't have a starting point telling it to run Main().

The test solution can be found here:
http://www.sharefile.org/showfile-1565/comfjaertestmodulemerging.zip
The ILMerge.exe command runs post-build.

ILMerge:
http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en

Any advice?

Thanks,
Håvard Fjær
www.fjær.no

// Project: Com.Fjaer.Test.ModuleMerging.Console

// References: 

//  - System 

//  - Com.Fjaer.Test.ModuleMerging.Library1

using Com.Fjaer.Test.ModuleMerging.Library1;
 

namespace Com.Fjaer.Test.ModuleMerging.Console

{

    internal class Program

    {

        private static void Main(string[] args)

        {

            var class1 = new Class1();

            System.Console.WriteLine("In Program");

            // System.Console.ReadKey();

        }

    }

}
 
 
 

// Project: Com.Fjaer.Test.ModuleMerging.Library1

// References: 

//  - System 

//  - Com.Fjaer.Test.ModuleMerging.Library2

using System;

using Com.Fjaer.Test.ModuleMerging.Library2;
 

namespace Com.Fjaer.Test.ModuleMerging.Library1

{

    public class Class1

    {

        public Class1()

        {

            var class2 = new Class2();

            Console.WriteLine("In Class1");

        }

    }

}
 
 
 

// Project: Com.Fjaer.Test.ModuleMerging.Library2

// References: 

//  - System 

using System;
 

namespace Com.Fjaer.Test.ModuleMerging.Library2

{

    public class Class2

    {

        public Class2()

        {

            Console.WriteLine("In Class2");

        }

    }

}

Open in new window

0
Comment
Question by:havard-fjaer
  • 2
3 Comments
 
LVL 8

Accepted Solution

by:
dericstone earned 500 total points
ID: 24832042
Your sample application is a console application but the ilmerge command-line option /target:winexe tells ilmerge to create a Windows application. Instead, change to the command-line option to /target:exe to create a console application.
0
 
LVL 2

Author Closing Comment

by:havard-fjaer
ID: 31602054
Right you are, Sir. 500 kudos to you!

A quick question, as we are on the subject: Do you know if there are any common problems associated with merging assemblies? When reflecting attributes on assemblies, for instance. Are those individual attributes still part of the merged assemblies?
0
 
LVL 8

Expert Comment

by:dericstone
ID: 24847327
Glad I could help. As far as I know the merged assemblies should work just like the original assemblies, but I don't recall specifically testing reflection on merged assemblies.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

26 Experts available now in Live!

Get 1:1 Help Now