Деварт: Система.Исключение TypeLoadException: Метод, не реализованный в типе

#c# #gac #devart

Вопрос:

В настоящее время у меня проблема в том, что устаревшее программное обеспечение нормально работает на моей локальной машине, но когда я развертываю новую версию, приложение выходит из строя для клиента.

Приложение использует devart для подключения к используемой базе данных oracle. Я заменил упомянутые библиотеки DLL devart их версиями NuGet, и локально все работает просто отлично. Когда я копирую скомпилированные файлы со своего локального компьютера и пытаюсь выполнить их на клиентской машине, я получаю следующую ошибку:

 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.
 

Я пробовал другие версии nugets devart, но безуспешно. В настоящее время установленные версии такие же, как и в последней версии приложения, которая отлично работает для наших клиентов.

Любая помощь была бы очень признательна, потому что я уже два дня пытаюсь решить эту проблему.

ИЗМЕНИТЬ: Я использую .net framework 4.6 и entity framework 6 , не .net core или .net standard

Комментарии:

1. Это сообщение часто связано с некоторыми несоответствиями в настройке/развертывании. Некоторый компонент (.dll) ссылается на другой компонент, но они были созданы в разное время, и один из них более поздний (например, имеет больше методов/свойств) и ожидает большего от другого.

2. @SimonMourier Вы знаете, как я мог бы узнать, какие компоненты ссылаются на ту версию сборки, которая создает исключение?

3. Вы можете проверить все сборки в процессе (например, с помощью такого инструмента, как Process Explorer от sysinternals), какие они версии, посмотреть, не выглядит ли что-нибудь противоречивым. Вы также можете использовать ProcMon из sysinternals и отслеживать доступ к файлам (вы можете фильтровать по имени вашего процесса).

4. forums.devart.com/viewtopic.php?t=36413

Ответ №1:

Если для свойства целевой платформы вашего проекта установлено значение .NET Framework, следует использовать сборки Devart.*, поставляемые с установкой поставщика:

  • «C:Program Файлы (x86)DevartdotConnectOracleDevart.Data.dll»
  • «C:Program Файлы (x86)DevartdotConnectOracleDevart.Данные.Oracle.dll»
  • «C:Program Файлы (x86)DevartdotConnectOracleСущностьEF6Devart.Данные.Oracle.Сущность.EF6.dll»

Посылка https://www.nuget.org/packages/devart.data.oracle.ef6 содержит сборки, скомпилированные для .NET Standard 2.1.

Комментарии:

1. Я использовал упомянутые вами локальные сборки, но все еще безуспешно. Как только приложение запускается на любой другой машине, я получаю исключение.

2. Кроме того, я хочу развернуть приложение через наш конвейер CI/CD. Вот почему я не могу использовать свои локальные библиотеки DLL и вместо этого мне нужно использовать nuget-пакеты.

3. Если поставщик установлен на вашем локальном компьютере, среда выполнения загружает сборки Devart.* .NET Framework из GAC, даже если вы ссылаетесь на сборки из другого расположения. Вы можете проверить это в режиме отладки через Отладка > Windows >> Модули. Разверните приложение на совершенно новой виртуальной машине со сборками поставщиков из папки установки, чтобы убедиться, что оно работает именно так.