【问题标题】:ACCPAC Missing Method ExceptionACCPAC 缺少方法异常
【发布时间】:2018-05-03 21:24:19
【问题描述】:

我有一个在完整的 .NET 4.6.2 上运行的 ASP.NET Core 1.1 网络服务器。我正在使用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 方法,那为什么在运行时会丢失呢?

是否会从全局程序集缓存中提取错误的程序集?在不破坏需要这些程序集的其他应用程序的情况下解决该问题的最佳方法是什么?

【问题讨论】:

    标签: .net asp.net-core nuget sage-erp accpac


    【解决方案1】:

    另一位 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)。这已经坏了 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));
    

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

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多