【问题标题】:How to call a function in a C# DLL from another C# DLL in the same folder如何从同一文件夹中的另一个 C# DLL 调用 C# DLL 中的函数
【发布时间】:2016-06-04 03:18:25
【问题描述】:

我们是 2 个团队(2 个不同的供应商),致力于开发 2 个不同的 C# DLL。 我正在处理的第一个 DLL 必须调用另一个团队开发的第二个 DLL 中的公共函数。该函数将不是 COMVisible 函数。

我们已经就一些方法签名达成了一致。第二个 DLL 将被放置在与第一个 DLL 相同的文件夹中。

每当其他团队发布第二个 DLL 的新版本时,我只想替换文件夹中的文件,而无需重新编译我的 DLL,或使用 regasm 注册其他 DLL 等。

我应该如何编写代码来调用第二个 DLL 中的函数?最好是,如果有不使用反射的解决方案,我会更喜欢。

更多背景:

这两个 DLL 都将作为应用程序的一部分提供。我不想在第一个 DLL 中静态引用第二个 DLL,因为最后我想生成 2 个要发送的 DLL。目的是,如果稍后其他团队想要更改 DLL,他们可以在用户安装中简单地替换他们的 DLL,而无需我重新编译我的 DLL。

谢谢。

【问题讨论】:

  • 如果您知道 DLL 名称,为什么不直接引用它?
  • 如果我引用,并且第二个 DLL 稍后更改,.NET 会自动调用同一文件夹中更新的 DLL 吗?抱歉,我以前从未这样做过
  • 只要 api 未更改且未签名,您就可以简单地替换引用的 dll。
  • @Crowcoder,.NET 框架如何寻找第二个 DLL。它总是在第一个 DLL 所在的文件夹中首先出现吗?
  • 只需在 .csproj 文件中引用它即可。

标签: c# .net dll


【解决方案1】:

MEF 可能是您正在寻找的:

托管可扩展性框架或 MEF 是一个用于创建轻量级、可扩展应用程序的库。它允许应用程序开发人员无需配置即可发现和使用扩展。它还可以让扩展开发人员轻松封装代码并避免脆弱的硬依赖。 MEF 不仅允许在应用程序内重用扩展,还允许跨应用程序重用。

Managed Extensibility Framework (MEF)

最终您将能够从文件夹中加载 组件

// Load parts from the available DLLs in the specified path using the directory catalog
var directoryCatalog = new DirectoryCatalog(directoryPath, "*.dll");
// ...

看看这个教程:

其基本目的是将组件插入到已经运行的应用程序中

An Introduction to Managed Extensibility Framework (MEF) - Part I

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多