7

我有一个 WPF 4 项目来与 VS2010 中制作的 word 文档进行交互,还有一个 win 表单用户控制项目来托管 word 应用程序。和其他 com dll。所有 com dll 都被引用到我的主 wpf 应用程序中。我想发布我的项目,以便可以将其安装在另一台机器上并为其执行自动更新,但出现错误:“程序集生成失败 - 引用的程序集 'Interop.Office' 没有强名称。”。每个 COM Dll 的错误。一个 dll 引用(Interop.word.dll、interop.office.dll、interop.VBIDE.dll),所有这些 dll 也被引用并用于我的 wpf 代码。

我发现Strong Signed Assemblies链接有同样的问题,但它不能解决问题。

4

3 回答 3

17

为此,我花了一段时间在互联网上搜索,我相信对于大多数 3rd 方 dll,您需要的答案可能就在这里。

“向互操作 DLL 添加强名称”

本文介绍了向第三方程序集添加强名称的三种方法。命令是:
1. 通过密钥对添加强名称

> SN -k MyKeyPair.snk
> ILDASM ASQLService.dll /out:ASQLService.il
> ILASM ASQLService.il /dll /resource=ASQLService.res /key=MyKeyPair.snk

2. 通过证书存储中的证书添加强名称

> ILDASM ASQLService.dll /out:ASQLService.il  
> MAKECERT -ss MyCertificateStore -sk MyKeyContainer
> ILASM ASQLService.il /dll /resource=ASQLService.res /key=@MyKeyContainer

3. 通过个人信息交换 (.pfx) 文件中的证书添加强名称

> MAKECERT -r -pe -sv MyCertificate.pvk MyCertificate.cer
> PVK2PFX -pvk MyCertificate.pvk -pi qwerty -spc MyCertificate.cer -pfx MyCertificate.pfx
> SN -p MyCertificate.pfx MyCertificate-publickey.snk
> ILASM ASQLService.il /dll /resource=ASQLService.res /key=MyCertificate-publickey.snk
> SN -R ASQLService.dll MyCertificate.pfx

希望它有所帮助

于 2011-10-14T13:00:51.247 回答
8

这个评论应该是一个答案:

实际上,“强名称”问题仅在您决定签署程序集时才开始,从那时起,所有引用的 dll 都需要进行强名称签名

如果您不想签署程序集并希望克服此编译错误。选择不签署您正在尝试构建的程序集。随后,所有项目引用也不需要签名。

于 2012-12-11T04:20:43.623 回答
5

你必须有一个 .snk

右键单击您的项目-> 属性并转到签名选项卡-> 检查签署程序集-> 选择新密钥

希望能帮助到你

于 2011-10-26T13:48:45.413 回答