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 个项目:
- V_1_OperationProject:
(Class 库项目)处理 LiteDb 版本 1 上的操作
- V_4_OperationProject :
(Class 库项目)处理 LiteDb 版本 4 上的操作
- 主要项目:
调用 V_1_OperationProject 和 V_4_OperationProject 项目 中的方法
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 版本将有不同的代码和数据。但可能还有其他方式让他们发生冲突,比如共享一个共同的配置、端口号或其他什么。我想您将不得不尝试看看它是否适合您。
我创建了 3 个项目:
- V_1_OperationProject:
(Class 库项目)处理 LiteDb 版本 1 上的操作
- V_4_OperationProject :
(Class 库项目)处理 LiteDb 版本 4 上的操作
- 主要项目:
调用 V_1_OperationProject 和 V_4_OperationProject 项目 中的方法
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 版本将有不同的代码和数据。但可能还有其他方式让他们发生冲突,比如共享一个共同的配置、端口号或其他什么。我想您将不得不尝试看看它是否适合您。