C#可以动态添加程序集引用吗?
比如我们的程序调用MessageBox.Show(),必须添加System.Windows.Forms.dll的引用,或者通过动态加载反射调用。对于第一种情况,我们的程序集清单会有 .assembly extern System.Windows.Forms{...}指令;
第二种情况显然就不会有了;我的问题是这个System.Windows.Forms.dll的引用是如何被VS或csc.exe添加的,我们可以通过编程动态添加吗?

解决方案 »

  1.   

    在Vistual Studio项目的引用属性下,就可以添加,或者删除,程序集引用清单。如果“动态添加”指修改现成的程序,则没有什么实际的价值。
    1、改不了强命名的程序集。
    2、非强命名的程序集又不需要(直接替换依赖程序集)。
      

  2.   

    从.net4.0起,在framework增加了一个强大的机制,叫做MEF,你想到反射的时候就可以考虑不去写反射代码、而是使用MEF来实现。实际上MEF要比我见过的任何人写的反射代码都强大。
      

  3.   

    msdn用户帮助文档在这里:http://msdn.microsoft.com/zh-cn/library/dd460648.aspx它其实就好象你使用.net应该会使用泛型一样,应该成为一个非常基本和必备的编程“武器”。
      

  4.   

    简单地说,你可以在主程序定义一个接口(例如说叫做IMyUI),包含有一个Show方法。但是你不知道可能有多少种实现。这样在主程序创建声明一句 [Import] 属性来定义一个声明为IMyUI类型的对象或者一个声明为IEnumerable<IMyUI>类型的对象集合就行了,MEF会自动搜索当前应用程序目录下(或者其它应用程序目录下)做了Export标记的兼容于 IMyUI 接口的实现,自动给你反射并填充到主程序的那个对象或者对象集合中。而你的主程序,就好象天生就已经获取了这个接口的实现一样,直接调用它就行了,不需要写任何反射代码。
      

  5.   

    的确,看到这个问题我直觉反应就是MEFMEF可以说是目前最简单的动态加载机制