0

这似乎很微不足道,但我无法让它工作..

我有一个需要签名的 msi.dll 包装器(名为 Interop.WindowsInstaller.dll)。这样做的方法是在导入时对其进行签名(这种特定情况甚至记录在 MSDN 中:http: //msdn.microsoft.com/en-us/library/zec56a0w.aspx)。

但是- 无论我怎么做(不带或不带 oa 密钥文件,带或不带“/delaysign”),生成的程序集的大小始终为 36,864 字节,并且在查看 DLL 的属性时没有“数字签名” " 选项卡(不用说 - DLL 未签名)。

我在这里想念什么?(... 帮助!...)

4

1 回答 1

0

[注意:最终我从 Karel Zikmund 那里得到了关于这个线程的提示,这帮助我解开了这个谜团。我会把我的回复贴在这里——为了更大的利益]。

因此,我使用以下行来注册导入程序集:

tlbimp C:\WINDOWS\system32\msi.dll /out:Interop.WindowsInstaller.dll /keyfile:MyKey.snk

然后,我将文件复制到适当的位置并构建了项目,但每次构建失败时都会出现以下错误:程序集生成失败——引用的程序集“Interop.WindowsInstaller”没有强名称

我认为问题出在 tlbimp 行,但在阅读了 Karel Zikmund 的回复并验证 DLL 是强命名的(使用sn -vf Interop.WindowsInstaller)后,我发现了问题。

添加对“Microsoft Windows Installer 对象库”COM 对象的引用实际上是在 .csproj 文件中植入了一个代码块。我没有意识到,但是这个块导致每次构建项目时都从头开始重新生成 DLL 文件。当然,生成的文件不再是强命名的。

我解决它的方法是从项目中删除对“Microsoft Windows Installer 对象库”的引用,并添加对导入的(并且已经签名的)Interop.WindowsInstaller.dll文件的直接文件引用。

于 2010-04-22T17:28:00.507 回答