c# - 从插件访问 C# 中的第三方命名空间

标签 c# plugins dll namespaces

我要继续别人的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 DThe 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/

    相关文章:

    .net - 使用子文件夹中的程序集

    c# - 如何在 Silverlight Image 控件上显示 TIFF(以 Byte[] 的形式)

    php - 将链接添加到此 PHP 语句

    ViM:minibufexpl 与 bufexplorer 插件

    c++ - 在其他计算机 C++ 中运行包含 MFC 类的 Dll

    c++ - Visual Studio Force 库导入 C++

    c# - 如何使用Ninject

    c# - 如何通过命名空间限制 Asp.net Web API/Owin 发现 Controller ?

    c# - NotifyIcon 单击事件未触发

    javascript - 使用多个 ID 和类的 jQuery 翻转