Daniel Szabo
Daniel Szabo

Reputation: 7281

Is it possible to compile a console application into a single .dll file?

There are 5 console apps working off each other's outputs and are separately installed on my computer (C# 4.0, I am the author) . Management would like to distribute this suite of apps to other users, but aren't thrilled about asking non-tech users to install/configure 5 separate applications. Is there any way I can compile each program down into a .dll and reference them through a single master application?

Upvotes: 1

Views: 2007

Answers (5)

sehe
sehe

Reputation: 392833

Q. The main issue seems to be that you don't want 5 separate installation steps?

A. Make an installer for the suite :) Use any MSI builder (WiX, Visual Studio setup projects, InstallShield, and many others; Heck, you could even do an XCOPY deployment in most cases)


Q. How do I directly invoke these programs from within a single process?

A. Options:

  1. Load the assemblies in your AppDomain.
  2. Use a separate AppDomain in case of name(space) conflicts or version conflicts

Q. How do I optionally 'hide' the presence of the external console apps from view

A. Look at ilmerge to possibly combine the 'external' assemblies so they aren't visible anymore. If you can't use ilmerge (conflicts, or e.g. WPF apps) you might embed them as resources and load them on demand as per 1. and 2. above

Update: https://libz.codeplex.com/ is a nice looking project that makes this easy (haven't tried it myself)

Upvotes: 2

svick
svick

Reputation: 244757

Just because each of them is a separate .exe file doesn't mean you can't treat them as one application. And they don't have to be installed or configured separately either.

But a much better solution would be to rewrite each of the applications, so that they expose classes or interfaces that can be used without actually running the application. This way, communication between the parts is going to be much easier.

In .Net, the only difference between .exe and .dll is that you can run .exe directly. But you can treat both as libraries, so you can use functionality from one .exe in another .exe. Another step might be separating the core of each application into a .dll and make the .exes just deal with input and output. With this, the combined application wouldn't have all the code that it doesn't need from the other ones.

Upvotes: 1

Yahia
Yahia

Reputation: 70369

That is possible - several options:

  • you put the functionality of each console app into a separate class within the same project and have one "master console app" provide their functionalities
  • you put the functionality of each console app into a separate class each in different project with DLL as target, then you reference those DLLs as needed from your "master console app"

Note: IF you go the DLL route you could embed the DLLs into the console EXE using the technique from http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

With both option (all in one EXE or EXE + embedded DLLs) you can just make an XCOPY deployment if there are no other dependencies...

Upvotes: 0

Tigran
Tigran

Reputation: 62248

Go to Project's properties, Application and change OutputType from Console to Class Library.

EDIT

Would like to express my doubts on architectual desicion like this, correct me if I'm wrong in my thinking:

Having different EXE applications standalone, I presume, you have different Applications that works standalone.

What advantage you gain by converting them in DLL's and puting them together in one master app ? Why do not just use this EXEs with one master app and launch them ?

In this way you leave as is it already working + you add a layer (master app) so for final user all this seems like one single app.

Upvotes: 0

Daniel
Daniel

Reputation: 31559

Its possible if every assembly is using different class names. Just include the whole source code when you compile the final version in one project.

Upvotes: 0

Related Questions