开发者

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 wa开发者_JAVA技巧y I can compile each program down into a .dll and reference them through a single master application?


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)


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.


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.


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.


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...

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜