我正试图在.NET 4.0中创建一个32位COM对象。COM对象的使用者是一个简单的JScript。
当我将Visual Studio的"注册COM互操作"设置的复选框设置为true时,一切都会正常工作。我能够在我的JScript中创建COM对象并运行我所有的测试代码。
但是,我希望能够在没有Visual Studio的32位计算机(运行.NET 4.0)上部署它。因此,我有一个简单的install.bat
文件来注册DLL:
C:WindowsMicrosoft.NETFrameworkv4.0.30319regasm 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工作是因为它运行的目录。