日期:2014-05-18  浏览次数:20706 次

问一个C#加载程序集的问题
在开发的时候,需要用到一个第三方的DLL(托管程序集),我用“添加引用”的方式使用了该程序集。
这样做的后果就是:应用程序要和这个第三方DLL放在一个目录下。

假设我事先知道,在运行该程序的机子上的某个位置肯定可以找到此程序集,那么有没有什么办法可以做到:只拷贝这个程序过去即可运行?
我知道有个反射,但我不想用它。因为这样会有性能的损失。

还有另外一个小问题,我还没有测试:
这个程序集是对另一个(或几个)非托管dll库的封装,我已经对另外的库(.lib、.dll)的目录做好了环境变量(Path),上述问题的实现,不会影响这个第三方DLL对这些非托管库调用吧?

------解决方案--------------------
增加到GAC,,
------解决方案--------------------
1.你可以在程序配置文件中写入探测路径,但探测路径只能是程序目录和子目录(记忆可能不太准确,是否可为外部路径有待考证)

2.使用AssemblyResolve事件,在程序集加载失败(你的情况是未在探测目录中)时,“手动”加载该程序集。
虽然加载时仍是使用反射,但加载后则如常规引用的程序集几乎一样。
------解决方案--------------------
你把性能损失看的太严重了,NET的Reflector设计的没你想的那么菜的!