2008-12-16 34 views
0

我正在做一个插件系统,其中主App在新AppDomain的运行时加载程序集Addin1.dll和Addin2.dll。如何将仅签名的程序集加载到新的AppDomain?

但是,如果使用我的密钥对Addin1.dll进行签名(强名称),并且Addin2.dll不是,我希望只能加载Addin1.dll并拒绝Addin2.dll。

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

回答

2

查看采用Evidence参数的Assembly.Load方法。您可以找到一个示例,说明如何使用公钥here创建证据。

0

您可以实现一个DomainManager,并根据您的喜好来决定您的加载/阻止决策。我回答了一个相关的问题here.

0

如果客户端或最终用户环境满足程序集的发布者策略,则可以使用Load method of AppDomain class将新程序集加载到Appdomain中。

此外,强有力的命名大会遵循大会和CLR的出版商规定的所有规则。所以程序集的用户需要满足加载到appdomain中的程序集的安全性。

CLR使用强名称属性从GAC加载引用的全局程序集。如果引用的程序集在GAC中可用,则CLR将返回其包含的子目录,并且载入清单的文件被加载。以这种方式查找程序集可以确保调用程序在运行时加载的程序集来自构建代码所针对的程序集的相同发布程序。现在比较引用程序集的AssemblyRef表中的公钥标记和引用程序集的AssemblyDef表中的公钥标记。如果引用的程序集不在GAC中,则CLR将查找应用程序的基本目录,然后查找应用程序配置文件中标识的私有路径;如果包含程序集的应用程序使用MSI安装,则CLR将调用MSI来加载所需的程序集。如果在这些位置中找不到程序集,则抛出异常,最后程序集的绑定失败。

相关问题