我正在做一个插件系统,其中主应用程序在新 AppDomain 的运行时加载程序集 Addin1.dll 和 Addin2.dll。

但是,如果 Addin1.dll 使用我的密钥签名(强名称),而 Addin2.dll 没有签名,我希望能够仅加载 Addin1.dll 并拒绝 Addin2.dll。

我怀疑需要通过在AppDomainSetup中设置一些参数来完成?

有帮助吗?

解决方案

看看 装配.加载 采用 Evidence 参数的方法。您可以找到如何从您的公钥创建证据的示例 这里.

其他提示

您可以implment一个DomainManager和基本的负载/块决定对任何你喜欢的。我在这里回答一个有点相关的问题

可以使用应用程序域类的 Load方法来加载新的装配入应用程序域,所提供的组件的发行者策略是由客户端或最终用户环境来满足。

另外,强命名组件遵循由组件和CLR的出版商所规定的所有规则。所以组件的用户需要满足所述组件的安全性方面被加载到应用程序域。

在CLR装载来自GAC使用强名称属性引用的全局程序集。如果引用的组件可用在GAC中,CLR将返回其包含的子目录和文件保存清单被加载。寻找装配这种方式保证了在运行时加载的程序集来自所建立起来的对代码进行编译装配同一发行人来电。现在,在引用组装的assemblyRef表公钥令牌和公钥令牌引用的程序集的AssemblyDef表的比较。如果引用的程序集是不是在GAC,CLR将查找在应用程序的根目录,然后在应用程序的配置文件中标识的专用路径;如果使用MSI安装了包含该组件的应用程序,然后调用CLR MSI加载所需的组件。 IF组件未在任何这些位置的发现,则抛出异常,最后组装的结合失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top