我正在寻找一种简单而安全的方式来访问.NET应用程序的插件。 虽然我想这是一个非常普遍的要求,但我正在努力寻找符合我所有需求的任何东西: 主机应用程序将在运行时发现并加载其插件程序集 插件将由未知的第三方创build,所以他们必须被沙箱化,以防止他们执行恶意代码 一个常见的互操作程序集将包含主机及其插件引用的types 每个插件程序集将包含一个或多个实现通用插件接口的类 当初始化一个插件实例时,主机会以主机接口的forms传递一个对自身的引用 主机将通过其通用接口调用插件,插件可能会调用主机 主机和插件将以互操作程序集中定义的types(包括generics)交换数据, 我已经调查了MEF和MAF,但是我正在努力研究如何使它们中的任何一个适合这个法案。 假设我的理解是正确的,那么MAF就不能支持跨越它的隔离边界的genericstypes的传递,这对我的应用是非常重要的。 (MAF的实现也非常复杂,但是如果我能解决genericstypes问题,我会准备好解决这个问题)。 MEF几乎是一个完美的解决scheme,但似乎不符合安全要求,因为它将扩展程序集加载到与主机相同的AppDomain中,因此显然可以防止沙盒。 我已经看到了这个问题 ,它谈到了在沙箱模式下运行MEF,但没有描述如何。 这篇文章指出:“使用MEF时,您必须信任扩展程序不运行恶意代码,或者通过代码访问安全性提供保护”,但是,它并没有描述如何。 最后,有一篇文章介绍了如何防止未知的插件被加载,但这并不适合我的情况,因为即使是合法的插件也是未知的。 我已经成功地将.NET 4.0安全属性应用到我的程序集中,并被MEF正确地重视,但是我不明白这是如何帮助我locking恶意代码的,因为许多框架方法可能是安全威胁如System.IO.File方法)被标记为SecuritySafeCritical ,这意味着它们可以从SecurityTransparent程序集中访问。 我在这里错过了什么? 是否有一些额外的步骤可以告诉MEF它应该为插件程序集提供互联网特权? 最后,我还看到了使用单独的AppDomain创build自己的简单沙盒插件体系结构,如此处所述。 但是,据我所见,这种技术只允许我使用后期绑定来调用不可信程序集中类的静态方法。 当我试图扩展这种方法来创build我的一个插件类的实例时,返回的实例不能被转换为通用的插件接口,这意味着主机应用程序不可能调用它。 是否有一些技术可以用来跨AppDomain边界获得强types的代理访问? 我对这个问题的长度表示歉意。 原因是要展示我已经调查过的所有途径,希望有人能提出一些新的尝试。 Tim非常感谢你的想法