我必须继续其他人的C#项目,但我无法与他交谈。
NameSpace A的主程序使用DLL与NameSpaces B C D ...
这个主程序在运行时加载插件DLL,这些DLL必须访问NameSpaces A B C D ......
但问题是DLL只能访问NameSpace A!
插件引用了主exe。
非常奇怪的是,我从主程序中获得的已编译的exe(最新版本),确实在项目NameSpaces ABCD的插件DLL的对象浏览器中有引用,但是当我编译主程序exe时我自己DLL只能看到NameSpace A!
我拥有所有NameSpaces的所有项目的来源。
任何帮助都会受到热烈欢迎,这让我疯狂!
答案 0 :(得分:2)
...these plugin DLLs must access NameSpaces A B C D
The plugins have a reference to the main exe
也许缺少信息,或者我缺乏睡眠,但这肯定是一个奇怪的“插件模型”。不幸的是,我不知道更多,可能还有更多,我不知道如何帮助你当前的情况。
那就是说,我高度建议考虑重新设计你的插件。之一:
如果你选择2号门,this Application Block article涵盖了我认为的传统插件模型,如果你采用它,可能会让你的生活更轻松。
编辑:我刚刚意识到我的回答可能过于简短,并没有解释“传统插件模型”的含义。
插件不应直接引用您的应用程序 ,也不需要重建或重新部署才能使用它们。通常,您将在一个项目中定义一个接口(有时称为Separated Interface),但要单独实现它。换句话说,插件可以知道包含接口的核心库,但不必知道使用它的主要可执行文件。
因此在实践中,您在核心库中定义了一个接口,用于定义应用程序从插件中获取的方法。然后,您可以针对该接口编写主应用程序。然后,在主应用程序的运行时初始化期间,您可以加载包含插件类的程序集并实例化插件,甚至在开发期间将其初始化为测试类。关于如何执行此操作的示例很多,并且还有一个few questions on SO。