是否可以将控制台应用程序编译为单个.dll文件?

时间:2011-08-20 22:11:05

标签: c# .net console

有5个控制台应用程序在彼此的输出下工作,并且单独安装在我的计算机上(C#4.0,我是作者)。管理层希望将这套应用程序分发给其他用户,但是对于要求非技术用户安装/配置5个独立的应用程序并不感到兴奋。有什么方法可以将每个程序编译成.dll并通过单个主应用程序引用它们吗?

5 个答案:

答案 0 :(得分:2)

问。主要问题似乎是您不需要5个单独的安装步骤?

A。为套件创建安装程序:)使用任何MSI构建器(WiX,Visual Studio安装项目,InstallShield,and many others;哎呀,您甚至可以在XCOPY部署大多数情况下)


问。如何在单个进程中直接调用这些程序?

A。选项:

  1. 在AppDomain中加载程序集。
  2. 如果出现名称(空格)冲突或版本冲突,请使用单独的AppDomain

  3. 问。如何从视图中选择“隐藏”外部控制台应用的存在

    A。请查看 ilmerge ,以便可能合并“外部”程序集,以便它们不再可见。如果你不能使用ilmerge(冲突,或者例如WPF应用程序)you might embed them as resources and load them on demand按照1.和2.上面

      

    更新https://libz.codeplex.com/是一个很好看的项目,让这很容易(我自己没试过)

答案 1 :(得分:1)

仅仅因为它们中的每一个都是单独的.exe文件并不意味着您不能将它们视为一个应用程序。并且它们也不必单独安装或配置。

但更好的解决方案是重写每个应用程序,以便它们公开可以在不实际运行应用程序的情况下使用的类或接口。这样,部件之间的通信将变得更加容易。

在.Net中,.exe和.dll之间的唯一区别是你可以直接运行.exe。但您可以将它们视为库,因此您可以在另一个.exe中使用一个.exe的功能。另一个步骤可能是将每个应用程序的核心分成.dll,并使.exes只处理输入和输出。有了这个,组合的应用程序就不会拥有其他代码所不需要的所有代码。

答案 2 :(得分:0)

如果每个程序集使用不同的类名,则可能。在一个项目中编译最终版本时,只需包含完整的源代码。

答案 3 :(得分:0)

这是可能的 - 有几种选择:

  • 您将每个控制台应用程序的功能放入同一项目中的单独类中,并让一个“主控制台应用程序”提供其功能
  • 您将每个控制台应用程序的功能放在一个单独的类中,每个类都在DLL作为目标的不同项目中,然后根据需要从“主控制台应用程序”引用这些DLL

注意:如果您使用DLL路由,则可以使用http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

中的技术将DLL嵌入到控制台EXE中

使用这两个选项(所有在一个EXE或EXE +嵌入式DLL中),如果没有其他依赖项,您可以进行XCOPY部署...

答案 4 :(得分:0)

转到Project's媒体资源Application,然后将OutputTypeConsole更改为Class Library

修改

想表达我对这样的建筑设计的怀疑,如果我的思维错误,请纠正我

我认为,将不同的EXE应用程序独立存在,您可以使用不同的应用程序standalone

通过在DLL中转换它们并将它们放在一个主应用程序中,您获得了什么好处?为什么不将这个EXE与一个主应用程序一起使用并启动它们?

通过这种方式你可以离开它已经正常工作+你添加一个图层(主应用程序),所以对于最终用户来说,所有这些看起来就像是一个单独的应用程序。