Navision 自动化 C# 的 COM DLL

标签: dll C#
发布时间: 2013/12/8 11:44:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我们做了什么:

我们创建一个 C# 类库项目来谈谈外部 web 服务。当我们检查"为 COM 互操作注册"此 DLL 是自动注册并准备好在 PC 上使用登记发生的位置。然后,Navision 上那个人计算机的客户端可以使用"自动化"变量找到该 DLL 并使用它。


有什么问题?

我们需要部署此 dll 复制到生产环境。我们正在使用 RDP 解决方案哪里 navision 客户端运行在 2 台 RDP 服务器,我们的用户使用。这意味着我们只需要,以便能够将 DLL 部署到这些 2 服务器。我们试过我们发现这里和几个博客帖子上的以下 2 解决方案:

  • 将 DLL 拖到 C:\windows\assembly (管理员) 身份
  • 使用 REGASM 注册的 DLL (REGASM ourDll.dll /tlb:ourDll.dll)

在处决这些后我们发现 DLL 中我们试图初始化使用创建命令的 Navision:

CLEAR(ourDll);
CREATE(ourDll);
IF ISCLEAR(ourDll) THEN
    CREATE(ourDll);

但在此之后我们收到以下错误 (翻译版本):

此消息是为 C/AL 程序员:

无法创建 OLE 控件或由自动化服务器和标识的 GUID 标识的自动化服务器的实例 = {guid} 1.0: {guid}: 'ourDll'。消费

验证是否 OLE 控件或自动化服务器已正确安装并注册。

之后这个我们试图运行 GACUTIL /i ourDll.dll,我们的 DLL 安装到 gac 中,但结果仍然相同。因为我们这样做有一个错误信息:

文本是为缓冲区太长。

但是这个错误似乎并不停止 navision 的编译。运行时错误消息保持上述相同。

解决方法 1:

我们能够解决此问题,我们共享在这里的最后决议,以便进入相同情况的人可能不需要花很多时间投入这:

问题不是 guid 或接口,但.NET 框架 REGASM 使用的版本。

因为目标框架是 3.5 我们假设 REGASM 的版本也必须是 < = 3.5,我们还假设我们不得不使用的 64 位架构 REGASM。然而经过大量的试验和错误看来版本我们不得不使用了 32 位 v4 REGASM (见注册下面我们使用的.bat 文件),这是解决所有的问题和我们的 DLL 现在幸福正在使用 Navision 客户端中。

SET GACUTIL="C:\Program Files (X86)\Microsoft SDKs\Windows\v7.0A\bin\gacutil.exe"
SET REGASM="C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm.exe"
%REGASM% OurDll.dll /tlb:OurDll.tlb
%GACUTIL% /i OurDll.dll
赞助商