1

好的,按照插件的思路思考。

我有自己的 dll,它有自己的功能。如果存在第三方 dll,我将从该 dll 中扩展一个类。

除非缺少第三方 DLL,否则一切正常。这是问题的症结所在。

当 dll 不存在时,我会收到此异常:

“无法加载文件或程序集 'SOME_THIRD_PARTY_ASSEMBLY, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。系统找不到指定的文件。”

这个想法是如果第三方 dll 存在则允许附加功能,如果不存在则不允许该功能。

我知道我可以使用 Reflection 来测试一个类型是否存在,但是为了得到那部分代码,我必须让它通过上面的异常。

这并不是说我只需要知道一个类是否可用,我也在扩展这个类。

所以为了编译我的 dll,我需要在 Visual Studio 中添加对第三方 dll 的引用。

我可以在某处捕捉到这个异常吗?我应该以不同的方式解决这个问题吗?

4

2 回答 2

2

您可以将扩展第三方 DLL 的代码分离到另一个 DLL 中。然后,在您的“扩展管理器”dll 中,使用配置文件将您的扩展程序集与第 3 方的程序集相匹配。

因此,配置文件可能有一个包含两个条目的项目,例如“someClass;inSome3rdPartDll”,然后是“yourClass;inYourDll”。

浏览配置文件以查看列出的第 3 方程序集是否存在,如果存在,则将关联的程序集加载到应用程序域中。

现在,如果你想扩展未来的第 3 方程序集,你只需要添加你的 dll 并在配置文件中添加一行。

这是帮助将程序集加载到应用程序域的链接。

于 2013-04-15T14:04:48.917 回答
0

您还可以查看 MEF 并利用组合来完成此操作。

https://mef.codeplex.com

于 2013-04-15T14:10:27.677 回答