我有多个DLL(自己管理或自己管理)我想要包含在CoreLib.dll中,这样我就不必在每个使用这些DLL的应用程序中包含(可能)数百个DLL。我将DLL直接包含在DLL中。
所以,我还想实例化我正在创建的应用程序中的那些DLL中声明的类。我不能做MyApp.exe项目中的图片,即使我想。 CoreLib中没有对A,B或C的引用。
我如何实现我想要的目标?
EDIT 我按照建议使用了Facade Pattern,但是我收到了编译错误。它说我必须在MyApp项目中包含A.dll。为什么?这是我想要避免的。有什么方法吗?
答案 0 :(得分:2)
我不认为这是可能的。在CorLib中添加对A,B和C DLL的引用仅意味着CorLib引用这些DLL(AssemblyRef元数据表将为每个程序集创建一条记录)。这并不意味着CorLib重新定义了程序集和任何类型的引用程序集。在MyApp.exe中,您需要引用A,B和C程序集。
另一种解决方案是在CorLib中定义Facade类并将调用重定向到A,B和C DLL。在MyApp.exe中,您将使用Facade类。
答案 1 :(得分:1)
您可以使用ILMerge将程序集合并为一个。
然后你可以按照你想要的方式使用该程序集中的所有类。
以下是如何将多个程序集(dll)合并到一个程序集(dll)中的示例: http://www.fishofprey.com/2011/01/ilmerge-to-combine-multiple-dlls.html
Essentaily你只是做
ILMerge.exe /out:CoreLib.dll A.dll B.dll C.dll
答案 2 :(得分:0)
我认为你将DLL(在本机托管世界中包含实际实现)与LIB / OBJ文件混淆,这些文件包含在构建时将合并到EXE / DLL中的内容,以将实现包含在相应的EXE / DLL中。
您基本上有两个选择: