通过插件访问c#中的第三方名称空间

本文关键字:第三方 空间 插件 访问 | 更新日期: 2023-09-27 18:07:31

我必须继续别人的c#项目,但我不能和他说话。

命名空间A的主程序使用命名空间B C D…的dll

这个主程序在运行时加载插件dll,这些dll必须访问命名空间A B C D…

但是问题是dll只能访问命名空间A !

插件有一个对主exe的引用。

什么是非常奇怪的是,已经编译的exe(最后版本),我从主程序中得到的,确实有在对象浏览器的插件DLL的参考项目名称空间A B C D,但当我编译主程序exe自己的DLL只能看到名称空间A!

我有所有NameSpaces的所有项目的源代码。

欢迎任何帮助,这简直要把我逼疯了!

通过插件访问c#中的第三方名称空间

...these plugin DLLs must access NameSpaces A B C D

The plugins have a reference to the main exe

可能有缺失的信息,或者我缺乏睡眠,但这确实看起来像一个奇怪的"插件模型"。不幸的是,如果我不知道更多,可能更多,我不知道如何帮助你的现状。

也就是说,我会强烈建议考虑重新构建你的插件。:

  1. 使它们成为实际项目的一部分或;
  2. 将它们转换为更传统的插件模型

如果你选择门#2,这篇应用程序块文章涵盖了我认为的传统插件模型,如果你采用它,可能会让你的生活更轻松。

编辑:我刚刚意识到我的回答可能太简短了,没有解释我所说的"传统插件模式"是什么意思。

插件不应该直接引用您的应用程序 ,也不应该需要重新构建或重新部署才能使用它们。通常,您会在一个项目中定义一个接口(有时称为分离接口),但单独实现它。换句话说,插件可以知道包含接口的核心库,但不必知道使用它的主可执行文件。

因此,在实践中,您在核心库中定义了一个接口,该接口定义了应用程序从插件中需要的方法。然后根据该接口编写主应用程序代码。然后,在主应用程序的运行时初始化期间,您可以加载包含插件类的程序集并实例化插件,甚至可以在开发期间将其初始化为测试类。有很多关于如何做到这一点的例子,也有一些关于这一点的问题。