#c# #dll #entity-framework-core #nuget-package #com-interop
#c# #dll #entity-framework-core #nuget-package #com-interop
Вопрос:
Я хочу создать C # .Net dll как надстройка для Enterprise Architect в Visual Studio. Эта DLL должна быть зарегистрирована для com-interop, который будет использоваться Enterprise Achitect.
В этой dll я также хочу выполнить миграцию базы данных с помощью code first и пакета nuget microsoft.entityframework.core. Эта миграция базы данных отлично работает с консолью диспетчера пакетов в Visual Studio, если флажок com-interop в сборке свойств проекта не установлен. Если это проверено, моя dll не может скомпилироваться. Сообщение об ошибке является:
Сборка «… .dll» не может быть зарегистрирована. Метод «DisposeAsync» в типе «Microsoft.EntityFrameworkCore.DbContext» сборки»Microsoft.EntityFrameworkCore, версия 3.1.8 …» не имеет реализации.
В моем исходном коде у меня нет функций с каким-либо типом Dispose или аналогичных. Это простой проект с несколькими строками кода. Я пытался управлять этим в nuget package manager с более старыми версиями Microsoft.EntityFrameworkCore, но это не помогло. Также я перезаписал функцию DisposeAsync в своем коде, но это также не помогло.
Соответствующий код находится в классе контекста в строке с DbContext:
using Microsoft.EntityFrameworkCore;
namespace ...
{
public class .. : DbContext
{
В Google я ничего не смог найти, поэтому, пожалуйста, помогите мне.
Ответ №1:
Проблема может быть вызвана разными версиями сборки в вашем проекте и в продукте, в который интегрирована ваша надстройка.
Пример:
- Вы используете некоторый пакет NuGet с именем System.dll версии 2.0 в вашем проекте
- Продукт, в котором надстройка должна быть установлена с использованием той же сборки для своих собственных целей, но с другой версией (System.dll версии 1.0).
- Когда ваша надстройка загружается в целевой продукт, она загружает все необходимые сборки, на которые есть ссылки, НО если сборка с тем же именем уже загружена, она использует загруженную сборку (не ту, которую вы использовали при сборке).
- Если версии отличаются, вы получите некоторые странные исключения, подобные приведенному в вашем вопросе, или любые другие странные вещи.
Попробуйте выяснить, какую версию сборки вам нужно изменить в вашем проекте, чтобы избежать несоответствия версий dll. Попробуйте использовать FusionLog для расследования. Обратите внимание, что проблемная DLL может быть не Microsoft.EntityFrameworkCore но любая из сборок, от которых зависит EntityFramework. К сожалению, нет прямой инструкции, как решить вашу проблему. Динамическое добавление сборок в стороннюю сборку — довольно сложная вещь.