#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 и отслеживать доступ к файлам (вы можете фильтровать по имени вашего процесса).
Ответ №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 >> Модули. Разверните приложение на совершенно новой виртуальной машине со сборками поставщиков из папки установки, чтобы убедиться, что оно работает именно так.