【问题标题】:Devart: System.TypeLoadException: Method not implemented in TypeDevart:System.TypeLoadException:方法未在类型中实现
【发布时间】:2021-07-02 14:28:10
【问题描述】:

我目前遇到的问题是,旧版软件在我的本地计算机上运行良好,但是当我部署新版本时,客户的应用程序崩溃了。

应用程序使用 devart 连接到使用的 oracle 数据库。我已经用他们的 NuGet 版本和本地替换了引用的 devart dll,一切正常。当我从本地电脑复制编译文件并尝试在客户机器上执行它们时,我收到以下错误:

System.TypeLoadException: Method "InternalClone" in type "Devart.Common.Entity.fa" from assembly "Devart.Data.Oracle.Entity.EF6, Version=9.4.348.0, Culture=neutral, PublicKeyToken=09af7300eec23701" does not have an implementation.

我尝试了其他版本的 devart nugets,但没有成功。当前安装的版本与应用程序的最新版本相同,对我们的客户来说运行良好。

非常感谢任何帮助,因为我已经尝试解决这个问题两天了。

编辑:我使用的是.net framework 4.6entity framework 6不是 .net core.net standard

【问题讨论】:

  • 此消息通常与某些设置/部署不一致有关。某些组件 (.dll) 引用了另一个组件,但它们是在不同的时间构建的,其中一个是较新的(例如具有更多方法/属性)并且期望另一个组件有更多的东西。
  • @SimonMourier 你知道吗,我怎么知道哪些组件引用了哪个版本的程序集引发了异常?
  • 您可以检查进程中的所有程序集(例如使用 sysinternals 的 Process Explorer 等工具)它们是什么版本,看看是否有任何不一致的地方。您也可以使用 sysinternals 中的 ProcMon 并监控文件访问(您可以过滤您的进程名称)

标签: c# gac devart


【解决方案1】:

如果项目的 Target framework 属性设置为 .NET Framework,则应使用提供程序安装随附的 Devart.* 程序集:

  • “C:\Program Files (x86)\Devart\dotConnect\Oracle\Devart.Data.dll”
  • “C:\Program Files (x86)\Devart\dotConnect\Oracle\Devart.Data.Oracle.dll”
  • “C:\Program Files (x86)\Devart\dotConnect\Oracle\Entity\EF6\Devart.Data.Oracle.Entity.EF6.dll”

https://www.nuget.org/packages/devart.data.oracle.ef6 包含为.NET Standard 2.1 编译的程序集。

【讨论】:

  • 我确实使用了您提到的本地程序集,但仍然没有成功。一旦应用程序在任何其他机器上启动,我就会得到异常。
  • 另外,我想通过我们的 CI/CD 管道部署应用程序。这就是为什么我不能使用本地 DLL 而需要使用 nuget-packages 的原因。
  • 如果提供程序安装在您的本地计算机上,即使您从其他位置引用程序集,运行时也会从 GAC 加载 Devart.* .NET Framework 程序集。您可以在调试模式下通过 Debug > Windows > Modules 进行检查。使用安装文件夹中的提供程序程序集将您的应用程序部署在全新的虚拟机上,以确保它以这种方式工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
相关资源
最近更新 更多