我有一个dll放在开发服务器上的共享文件夹中。有没有办法在我的应用程序中添加引用而不在GAC中安装该引用时使用该DLL。
提前致谢。
答案 0 :(得分:2)
Assembly asm = Assembly.LoadFrom(path);
有关后期绑定,反射等信息,请参阅MSDN。
小编辑:关键字“as”的变量要求麻烦。所以“Assembly as”改为“Assembly asm”应该更安全。
答案 1 :(得分:1)
您可能希望查看基本框架中的Managed Extensibility Framework或Assembly.Load...
。
但是你为什么要这样做呢?你需要通过反射调用程序集中的任何代码(因此建议MEF可能就是你真正想要的)。
答案 2 :(得分:0)
是的,有可能......不知何故。看看Assembly-Class。有了它,你可以load assemblies from a file而不知道你究竟加载了什么。
答案 3 :(得分:0)
使用Assembly.LoadFrom
是获得零引用的唯一方法,但您仍需要共享合同。
添加引用有什么问题?
如果有人想在笔记本电脑上工作并且WiFi发生故障,你打算做什么?
答案 4 :(得分:0)
是的,
你可以调用Assembly.Load()然后使用Reflection来调用公开接口(小写“接口” - 我的意思是方法,字段和属性)由组件公开。
但为了做到这一点,你需要知道要调用的方法。如果您可以确定程序集包含符合已知.NET 接口的类,则会有所帮助。
这个想法是许多工具中“插件”架构的基础,其中工具在其“插件”目录中加载任何程序集,实例化类,将结果转换为ISomething,然后通过该接口调用方法。
答案 5 :(得分:0)
我也会阅读Suzanne Cook的.NET CLR笔记。
答案 6 :(得分:0)
如果此程序集位于共享文件夹中,您可能会发现.NET安全限制会阻止您以与预期相同的方式处理该程序集中的类。
您可能需要考虑将程序集检入源代码存储库,而不是存储在共享文件夹中。 (我已经看到一个“/ lib”文件夹用于此效果很好)。然后你可以直接引用程序集。
(还有一些存储库解决方案,比如Maven可以更好地控制它。但是,不幸的是,它们与.NET不能很好地配合。)