我是一个旧程序,使用Entity Framework Core 2.2.6访问MS-SQL数据库。现在,我想对该程序添加一些测试,我希望使用InMemory软件包安装EFCore。
我有一个非常简单的获取数据的方法,该方法在实际程序中有效,但是当我尝试使用InMemory数据库调用它时,出现以下错误:
System.IO.FileLoadException:无法加载文件或程序集“ Microsoft.Extensions.DependencyInjection.Abstractions,版本= 3.1.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040) ----> System.IO.FileLoadException:无法加载文件或程序集“ Microsoft.Extensions.DependencyInjection.Abstractions,版本= 2.2.0.0,区域性=中性,PublicKeyToken = adb9793829ddae60”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)
现在看来,Microsoft.Extensions.DependencyInjection.Abstractions
版本应该是3.1.0。但是,我从未要求它安装它。实际上,由于该程序是在.NET Framework中创建的,因此我试图将所有EFCore版本保持在2.2.6以下。我可以找到的唯一区别是我的测试程序集似乎使用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版本?
答案 0 :(得分:0)
您需要将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
文件保持原样并升级{ {1}}在您的Microsoft.Extensions.DependencyInjection.Abstractions
文件中明确显示。