我有一个与 Active Directory 对话以检索用户信息的服务器可执行文件。除了 AD,此 exe 还允许客户编写自己的插件来与自定义用户目录对话。
这个可执行文件是强命名的。
以下陈述是否属实:
为了让强命名程序集加载另一个程序集,加载的程序集也必须使用相同的密钥进行签名。
如果程序集没有经过强签名,则以下代码返回 null,并且没有错误表明程序集未正确签名。请注意,如果我签署程序集,我会得到一个 IService 实例。这让我相信加载的程序集必须是强签名的。
Assembly assembly = Assembly.LoadFrom(path);
foreach (Type t in assembly.GetTypes())
{
if (t.GetInterface(typeof(IService).FullName) != null)
{
return (Activator.CreateInstance(t) as IService);
}
}
那么,这是否意味着如果你有一个强签名的程序集,并且支持程序集插件,它们也必须被签名——插件编写者必须用相同的密钥对它们进行签名?这听起来不对。
最后,假设我有一个实现 IService 接口的程序集,但也引用了一个程序集,该程序集引用了另一个程序集,每个程序集都使用不同的密钥签名。当我尝试加载时会发生什么?它们都应该由同一个密钥签名吗?