2016-05-16 78 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' 是有效的

感謝漢斯帕桑特他們的建議。