首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对公开COM对象的dll进行ildasm/ilasm往返

如何对公开COM对象的dll进行ildasm/ilasm往返
EN

Stack Overflow用户
提问于 2013-01-29 17:38:07
回答 1查看 456关注 0票数 1

我想往返于一个公开COM对象(互操作)的dll。我用ildasm转储了dll。在ildasm转储中,我重命名了类名的所有匹配项。一个Ilasm with dll开关和包含的资源生成了新的DLL。我不知道如何注册这个新的动态链接库(Win7)。Regasm/Regedit抱怨强名称。我还需要调整什么?谢谢。赛普

EN

回答 1

Stack Overflow用户

发布于 2013-01-29 19:13:26

程序集的强名称会显式阻止您执行此操作。强名称旨在检测有人篡改程序集的代码,当程序集存储在不安全的位置(如网站)时很有用。您肯定是在篡改DLL,所以您会破坏强名称。重新签名是必需的,并且这需要访问最初使用的私钥。

也就是说,在ComVisible程序集的特定情况下,有一些缓解因素。应用程序没有任何方法来验证强名称,因为这样的程序集的客户端是本机代码,它不知道关于强名称的bean。仅在允许在GAC中注册程序集时才需要强名称。这通常是此类程序集的好地方,因为它有助于避免DLL地狱。

因此,有两件事可以解决这个问题:

  • 仔细阅读了regasm.exe消息。如果使用/codebase选项,它可能只显示警告。"RegAsm :警告RA0000 :向/codebase注册未签名的程序集可能会导致您的程序集与可能安装在同一台计算机上的其他应用程序发生冲突。/codebase开关仅用于已签名的程序集。请为您的程序集指定一个强名称,然后重新注册。“这实际上意味着“你即将把自己投入到DLL地狱”。有不同程度的动态链接库地狱,动态链接库的name+location是一个相当轻微的。更重要的是接口和类获得了新的Guid。假设在原始代码中没有Guid属性,则它们将自动获得。
  • 只需使用您自己的密钥,使用sn.exe对程序集进行签名即可。由于没有人可以实际检查强名称,因此任何一个都足够好。

一定要注意这一点,在COM中,ComVisible接口和类名的实际名称并不重要。只有Guid很重要,这就是COM客户端用来查找回类型的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14579722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档