gpt4 book ai didi

c# - Navision 自动化 C# COM DLL

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:48 25 4
gpt4 key购买 nike

我们做了什么:

我们已经创建了一个 C# 类库项目来与外部网络服务对话。当我们选中“register for COM interop”时,此 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 中找到了 DLL,我们尝试使用 CREATE 命令对其进行初始化:

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

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

This message is for C/AL programmers:

Could not create an instance of the OLE control or Automation Server identified by Automation Server with identification GUID={guid} 1.0:{guid}:'ourDll'.Consume

Verify if the OLE-control or Automation server was correctly installed and registered.

在此之后,我们尝试运行 GACUTIL/i ourDll.dll,它将我们的 DLL 安装到 GAC 中,但结果仍然相同。由于我们已完成此操作,因此出现错误消息:

The text is too long for the buffer.

但是这个错误似乎并没有阻止编译导航。运行时的错误消息与上面相同。

最佳答案

我们能够解决这个问题并在这里分享最终解决方案,这样遇到同样情况的人可能不需要花费我们投入的大量时间:

问题不是 guid 或接口(interface),而是 .NET Framework 的 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

关于c# - Navision 自动化 C# COM DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17082728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com