有5个控制台应用程序在彼此的输出下工作,并且单独安装在我的计算机上(C#4.0,我是作者)。管理层希望将这套应用程序分发给其他用户,但是对于要求非技术用户安装/配置5个独立的应用程序并不感到兴奋。有什么方法可以将每个程序编译成.dll并通过单个主应用程序引用它们吗?
答案 0 :(得分:2)
问。主要问题似乎是您不需要5个单独的安装步骤?
A。为套件创建安装程序:)使用任何MSI构建器(WiX,Visual Studio安装项目,InstallShield,and many others;哎呀,您甚至可以在XCOPY部署大多数情况下)
问。如何在单个进程中直接调用这些程序?
A。选项:
问。如何从视图中选择“隐藏”外部控制台应用的存在
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路由,则可以使用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
,然后将OutputType
从Console
更改为Class Library
。
修改强>
想表达我对这样的建筑设计的怀疑,如果我的思维错误,请纠正我:
我认为,将不同的EXE应用程序独立存在,您可以使用不同的应用程序standalone
。
通过在DLL中转换它们并将它们放在一个主应用程序中,您获得了什么好处?为什么不将这个EXE与一个主应用程序一起使用并启动它们?
通过这种方式你可以离开它已经正常工作+你添加一个图层(主应用程序),所以对于最终用户来说,所有这些看起来就像是一个单独的应用程序。