我是一个旧的程序,它使用实体框架核心2.2.6访问一个MS数据库.现在,我想在这个程序中添加一些测试,我更愿意使用InMemory包对EFCore进行测试。
我有一个非常简单的获取数据的方法,这在实际的程序中是有效的,但是当我尝试用InMemory数据库调用它时,我会得到以下错误:
'Microsoft.Extensions.DependencyInjection.Abstractions,System.IO.FileLoadException :无法加载文件或程序集
Version=3.1.0.0、Culture=neutral、PublicKeyToken=adb9793829ddae60‘或其依赖项之一。所定位的程序集的清单定义与程序集引用不匹配。( HRESULT: 0x80131040除外)-> System.IO.FileLoadException :无法加载文件或程序集System.IO.FileLoadException Version=2.2.0.0、Culture=neutral、PublicKeyToken=adb9793829ddae60‘或其依赖项之一。所定位的程序集的清单定义与程序集引用不匹配。(HRESULT例外: 0x80131040)
现在,它似乎期望Microsoft.Extensions.DependencyInjection.Abstractions
版本3.1.0。但是,我从来没有要求它安装它。实际上,我试图保留所有EFCore版本的<=2.2.6,因为程序是在.NET框架中创建的。我唯一能找到的区别是,我的测试程序集似乎使用app.config
文件进行包配置,而我剩下的程序集使用的是一个名为packages.config
的文件。这不是我故意做的事情,而是在我安装Nuget软件包时自动配置它。以下是这两种内容之间的区别:
app.config
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0"/>
</dependentAssembly>
packages.config
<package id="Microsoft.Extensions.DependencyInjection" version="2.2.0" targetFramework="net47" />
有谁知道这个错误是否与使用app.config
和packages.config
之间的区别有关,还是我在胡思乱想?如果是这样的话,还有什么会导致这个错误,我如何强迫它使用2.2.0版本的包,就像其他程序集一样?
发布于 2019-12-17 02:21:36
您需要将该app.config
块更改为:
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0"/>
</dependentAssembly>
虽然我建议删除这个块,但是删除包并重新添加它。
Microsoft.Extensions.DependencyInjection.Abstractions
3.1.0
以netstandard2.0
为目标,因此您可能能够使用它,在这种情况下,您可以保留您的app.config
文件,并在您的packages.config
文件中显式地升级Microsoft.Extensions.DependencyInjection.Abstractions
。
https://stackoverflow.com/questions/59372041
复制相似问题