.net - 添加了一个强大的命名程序集,但它正在寻找未签名的程序集

时间:2013-12-10 23:12:55

标签: c# .net strongname

所以,我有两个项目......一个是大型类库,另一个是大型模拟器项目。

最初在测试期间,程序集没有强名称,但是现在我需要COM可见性,我需要对它们进行强名称(我需要这么快,并且更容易使它们COM可见而不是处理CLI)

我生成了一个.snk并将其添加到每个项目的属性中,类库编译得很好并输出.dll就好了。我在模拟器项目中添加了这个.dll作为参考,但现在模拟器项目给了我以下错误:

  

“DynamicsControl”类型在未包含的程序集中定义   引用。您必须添加对程序集“DynamicsControl”的引用,   Version = 0.4.3.0,Culture = neutral,PublicKeyToken = null“

类型DynamicsControl确实存在于类库中(我已验证过),但它声称我没有加载正确的程序集。我相信导致问题的是PublicKeyToken = null(因为我的程序集会有一个公钥)。

当我执行sn -Tp DynamicsControl.dll(我引用的位置中的那个)时,它会输出私钥和公钥,所以我知道它有正确的签名。

我错过了什么步骤?我是否必须将程序集添加到GAC?我是否需要手动添加公钥?

1 个答案:

答案 0 :(得分:0)

是的,您需要为强命名程序集指定publicKeyToken,否则它将查找程序集的未签名版本。您可以通过将程序集添加到GAC(您将在那里看到它)或使用此link

中提到的步骤找到公钥标记

如果你想了解更多关于强名称和地狱的信息,你可以去URL

强名称阻止了dll地狱,这意味着您可以拥有相同程序集的多个版本。

对于您的其他问题,您不必将程序集添加到GAC,但CLR将首先在GAC中查找程序集,然后在其他位置查找程序集。此外,您不必手动添加密钥。如果删除引用并使用签名的程序集将其添加回来,则应自动获取密钥。