我们有一组在VC ++开发COM组件。当这样的组件的引用被添加到.NET项目,Visual Studio生成互操作程序集。我们有一组这样的组件现在

在运行我们日常的积累,我们签署所有带有数字签名的生成二进制文件。互操作组件没有签名,因为我们不觉得我们是作家 - 任何人都可以使用Visual Studio和产生相同的组件

我们应该签署互操作程序集呢?我们应该还具有强大的域名(SN.EXE实用程序)签下他们?什么是这样做的原因是什么?

有帮助吗?

解决方案

这已经有一段时间一种复杂的平衡。问题来自于你需要与你的代码的的你可能会签署自己的组件分发您的互操作程序集的事实。如果程序集进行签名,然后所有对它的引用也必须签署的组件 - 包括互操作的组件。所以,你必须给他们签名。

如果您正在分发一个独立的应用程序,然后就没有风险,你应该先走一步,签署组件,使您的生活更轻松。

如果您正在分发组件库,事情是因为使用你的库可能产生自己的互操作程序集,但用自己的钥匙签下他们另一家开发商麻烦一点。这会导致各种各样的命名和相关性问题。

根据多么复杂的互操作组件是 - 你可以生成代理代码到一个单独的.CS / .vb文件,并直接编译到您的装配。然后,你将不必担心强名称的问题。

其他提示

我们使用SN.EXE到强的名字被工具所产生围绕COM对象的包装我们的互操作程序集。我们需要这样做的组件加载它们签署,因此他们需要签署。

要产生我们使用互操作程序集:

tlbimp Some_COM.dll /delaysign /publickey:"Some_PublicKey.snk" /out:Some_COM2Lib.dll"

显然删除/ delaysign如果你完全签署。

至于没有创作的assmeblies,这可能是这样,但你对他们负责。你想,以确保它们不会被替换(意外或不)任何其他人,所以你为你申请到你的其他代码可能应适用签名/强名称的同一水平。

替换 “公钥” 通过 “密钥文件”:

tlbimp Some_COM.dll /delaysign /keyfile:"Some_PublicKey.snk" /out:Some_COM2Lib.dll"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top