.net - 在 Visual Studio 中使用 Com Interop 选项注册可以,但直接调用 Regasm 则不行

标签 .net visual-studio-2010 com x86 regasm

我正在尝试在 .NET 4.0 中创建 32 位 COM 对象。 COM 对象的使用者是一个简单的 JScript。

当我将 Visual Studio 的“注册 COM 互操作”设置的复选框设置为 true 时,一切正常。我能够在 JScript 中创建 COM 对象并运行所有测试代码。

但是,我希望能够将其部署在没有安装 Visual Studio 的 32 位计算机(运行 .NET 4.0)上。所以我有一个简单的 install.bat 文件来注册 DLL:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm ComTest.dll /codebase /tlb:ComTest.tlb

由于它是 32 位程序集,因此我谨慎使用 32 位 regasm.exe。这告诉我它注册成功。我确实收到了使用 /codebase 选项的警告,告诉我可能会踩到现有的命名空间,但这在部署环境中不会成为问题。

但是现在当我在 JScript 中创建对象时,我得到了

Could not create object named "COMTest".

Visual Studio 是否正在做一些特殊的事情来正确注册我所缺少的内容?

如果可能的话,我宁愿不必签署程序集。

最佳答案

我发现了这个问题。 (当然只有在我发布到SO之后...)

该对象注册得很好。问题在于 COM 对象的构造函数中缺少依赖项。

将初始化代码从构造函数中移出并移至 Initialize() 方法会暴露该问题。

Visual Studio 之所以能够工作,是因为它运行的目录。

关于.net - 在 Visual Studio 中使用 Com Interop 选项注册可以,但直接调用 Regasm 则不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346459/

相关文章:

.net - 页面加载时 Gridview 不显示

.net - 对轻量级 .net Win Forms HTML 渲染器控件有什么建议吗?

xml - 如何删除节点的属性 (MSXML)

c++ - 正确的 VARIANT 初始化

c# - 如何在 .NET 中安装 H.264 编解码器?

c# - 将派生类的对象存储为基类变量。这个的 OOP 术语是什么?

visual-studio - Visual Studio 2010 可以自动将编译的文件复制到另一个目录吗?

VS 2010 SP1 上的痣 0.94.51023.0 错误

c# - 通过 COM 从 Delphi 触发 .NET DLL 中的事件的问题

c++ - Shell 扩展 : Static-Linking vs. C/C++ 运行时 DLL 的动态链接