Navision自动化C#COM DLL

时间:2013-06-13 08:39:01

标签: c# dll com navision

我们做了什么:

我们创建了一个C#类库项目来与外部Web服务进行通信。当我们检查"注册COM互操作"此DLL已自动注册,可以在发生注册的PC上使用。然后,该PC上的Navision客户端可以使用"自动化"变量来查找此DLL并使用它。


问题是什么?

我们需要将此DLL推广到生产环境。我们正在使用RDP解决方案,其中navision客户端在我们的用户使用的2台RDP服务器上运行。这意味着我们只需要能够将DLL部署到这两个服务器。 我们已经尝试了以下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);

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

  

此消息适用于C / AL程序员:

     

无法创建由Automation Server标识的OLE控件或自动化服务器的实例,其标识为GUID = {guid} 1.0:{guid}:' ourDll' .Consume

     

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

在此之后我们尝试运行GACUTIL / i ourDll.dll,它将我们的DLL安装到GAC中,但结果保持不变。既然我们已经做到了这一点,就会出现错误消息:

  

缓冲区的文本太长了。

然而,这个错误似乎并没有停止编译的导航。运行时的错误消息与上面的相同。

3 个答案:

答案 0 :(得分:2)

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

问题不是guids或接口,而是.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

答案 1 :(得分:0)

假设您使用的是NAV 2009 R2或2013:当您在全球注册时,IDE可以访问它。要让NAV服务层实际使用程序集,您还需要将其副本放在C:\Program Files\Microsoft Dynamics NAV\70\Service\Add-ins

答案 2 :(得分:0)

在我的情况下,我错过了/ codebase选项。因此,要注册程序集,我需要使用/ codebase选项和/ tlb选项。

请参阅此帖子:What does "Register for COM Interop" actually do?