views:

131

answers:

3

I'd like to keep my components/assemblies clearly separated from a source code point of view but I also need in some circumstances (probably not relevant to expand) to package them in the same dll.

Is it possible to package a number of .NET assemblies in a single dll? If so, How?

IF possible, do you think it is a good idea? Why?

Any help appreciated!

+1  A: 

See

Linking .NET Assemblies

rahul
+8  A: 

Check out this article : Merging .NET assemblies using ILMerge


As you know, traditional linking of object code is no longer necessary in .NET. A .NET program will usually consist of multiple parts. A typical .NET application consists of an executable assembly, a few assemblies in the program directory, and a few assemblies in the global assembly cache. When the program is run, the runtime combines all these parts to a program. Linking at compile time is no longer necessary.

But sometimes, it is nevertheless useful to combine all parts a program needs to execute into a single assembly. For example, you might want to simplify the deployment of your application by combining the program, all required libraries, and all resources, into a single .exe file.

csc /target:library /out:ClassLibrary1.dll ClassLibrary1.cs
vbc /target:library /out:ClassLibrary2.dll ClassLibrary2.vb
vbc /target:winexe /out:Program.exe 
    /reference:ClassLibrary1.dll,ClassLibrary2.dll Program.vb

.

ilmerge /target:winexe /out:SelfContainedProgram.exe 
        Program.exe ClassLibrary1.dll ClassLibrary2.dll
Andreas Grech
But this produces an EXE file, not a DLL (?)
Peter Mortensen
same thing should be doable with a dll as output - I guess ...
JohnIdol
+5  A: 

ILMerge can merge two assemblies into one.

See here for information (the examples are for cross language, but it will work whatever tools built the assemblies).

Obviously any dependencies on the individual assemblies (pre-merge) will need to be updated/redirected.

Richard