装配生成失败--引用的程序集'Interop.Office'没有强名称。

7
我有一个WPF 4项目,与使用VS2010创建的Word文档进行交互,并且有一个win form用户控件项目,可以将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链接有相同的问题,但它没有解决问题。

只需删除引用并将其重新添加即可。 - Hans Passant
3个回答

17

我花了一些时间在互联网上搜索这个问题,我相信你需要的答案可能在这里,适用于大多数第三方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
希望它有所帮助。

那篇文章太棒了。 - Pluto

8

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

事实上,只有在您决定签署程序集时,“强名称”问题才会开始出现,因为此时它将要求所有引用的dll也进行强名称签名

如果您不想对程序集进行签名并希望克服编译错误,请选择不对您要构建的程序集进行签名。随后,所有项目引用都不需要签名。


5

您必须拥有一个.snk文件

右键单击您的项目 -> 属性,然后转到签名选项卡 -> 选择“签署程序集” -> 选择新密钥

希望这可以帮助您


7
实际上,“强名称”问题只有在您决定对程序集进行签名后才会开始,因为这样将需要所有引用的dll也进行“强名称”签名。 - Nyerguds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接