【发布时间】:2010-12-07 04:19:11
【问题描述】:
所以我的 .NET 3.5 程序集库引用了一个免注册的 VB6 DLL,最终由 .NET 3.5 WinForms 应用程序引用(不确定它是否相关,但包含用于绘制图片)。
我收到错误“隔离 COM 引用“SomeVBDll”的问题:Registry key 'HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{dd1d7f58-1d6b-4370-a1b9-05c03816a128}\InProcServer32' is missing value '(Default)'
我最初的尝试是检查该值是否确实存在,然后将其放置到位。这导致编译时出现上述相同的消息。
有没有人遇到过这个问题并知道解决办法?
提前致谢。下面是直接引用 VB6 dll 的程序集的清单。
<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity name="Native.App.Core" version="1.0.0.0" type="win32" />
<file name="SomeVBDll.dll" asmv2:size="184320">
<hash xmlns="urn:schemas-microsoft-com:asm.v2">
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<dsig:DigestValue>BWWHQTqNGUupT8xznLoN3jn7S9Y=</dsig:DigestValue>
</hash>
<typelib tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{dd1d7f58-1d6b-4370-a1b9-05c03816a128}" threadingModel="Apartment" tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" progid="SomeVBDll.MyClass" />
</file>
</assembly>
编辑///
将 VB6 DLL 中的所有类标记为 MultiUse 似乎已经解决了这个问题。 虽然这解决了我遇到的问题并且仍然允许我使用无注册 COM,但有没有人知道一种方法可以解决必须将所有 COM 类 Instancing 设置为 MultiUse 的问题?
【问题讨论】:
-
此线程 [tech-archive.net/Archive/DotNet/… 表示问题可能与 VB6 dll 中的某些类的实例化标记为私有有关。这也是我的情况,我有一个 MultiUse(非私有)类,其余的都是私有的。我宁愿不将其他人标记为 MultiUse,但我会这样做以查看实际上是否可以解决问题....
-
好的,所以 MultiUse 似乎只是一个临时修复,并不是真正的潜在问题。我现在遇到了与我原来的帖子中提到的相同的问题。我在 Windows Vista Ultimate x64 上以非管理员身份运行,在 Visual Studio 2008 中以非管理员身份构建项目。
-
对于 COM DLL 中定义的每个类,它似乎都报告了上述错误。我已验证每个类都标记为 MultiUse。
-
仅供未来的读者阅读 - 我认为这个具有类似错误消息的另一个问题是另一个问题的结果:stackoverflow.com/questions/8914138/…