代码之家  ›  专栏  ›  技术社区  ›  Andy E

用强名称签名我的程序集会阻止它工作

  •  12
  • Andy E  · 技术社区  · 14 年前

    我的一个同事创建了一个VB.net版通过COM互操作与JScript一起使用。程序集以前工作正常,但我们签署了它,现在它似乎只在Windows7机器上工作。我测试了两台Windows7和两台WindowsVista机器。

    当我们对程序集签名并尝试在JScript中实例化ActiveX对象时,返回的错误没有消息,只有一个数字:

    错误:

    在Google上搜索错误号码并没有得到多少结果。

    如果我们从程序集中删除强名称,它就可以正常工作。有什么问题吗?不确定它是否有什么不同,但汇编正在编译,并与VS2010签署。

    8 回复  |  直到 14 年前
        1
  •  6
  •   Oleg    14 年前

    在程序集签名后是否重新创建了COM互操作?如何注册程序集的新版本?是否清除了Internet Explorer的缓存?

    通常,错误-2146234304(0x80131040)表示 FUSION_E_REF_DEF_MISMATCH Assembly 的价值 HKEY_CLASSES_ROOT\CLSID\{YOUR_GUID}\InprocServer32 不仅在真正的清单上。

    Fuslogvw.exe (Assembly Binding Log Viewer) (或 http://msdn.microsoft.com/en-US/library/ms229864(v=VS.80).aspx ). 注册处的一些变化 HKLM\Software\Microsoft\Fusion

    如果你不能以你可以发布一个链接到一个项目的方式来解决问题,这个链接可以用来重现你的问题。

        2
  •  5
  •   Hans Passant    14 年前

    错误代码ix 0x80131040。这是一个匹配.NET异常的代码,一个非常常见的异常。

    之后 构建代码。在这种情况下,只需从项目中删除程序集引用并将其添加回,现在选择强名称程序集,即可解决问题。

    但不用猜这个Fuslogvw.exe文件实用程序会准确地告诉你哪里出了问题。首先运行它以获取绑定尝试的跟踪以及失败的原因。

        3
  •  1
  •   user180326 user180326    14 年前

    使用 dependency walker 在有问题的计算机上打开已签名的dll。它应该告诉你为什么不能加载dll。它可能依赖于不同windows版本之间的dll,这在签名后是一个更大的问题。

        4
  •  0
  •   Peter K.    14 年前

    安迪,不确定 this is relevant

    我忘了更新密码adxloader.dll(来自\Add-in Express中的新版本) .NET\Redistributables)的路径-我猜它已经更新了。。。

        5
  •  0
  •   sled    14 年前

    你的数字看起来很像整数范围的开始!

    Signed: −2,147,483,648 to +2,147,483,647, -(2^31)~(2^31-1)
    

    也许你有一个铸造错误,或一个非常大的数字,你试图增加,如果它达到最大值(+2147483647),它开始倒数从2147483648

        6
  •  0
  •   GalacticJello    14 年前

    还有一些 background 如果您使用的是EnterpriseLibrary。

        7
  •  0
  •   Les    14 年前

    尝试从工作的XP配置(或Vista框)对程序集进行签名。Windows 7不支持CAPICOM,因此无论签名工具对程序集进行什么签名,都可能与Vista不向后兼容。现在我看到CAPICOM工作得很好,但我也看到它无缘无故地失败了,“unsupported”意味着如果您尝试调用它,您将从Microsoft支持部门获得支持。

        8
  •  -1
  •   Denis Valeev    14 年前

    转到.Net Framework配置控制台并在计算机上使用运行时安全策略设置。