ACCPAC缺少方法异常。

3

我有一个运行在完整的.NET 4.6.2上的ASP.NET Core 1.1 Web服务器。我正在使用ACCPAC.Advantage.dll(打包在自定义NuGet包中)连接到本地Sage安装。之前,连接成功建立,并且我能够向应付账款提交批次。但是现在启动连接失败,出现以下错误:

System.MissingMethodException: Method not found: 'ACCPAC.Advantage.DBLink ACCPAC.Advantage.Session.OpenDBLink(ACCPAC.Advantage.DBLinkType, ACCPAC.Advantage.DBLinkFlags)'.

Intellisense和ReSharper的反编译功能可以轻松找到Session.OpenDBLink方法,那么为什么在运行时会缺失呢?

可能是从全局程序集缓存中拉取了错误的程序集吗?最好的解决方法是什么,而不会破坏需要这些程序集的其他应用程序?

1个回答

2
另一位Sage第三方开发人员提出了一个与您经历的类似的.Net问题。以下是他们在Sage City论坛上的发言(Sage City Post):
在Sage 2018 PU2中,Sage决定将\HKLM\SOFTWARE\WOW6432Node\ACCPAC International, Inc.\ACCPAC\Web\A4WNET的版本号提升至6.5.0.2,但未将其与.net运行库版本(6.5.0.10)保持一致。这破坏了8个版本的Sage300,因为两者之间一直保持一致。
为什么会有问题?.net程序集被加载到GAC中,为了避免在版本更新后重新编译/发布应用程序,我们使用反射来加载程序集。
在此更新之前,我们可以使用System.Reflection.Assembly.Load([full assembly signature])。然而,要使用此方法,我们需要知道S300运行时程序集(Accpac.Advantage.dll)的版本,这是通过查询注册表获得的。
为解决此问题,我们现在使用System.Reflection.Assembly.LoadFile方法。这很好,但它确实绕过了调用Load时.net程序集加载器所做的检查。
const string SAGE_RUNTIME = "Sage\\Sage 300 ERP\\ACCPAC.Advantage.dll";

Assembly assem =
Assembly.LoadFile(
System.IO.Path.Combine(
Environment.GetFolderPath(
Environment.SpecialFolder.CommonProgramFilesX86), SAGE_RUNTIME));

编辑:另一个选项是通过 .Net 使用 COMApi 接口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接