2

我正在尝试在 .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 正在做正确注册我丢失的事情?

如果可能的话,我宁愿不必签署大会。

4

1 回答 1

2

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

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

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

Visual Studio 工作是因为它运行的目录。

于 2013-06-27T17:04:07.927 回答