对于此问题的非相关原因,我需要在客户端GAC中安装一些DLL,然后才能在我的应用上激活一个模块。
因此,我已经使用visual studio 2013 msi安装程序将此DLL注册到客户端GAC。如您所知,要在GAC中插入内容,必须签名。但是,尽管我尝试安装的DLL已签名,但每次尝试构建de MSI时都会出现此错误:
Error 13 Assembly 'Jurassic.dll' must have a shared name to be installed globally
我已使用此命令正确签名了dll:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe" sign /n "DIGO ######## S.L" /v Jurassic.dll
答案 0 :(得分:1)
您使用的是错误的签名。
signtool.exe用于编码符号二进制文件。代码签名用于证明二进制文件未被篡改并且来自已知源。这不是GAC的要求。
为了能够将程序集放入GAC,他们必须拥有strong name。这要求他们使用其他签名进行签名。这个签名也证明了组件没有被篡改,但只能证明它来自某个来源,但不是来自哪个来源。您无需从证书颁发机构购买证书。
所以你必须通过为编译器设置正确的project options来签名。您可以使用sn.exe上的以下命令验证是否已使用强名称进行签名:
sn.exe -vf Jurassic.dll