gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:00:48 26 4
gpt4 key购买 nike

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

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com