LiteDB - Как добавить 2 DLL LiteDB в два разных проекта, но на них ссылается один Основной проект - PullRequest
0 голосов
/ 23 ноября 2018

Я создал 3 проекта:

  1. V_1_OperationProject:
    (проект библиотеки классов) Для обработки операции над LiteDb версии 1
  2. V_4_OperationProject:
    (проект библиотеки классов) Для обработки операции в LiteDb версии 4
  3. MainProject:
    Предоставляет вызовы методов в проектах V_1_OperationProject и V_4_OperationProject

V_1_OperationProject содержит логику для открытия и вставки в файл БД, созданный изLiteDB v1 dll и аналогично с V_4_OperationProject.

Когда я собираюсь вставить значения в БД из V_1_OperationProject, я получаю следующее исключение:

System.IO.FileLoadException: «Не удалось загрузить файл или сборку» LiteDB, Версия= 1.0.0.0, Culture = нейтральный, PublicKeyToken = null 'или одна из его зависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040) '

Когда я удалил V_4_OperationProject и связанную с ним DLL, он начал работать.Но я хочу, чтобы оба работали.

Поэтому я попытался добавить следующее в основной проект:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="LiteDB"
                          publicKeyToken="4ee40123013c9f27"
                          culture="neutral" />
        <bindingRedirect oldVersion="0.0.0-1.0.0" newVersion="1.0.0" />
        <bindingRedirect oldVersion="1.0.1-4.0.0" newVersion="4.0.0" />
        <codeBase version="1.0.0" href="\LiteDB-1\LiteDB.dll" />
        <codeBase version="4.0.0" href="\LiteDB-4\LiteDB.dll" />
      </dependentAssembly>
    </assemblyBinding>

Это также не работает для меня.Может кто-нибудь, пожалуйста, помогите мне в этом ??Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Две версии LiteDB будут иметь отдельный код и данные.Но для них могут существовать другие способы, например, общий доступ к конфигурации, номерам портов и т. Д.Я полагаю, вам придется попробовать и посмотреть, работает ли он для вас.

0 голосов
/ 23 ноября 2018

Вы должны указать среде выполнения, где искать каждую версию.Вы можете сделать это с помощью AssemblyResolve:

        AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
    }

    static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        if (args.Name == "LiteDB, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null")
        {
            return Assembly.LoadFrom(@"..\..\..\packages\LiteDB.1.1.1\lib\net\LiteDB.dll");
        }

        // The most recent version will be copied to the output directory.
        // Use the normal resolution mechanism to locate it.
        return null; 
    }
...