【发布时间】:2013-06-13 08:39:00
【问题描述】:
我们做了什么:
我们创建了一个 C# 类库项目来与外部 Web 服务通信。当我们选中“注册 COM 互操作”时,该 DLL 会自动注册并准备好在注册发生的 PC 上使用。然后,该 PC 上的 Navision 客户端可以使用“自动化”变量来查找并使用该 DLL。
有什么问题?
我们需要将此 DLL 推广到生产环境。我们正在使用 RDP 解决方案,其中 navision 客户端在我们的用户使用的 2 个 RDP 服务器上运行。这意味着我们只需要能够将 DLL 部署到这 2 台服务器上。 我们已经尝试了以下 2 种解决方案,我们在此处和几篇博文中找到了这些解决方案:
- 将 DLL 拖到 C:\windows\assembly(以管理员身份)
- 使用 REGASM 注册 DLL (REGASM ourDll.dll /tlb:ourDll.dll)
执行完这些后,我们在 Navision 中找到了我们尝试使用 CREATE 命令初始化的 DLL:
CLEAR(ourDll);
CREATE(ourDll);
IF ISCLEAR(ourDll) THEN
CREATE(ourDll);
但在此之后我们收到以下错误(翻译版):
此消息适用于 C/AL 程序员:
无法创建由标识 GUID={guid} 1.0:{guid}:'ourDll'.Consume 的自动化服务器标识的 OLE 控件或自动化服务器的实例
验证 OLE 控件或自动化服务器是否已正确安装和注册。
在此之后,我们尝试运行 GACUTIL /i ourDll.dll,它将我们的 DLL 安装到 GAC 中,但结果保持不变。既然我们已经这样做了,就会出现错误消息:
文本对于缓冲区来说太长了。
但是,这个错误似乎并没有停止编译。运行时的错误信息和上面一样。
【问题讨论】:
-
我建议您不要将程序集放在 GAC 中(不要拖动到 windows\assembly,不要 GACUTIL),而是使用带有 /codebase 选项的 REGASM。还要确保 COM C# DLL 的位数与 Navision 客户端的位数兼容(32 位与 64 位)