1

我创建了 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 创建的 DB 文件的逻辑,与 V_4_OperationProject 类似。

当我要从 V_1_OperationProject 在 DB 中插入值时,出现以下异常:

System.IO.FileLoadException:'无法加载文件或程序集'LiteDB,版本 = 1.0.0.0,文化 = 中性,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>

这也不适合我。有人可以帮我吗?提前致谢

4

2 回答 2

0

您需要告诉运行时在哪里查找每个版本。您可以使用 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; 
    }
于 2018-11-23T13:25:44.643 回答
0

两个 LiteDB 版本将具有单独的代码和数据。但是他们可能还有其他方式发生冲突,比如共享一个通用配置、端口号或其他任何东西。我想你将不得不尝试看看它是否适合你。

于 2018-11-27T15:01:28.883 回答