LiteDB-如何在两个不同的项目中添加 LiteDB 的 2 个 DLL 但它们被一个主项目引用

LiteDB- How to add 2 DLL of LiteDB in two different project but they are referenced by one Main project

我创建了 3 个项目:

  1. V_1_OperationProject:
    (Class 库项目)处理 LiteDb 版本 1
  2. 上的操作
  3. V_4_OperationProject :
    (Class 库项目)处理 LiteDb 版本 4
  4. 上的操作
  5. 主要项目:
    调用 V_1_OperationProject 和 V_4_OperationProject 项目
  6. 中的方法

V_1_OperationProject 包含打开和插入从 LiteDB v1 dll 创建的数据库文件的逻辑,与 V_4_OperationProject 类似。

当我要从 V_1_OperationProject 向数据库中插入值时,出现以下异常:

System.IO.FileLoadException: 'Could not load file or assembly 'LiteDB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from 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>

这也不适合我。 谁能帮我解决这个问题?? 提前致谢

您需要告诉运行时在哪里寻找每个版本。您可以使用 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; 
    }

两个 LiteDB 版本将有不同的代码和数据。但可能还有其他方式让他们发生冲突,比如共享一个共同的配置、端口号或其他什么。我想您将不得不尝试看看它是否适合您。