我要继续别人的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 只能看到命名空间 A!
我有所有 NameSpaces 的所有项目的来源。
任何帮助都会受到热烈欢迎,这让我发疯!
最佳答案
...these plugin DLLs must access NameSpaces A B C D
The plugins have a reference to the main exe
也许缺少信息,或者我缺乏 sleep ,但这确实看起来像是一个奇怪的“插件模型”。不幸的是,不知道更多,可能更多,我不知道如何帮助您目前的情况。
也就是说,我强烈建议考虑重新构建您的插件。任何一个:
如果您选择 2 号门,this Application Block article涵盖了我认为的传统插件模型,如果您采用它,可能会使您的生活更轻松。
编辑:我刚刚意识到我的回答可能太简短了,并且没有解释我所说的“传统插件模型”是什么意思。
插件不应直接引用您的应用程序 ,也不应该需要重建或重新部署才能使用它们。通常,您会在一个项目中定义一个接口(interface)(有时称为 Separated Interface ),但要单独实现它。换句话说,插件可以知道包含接口(interface)的核心库,但不必知道使用它的主要可执行文件。
因此,在实践中,您在核心库中定义了一个接口(interface),该接口(interface)定义了应用程序需要从插件中获取的方法。然后针对该界面对主应用程序进行编码。然后在主应用程序的运行时初始化期间,您可以加载包含插件类的程序集并实例化插件,甚至在开发期间将其初始化为测试类。有很多关于如何执行此操作的示例,其中有一个 few questions on SO关于这个。
关于c# - 从插件访问 C# 中的第三方命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7314305/