我在 Visual Studio 2008 中针对 .NET 3.5 框架创建了一个强签名程序集(我也尝试了 2.0 框架)。我公开了一个类作为 COM 可见,我能够在 Visual Studio 6 for Visual Basic 的对象浏览器中找到这个 dll。我可以在 VB6 中创建一个 exe,然后直接从 Windows 资源管理器运行该 exe,一切正常。但是,当我尝试在 Visual Studio 6 中运行 VB6 项目时,.net 程序集不想加载并因以下错误而失败:
ActiveX component can't create object
根据我注册 dll 的方式,我也会收到此错误而不是上面的错误:
-2147024894 File or assembly name (myComponentName), or one of its dependencies, was not found.
或者这个:
-2146233082 Automation error
我已经尝试了所有我能想到的。这似乎是 VS6 在 Debug模式下运行的方式的问题。也许环境不同,缺少这个或另一个 dll 的路径。我在两台不同的开发机器上遇到了这个问题。我还可以引用另一个开发人员使用旧版本的 visual studio .net 构建的 COM .net dll。我什至用 dependency walker 打开了 dll,我没有得到任何明显的错误。
更新: Proc monitor 说 VB6 正在 vb6 studio 主目录“C:\我将 dll 放在那里并注册了它,现在我收到了一个新错误:
-2146234105 (80131107) "The format of the file 'MyDllName' is invalid."
那么,为什么工作室要在那里而不是在它注册的地方寻找我的 DLL?我该如何解决?至少,我怎样才能让 dll 在“C:\Program Files\Microsoft Visual Studio\VB98\”文件夹中工作
最终更新/解决方案: 好的,所以我想通了这个问题。这与 VB6.exe 被锁定在我使用的 .net 框架版本(2.0 或 3.5)之外有关。我发现这个文件“C:\Program Files\Microsoft Visual Studio\VB98\vb6.exe.config”包含以下条目:
<configuration>
<startup>
<supportedRuntime version="v1.1.4322" />
</startup>
我一删除这个文件,dll 就开始在 visual studio 6 环境中正常工作。感谢所有响应帮助的人。
最佳答案
好的,所以我想出了问题。这与 VB6.exe 被锁定在我使用的 .net 框架版本(2.0 或 3.5)之外有关。我发现这个文件“C:\Program Files\Microsoft Visual Studio\VB98\vb6.exe.config”包含以下条目:
<configuration>
<startup>
<supportedRuntime version="v1.1.4322" />
</startup>
我一删除这个文件,dll 就开始在 visual studio 6 环境中正常工作。感谢所有响应帮助的人。
关于.net - Visual Studio 6 无法加载在 .net 2.0 中编译的 COM dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216106/