C ++ / CLI DLL具有密钥对但未通过强名称验证

时间:2016-05-16 21:28:28

标签: visual-studio-2010 dll c++-cli strongname

我刚刚使用VS 2010 SP1创建了一个C ++ / CLI DLL,我想用强名称对DLL进行签名。 所以我在VS 2010命令提示符

中创建了文件TestNet.snk
sn -k TestNet.snk

然后我通过在Linker-> Advanced-> Key File中添加密钥文件来配置项目。

Visual Studio 2010 SP1 Project Properties

生成的DLL中包含密钥对,但是当我尝试使用以下命令验证DLL时:

sn -v TestNetDLL.dll

我收到以下错误:

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

TestNetDLL.dll does not represent a strongly named assembly

如果我再次使用强名称再次签名,我会收到此错误:

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Failed to install key pair -- Object already exists.

因此密钥对安装在DLL中,但没有强名称,我缺少什么?更多设置?或者我需要在代码中添加一些内容吗? :(

我不知道我错过了什么,请帮忙!谢谢你的建议或任何建议。

1 个答案:

答案 0 :(得分:1)

我做了以下事情来解决问题:

  1. 我运行此命令来创建密钥对文件

    sn -k TestNet.snk

  2. 我将密钥对安装在密钥容器中

    sn -i TestNet.snk MyTestNetContainer

  3. 我将VS 2010项目配置为使用密钥容器而不是密钥文件,并根据 Hans Passant

  4. 的建议选择延迟签名:是
  5. 我重建了项目并使用sn.exe验证了DLL,验证成功了#34;有效"

    sn -v TestNetDLL.dll Microsoft(R).NET Framework强名称实用程序版本4.0.30319.1 版权所有(c)Microsoft Corporation。保留所有权利。

    汇编' TestNetDLL.dll'是有效的

  6. 感谢Hans Passant的建议。