我们创建了一个C#类库项目来与外部Web服务进行通信。当我们检查"注册COM互操作"此DLL已自动注册,可以在发生注册的PC上使用。然后,该PC上的Navision客户端可以使用"自动化"变量来查找此DLL并使用它。
我们需要将此DLL推广到生产环境。我们正在使用RDP解决方案,其中navision客户端在我们的用户使用的2台RDP服务器上运行。这意味着我们只需要能够将DLL部署到这两个服务器。 我们已经尝试了以下2个解决方案,我们在这里和几个博客文章中找到了这些解决方案:
执行完这些后,我们在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中,但结果保持不变。既然我们已经做到了这一点,就会出现错误消息:
缓冲区的文本太长了。
然而,这个错误似乎并没有停止编译的导航。运行时的错误消息与上面的相同。
答案 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选项。