在开发的时候,需要用到一个第三方的DLL(托管程序集),我用“添加引用”的方式使用了该程序集。
这样做的后果就是:应用程序要和这个第三方DLL放在一个目录下。假设我事先知道,在运行该程序的机子上的某个位置肯定可以找到此程序集,那么有没有什么办法可以做到:只拷贝这个程序过去即可运行?
我知道有个反射,但我不想用它。因为这样会有性能的损失。还有另外一个小问题,我还没有测试:
这个程序集是对另一个(或几个)非托管dll库的封装,我已经对另外的库(.lib、.dll)的目录做好了环境变量(Path),上述问题的实现,不会影响这个第三方DLL对这些非托管库调用吧?

解决方案 »

  1.   

    我大致了解了一下,需要使用vs工具将一个程序集给予强名,然后进行动态加载(或命令加载)到GAC。
    但这样存在问题,只能在我开发的机器上正常工作,在运行的机器上,由于运行机器的程序集不在GAC,也没有密钥文件,是不能正常工作的吧。
      

  2.   

    1.你可以在程序配置文件中写入探测路径,但探测路径只能是程序目录和子目录(记忆可能不太准确,是否可为外部路径有待考证)2.使用AssemblyResolve事件,在程序集加载失败(你的情况是未在探测目录中)时,“手动”加载该程序集。
    虽然加载时仍是使用反射,但加载后则如常规引用的程序集几乎一样。
      

  3.   

    你把性能损失看的太严重了,NET的Reflector设计的没你想的那么菜的!