我有一个ASP.NET Core1.1Web服务器运行在完整的.NET 4.6.2上。我正在使用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方法,那么为什么在运行时缺少它呢?
它是否从全球程序集缓存中提取了错误的程序集?在不破坏其他需要这些程序集的应用程序的情况下,解决这个问题的最佳方法是什么?
发布于 2018-05-04 21:15:17
另一位智者第三方开发人员提出了一个.Net问题,听起来就像你正在经历的。这是他们在Sage论坛(鼠尾草城市邮政)上不得不说的话:
在鼠尾草2018年PU2鼠尾草决定..。 将\HKLM\SOFTWARE\Web 6432Node\ACCPAC International,Inc.\ACCPAC\Web\A4WNET的版本号提高到6.5.0.2,但不能与.net运行时库版本(6.5.0.10)保持一致。这已经破坏了Sage300的8个版本,而这两个版本都是同步的。 为什么这是个问题?.net程序集被加载到GAC中,为了避免在版本更新后重新编译/重新发布应用程序,我们使用反射加载程序集。 在此更新之前,我们可以使用System.Reflection.Assembly.Load(完整程序集签名)。但是,要使用这种方法,我们需要知道S300运行时程序集(Accpac.Advantage.dll)的版本,这是通过查询注册表获得的。 为了解决这个问题,我们现在使用System.Reflection.Assembly.LoadFile方法。这很好,但它确实绕过了.net程序集加载程序在调用Load时所做的检查。
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));编辑:另一种选择是通过COMApi使用.Net接口。
https://stackoverflow.com/questions/50164057
复制相似问题