我正在尝试在 .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/