共享dll而不添加引用

时间:2009-11-25 13:47:34

标签: c#

我有一个dll放在开发服务器上的共享文件夹中。有没有办法在我的应用程序中添加引用而不在GAC中安装该引用时使用该DLL。

提前致谢。

7 个答案:

答案 0 :(得分:2)

Assembly asm = Assembly.LoadFrom(path);

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

小编辑:关键字“as”的变量要求麻烦。所以“Assembly as”改为“Assembly asm”应该更安全。

答案 1 :(得分:1)

您可能希望查看基本框架中的Managed Extensibility FrameworkAssembly.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笔记。

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

答案 6 :(得分:0)

如果此程序集位于共享文件夹中,您可能会发现.NET安全限制会阻止您以与预期相同的方式处理该程序集中的类。

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

(还有一些存储库解决方案,比如Maven可以更好地控制它。但是,不幸的是,它们与.NET不能很好地配合。)