.Net сборка для переноса БД не может быть зарегистрирована, если com-interop установлен в разделе свойства проекта, сборка в vs

#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. К сожалению, нет прямой инструкции, как решить вашу проблему. Динамическое добавление сборок в стороннюю сборку — довольно сложная вещь.