12

我的一位同事在 VB.net 中创建了一个程序集,用于通过 COM 互操作与 JScript 一起使用。该程序集过去运行良好,但我们对其进行了签名,现在它似乎只能在 Windows 7 机器上运行。我测试了 2 台 Windows 7 机器和 2 台 Windows Vista 机器。

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

错误:
错误号:-2146234304

在谷歌上搜索错误号并没有返回太多。

如果我们从程序集中删除强名称,它就可以正常工作。关于可能是什么问题的任何想法?不确定它是否有所作为,但程序集正在编译并使用 VS 2010 签名。

4

8 回答 8

6

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

通常,错误 -2146234304 (0x80131040) 表示FUSION_E_REF_DEF_MISMATCH:“名称为 [yourAssembly] 的已定位程序集的清单定义与程序集引用不匹配”。因此,您必须更新使用已签名程序集的程序集清单。你应该找出在你的情况下它到底意味着什么。对程序集的引用也被保存在实际清单AssemblyHKEY_CLASSES_ROOT\CLSID\{YOUR_GUID}\InprocServer32,而不仅仅是在真实清单中。

您可以尝试调查有关Fuslogvw.exe(程序集绑定日志查看器)(或http://msdn.microsoft.com/en-US/library/ms229864(v=VS.80).aspx)的问题。HKLM\Software\Microsoft\Fusion之前可能需要在注册表中进行一些更改(如 EnableLog、LogFailures、

如果您不能以您可以发布可用于重现您的问题的项目的链接的方式解决问题。

于 2010-09-19T21:44:24.833 回答
5

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

找到的程序集的清单定义与程序集引用不匹配。

我很惊讶你没有收到消息,你可能想查看你的错误处理代码。无论如何,您遇到了一些 DLL Hell,CLR 正在查找一个程序集,其 [AssemblyVersion] 或 PublicKeyToken 与用于构建代码的参考程序集不匹配。鉴于这与强命名程序集相关联,您可能在构建代码后对程序集进行了签名。在这种情况下,只需从项目中删除程序集引用并将其添加回来,现在选择强命名程序集,即可解决问题。

但无需猜测,Fuslogvw.exe 实用程序会准确告诉您出了什么问题。首先运行它以跟踪绑定尝试及其失败的原因。

于 2010-09-22T05:42:54.687 回答
1

使用dependency walker在有问题的机器上打开您签名的dll。它应该告诉您为什么无法加载 dll。它可能依赖于 Windows 版本之间不同的 dll,这在签名后更成问题。

于 2010-09-19T21:51:29.903 回答
0

您是否在使用 Microsoft Enterprise Library 代码块?我已经看到人们在编译代码时没有添加对正确签名库的引用而弹出这个问题。

如果您使用的是 EnterpriseLibrary,这里有更多背景知识。

于 2010-09-20T19:50:32.323 回答
0

尝试从有效的 XP 配置(或从 Vista 框中)对您的程序集进行签名。CAPICOM 在 Windows 7 中不受支持,因此无论使用签名工具对您的程序集进行签名,都可能无法向后兼容 Vista。现在我已经看到 CAPICOM 工作得很好,但我也看到它无缘无故地失败了,“不支持”意味着如果您尝试调用,这就是您从 Microsoft 支持获得的。

于 2010-09-25T04:29:17.603 回答
0

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

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

也许你有一个铸造错误,或者你试图增加一个非常大的数字,如果它达到最大值(+2,147,483,647),它会从 -2,147,483,648 开始倒数

只是猜测!

于 2010-09-19T12:34:59.513 回答
0

安迪,不确定这是否相关。那里的解决方案说:

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

于 2010-09-19T12:05:14.977 回答
-1

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

于 2010-09-24T12:26:31.580 回答