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

And*_*y E 12 .net javascript strongname assemblies com-interop

我的一位同事在VB.net中创建了一个程序集,用于通过COM互操作与JScript一起使用.组件过去工作正常,但我们签了它,现在它似乎只适用于Windows 7机器.我测试了2台Windows 7机器和2台Windows Vista机器.

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

错误:
错误号:-2146234304

在Google上搜索错误编号并没有太多回复.

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

Ole*_*leg 6

在签署程序集后,您是否重新创建了COM Interop?如何注册新版本的程序集?你清除了Internet Explorer的缓存吗?

通常,错误-2146234304(0x80131040)表示FUSION_E_REF_DEF_MISMATCH:"找到的程序集的清单定义名称[yourAssembly]与程序集引用不匹配".因此,您必须更新使用已签名程序集的程序集清单.在你的情况下,你应该找到什么意味着什么.对装配的反射也保存在真实清单的Assembly价值之下HKEY_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,

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


Han*_*ant 5

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

定位的程序集的清单定义与程序集引用不匹配.

我很惊讶你没有得到它的消息,你可能想要检查你的错误处理代码.Anyhoo,你有一些DLL Hell正在进行,CLR正在寻找一个程序集,其[AssemblyVersion]或PublicKeyToken与用于构建代码的引用程序集不匹配.鉴于这与强名称程序集相关联,您可能构建代码签署了程序集.在这种情况下,只需从项目中删除程序集引用并将其添加回来,现在选择强名称程序集,将解决问题.

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