2016-05-16 40 views
1

我刚刚创建了一个使用VS 2010 SP1的C++/CLI DLL,并且我想用强名称来签名DLL。 所以我创建的文件TestNet.snk在VS 2010命令提示符C++/CLI DLL具有密钥对,但强名称验证失败

sn -k TestNet.snk 

,然后我通过在链接器添加密钥文件配置的项目 - >高级 - >密钥文件。

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 

如果我试着用强名称再次签名DLL,我会得到这个错误:

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

IIRC,在VS2010中签署C++/CLI程序集时,mt.exe在嵌入清单并修改文件哈希时将其挂起。使用延迟签名。 –

+0

还有一个强大的命名,它需要编辑'Microsoft.Cpp.Win32.targets'文件来用'$(LinkDelaySign)'替换'%(Link.DelaySign)','KeyFile'也是如此。 – Medinoc

回答

1

我做了以下解决问题:

  1. 我跑这个命令创建密钥对文件

    SN -k TestNet.snk

  2. 我安装密钥对的密钥容器

    SN -i TestNet.snk MyTestNetContainer

  3. 我配置了VS 2010项目,而不是使用的密钥文件,也选择了延迟签名密钥容器:是的建议通过汉斯帕桑特

  4. 我重建项目和验证与SN.EXE DLL和验证是成功的“有效期”

    SN -v TestNetDLL.dll 微软(R).NET Framework中的强名称实用程序版本4.0.30319.1 版权所有(C )M icrosoft公司。版权所有。

    大会 'TestNetDLL.dll' 是有效的

感谢汉斯帕桑特他们的建议。