繁体   English   中英

共享DLL而不添加参考

[英]Sharing dll without adding reference

我在开发服务器上的共享文件夹中放置了一个dll。 有什么方法可以使用该dll,而无需在我的应用程序中添加引用,也无需在GAC中安装该dll。

提前致谢。

Assembly asm = Assembly.LoadFrom(path);

有关后期绑定,反射等信息,请参见MSDN。

小修改:带有关键字“ as”的变量正在引起麻烦。 因此,将“ Assembly as”更改为“ Assembly asm”应该更安全。

您可能要查看托管扩展框架或基本框架中的Assembly.Load...

但是,为什么要这样做呢? 您需要通过反射调用程序集中的任何代码(因此,建议MEF可能就是您真正想要的)。

是的,有可能...以某种方式。 看一下Assembly-Class 有了它,您可以从文件中加载程序集,而无需知道确切地加载了什么。

使用Assembly.LoadFrom是拥有零引用的唯一方法,但是您仍然需要共享合同。

添加参考有什么问题?

当有人想在笔记本电脑上工作并且WiFi掉线时,您该怎么办?

是,

您可以调用Assembly.Load(),然后利用Reflection调用由汇编公开的公共接口(小写的“接口”,我的意思是方法,字段和属性)。

但是为了做到这一点,您需要知道调用什么方法。 如果可以确定程序集包含确实符合已知.NET 接口的类,则它将有所帮助。

这个想法是许多工具中“插件”体系结构的基础,在该工具中,该工具将任何程序集加载到其“插件”目录中,实例化类,将结果转换为ISomething,然后通过该接口调用方法。

我还将阅读Suzanne Cook的.NET CLR注释。

http://blogs.msdn.com/suzcook/default.aspx

如果此程序集位于共享文件夹中,则您可能会发现.NET安全限制使您无法按预期的方式使用该程序集中的类。

您可能需要考虑将程序集检入到源代码存储库中,而不是存储在共享文件夹中。 (我已经看到一个“ / lib”文件夹用于此目的)。 然后,您可以直接引用程序集。

(还有诸如Maven之类的存储库解决方案可以更适当地控制它。但是,不幸的是,它们不能与.NET很好地配合使用。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM