[英]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注释。
如果此程序集位于共享文件夹中,则您可能会发现.NET安全限制使您无法按预期的方式使用该程序集中的类。
您可能需要考虑将程序集检入到源代码存储库中,而不是存储在共享文件夹中。 (我已经看到一个“ / lib”文件夹用于此目的)。 然后,您可以直接引用程序集。
(还有诸如Maven之类的存储库解决方案可以更适当地控制它。但是,不幸的是,它们不能与.NET很好地配合使用。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.