无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 1.1.0.0
Posted
技术标签:
【中文标题】无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 1.1.0.0【英文标题】:Could not load file or assembly Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.0.0 【发布时间】:2017-10-15 04:18:31 【问题描述】:更新到新包 Microsoft.EntityFrameworkCore.SqlServer 1.1.2 后尝试创建 DBContext 时出错:
System.IO.FileLoadException 发生 HResult=0x80131040 消息=无法加载文件或程序集 'Microsoft.Extensions.DependencyInjection.Abstractions, 版本=1.1.0.0,文化=中性,PublicKeyToken=adb9793829ddae60' 或 它的依赖项之一。定位程序集的清单定义 与程序集引用不匹配。 (HRESULT 的例外情况: 0x80131040)来源=Microsoft.EntityFrameworkCore StackTrace:在 Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions 选项)在 Services.Infrastructure.Data.SqlServerDbContext..ctor(DatabaseOptions 数据库选项)在 C:\src\backend\Packages\Services.Infrastructure\Data\SqlServerDbContext.cs:line 16 在 Translations.Api.Data.TranslationsDbContext..ctor(DatabaseOptions 数据库选项)在 C:\src\backend\Modules\Translations\Translations.Api\Data\TranslationsDbContext.cs:line 16
我的基础 DbContext
public class SqlServerDbContext : DbContext
private readonly DatabaseOptions _databaseOptions;
protected SqlServerDbContext(DatabaseOptions databaseOptions)
if (string.IsNullOrEmpty(databaseOptions.ConnectionString))
throw new Exception("Database connection string is missed.");
_databaseOptions = databaseOptions;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseSqlServer(_databaseOptions.ConnectionString);
我使用的数据库选项
public class DatabaseOptions
public string ConnectionString get; set;
我创建上下文实例的地方
var dbOptions = new DatabaseOptions ConnectionString = _connectionString ;
DbContext = (TContext) Activator.CreateInstance(typeof(TContext), dbOptions);
// where TContext is derived class from SqlServerDbContext
我所有的包都更新了。 Visual Studio 2017 15.2 (26430.6)。在升级到 1.1.2 之前一切正常。请帮助解决问题。
【问题讨论】:
请提供有关您使用包的项目的信息? .net 标准/.net 框架库/控制台/Web 应用程序? @MartinUllrich .net 框架库和 .net461 FWIW - 如果您尝试升级 NuGet,然后决定使用源控制工具恢复到“工作”项目(恢复 packages.config 和 .csproj 文件),则可能会发生这种情况然后忘了从 web.config 中恢复绑定重定向 如果此错误包含有用的信息(例如不兼容的软件包)以及至少更清晰的错误消息,那就太好了。 【参考方案1】:由于您在 .net 框架库中使用该项目,因此自动生成的绑定重定向存在问题(可能会在即将发布的 15.3 更新/2.0 .net 核心 CLI 中解决)。要解决此问题,请将其添加到您的 cpsroj
文件中(如果存在 .targets
文件,最好在任何 <Import>
元素之前添加):
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
这应该会强制 MSBuild 创建/更新包含必要绑定重定向的 YourProject.dll.config
文件。
【讨论】:
谢谢。解决了我关于 2.0.0 版的问题。我安装了 2.1.0 版。 我通过 CLI 安装了一个 lib 版本,并且 ai 获得了该库的最新版本,但是,我不得不降级版本以匹配我的开发目标,即 ASP.NET Core 2.0(不是 2.1) . 仅数据库项目需要还是所有引用项目都需要? 适用于所有引用 .net 标准程序集的“非 SDK”(“经典”)csproj 文件。因此,所有引用需要此功能的项目的项目都可能需要它。 这里 15.3 是指 Visual Studio 吗?知道什么时候修复吗? ~***.com/questions/60217182/…【参考方案2】:我在下面用谷歌搜索了我的异常,它把我带到了这个 stakoverflow 帖子。
System.IO.FileNotFoundException: '无法加载文件或程序集 'Microsoft.Extensions.OptionsModel,版本=1.0.0.0,文化=中性, PublicKeyToken=adb9793829ddae60' 或其依赖项之一。这 系统找不到指定的文件。'
我有相关的绑定重定向,但如果我删除所有 bin/obj 文件夹,之后它就可以正常工作了。
【讨论】:
【参考方案3】:如果您在 .NET Core 中使用 Azure Functions,这将起作用
如果您使用的不是 .net 框架库,而是 .net 核心库,则接受的解决方案将不起作用,因为“您不应该在 netcoreapp 项目上设置属性 AutoGenerateBindingRedirects,因为绑定重定向是'甚至在 netcoreapp 中都不是一个东西,它们只是 .NET Framework 中的一个概念”(来源:https://github.com/microsoft/ApplicationInsights-dotnet/issues/1699#issuecomment-592693436)。
试试这个:
-
卸载 Microsoft.Extensions.DependencyInjection.Abstractions
卸载 Microsoft.Extensions.DependencyInjection
虽然这似乎是一个激进的解决方案,但它之所以有效,是因为该库已经通过 Microsoft.Azure.Functions.Extensions 间接安装:
重要提示:请勿尝试通过将 .NET Core 从 3.1 升级到 5.0 来解决此问题。 .NET 5.0 中仍然不支持 Azure 函数。补丁将于 2021 年初推出: https://github.com/Azure/azure-functions-host/issues/6674#issuecomment-712596112
编辑:.NET Core 现在支持 Azure 函数(除非您使用持久实体,在这种情况下,您必须等待 .NET 6.0):
今天(2021 年 10 月 3 日),我们宣布支持在 Azure Functions 上运行生产 .NET 5 应用程序。 https://techcommunity.microsoft.com/t5/apps-on-azure/net-on-azure-functions-roadmap/ba-p/2197916
【讨论】:
降级其他依赖项对我有用参考:github.com/Azure/Azure-Functions/issues/1729 谢谢,在将 DI 添加到 Azure 函数后修复对我有用【参考方案4】:这是一个旧线程,但在我将 Azure 函数从 dotnet core 版本 3 更新到 3.1 后,我遇到了类似的问题。
错误信息:Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.9.0
在这种情况下,您需要在 .proj 文件中将 Azure 函数版本更新为“v3”。
【讨论】:
这对我有帮助,但我现在需要添加一些内容,因为 Microsoft.Extensions.DependencyInjection 的 5.x 版现在可用。我不得不降级到 3.10.0,但我想任何 3.x 版本都可以正常工作。 5.x 不起作用并导致相同的问题。这可能会通过适用于 dotnet 5 的 Azure Functions 解决。【参考方案5】:对我来说,将所有支持 .Net Standard 的软件包从 3.x.x 降级到 2.2.0 是什么意思? 我猜 3.x 包与不支持 .net 框架的不同版本的 .Net 标准相关。
【讨论】:
【参考方案6】:我遇到了这个问题。但数据包是 Microsoft.Extensions.Primitives。 就我而言,我将它安装在我的项目和来自 nuget 的项目测试中。也许可以帮助某人。
【讨论】:
在我的情况下,这个Microsoft.Extensions.Primitives
程序集也无法加载。从包管理器控制台执行Update-Package -reinstall -Project MyProject
解决了问题...【参考方案7】:
这是一件很疯狂的事情,但对我来说真正有用的是更新所有以 Microsoft 开头的包,因为我更新了我的项目以运行 .Net 4.7.2,然后我只需右键单击解决方案并再次清理并构建.
【讨论】:
【参考方案8】:如果 Luis Gouveia 解决方案不适合您,请尝试降级项目中包含的其他依赖项。 .NET 标准存在一些兼容性问题。
参考:https://github.com/Azure/Azure-Functions/issues/1729
【讨论】:
【参考方案9】:我在使用 Azure 函数 3.0.13 时遇到了类似的问题
我不断收到错误System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.Extensions.Options, Version=6.0.0.0
我通过 NuGet 添加了对包的直接引用,然后必须将其添加到我的 project.csproj 文件中以使一切正常。我不能相信这个修复。前段时间我在别的地方找到的,但我不记得是从哪里找到的。
<PropertyGroup>
<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
</PropertyGroup>
【讨论】:
【参考方案10】:我遇到了同样的问题,最后用下面的解决方案解决了
在一个临时项目中安装“System.ComponentModel.Annotations”版本4.4.1得到“System.ComponentModel.Annotations.dll”的文件,然后将此文件复制到你的真实项目中,然后将你的项目引用更改为点此文件而不是原始 NuGet 路径
然后在您的 web.config 中添加以下重定向代码
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<publisherPolicy apply="no" />
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.2.1.0" />
</dependentAssembly>
</assemblyBinding>
【讨论】:
【参考方案11】:我正在开发我的简单 .Net 5.0 控制台应用程序,并且在修改我的项目的命名空间时,“自动安装”仅添加Microsoft.Extensions.DependencyInjection.Abstraction
而不是包 nuget Microsoft.Extensions.DependencyInjection
我花了一段时间才意识到......
【讨论】:
【参考方案12】:我在包含使用 EFCore 3.1.22 的程序集的 .Net Framework 网站上遇到了同样的问题。我通过将程序集重定向放在 web.config 中解决了这个问题。
【讨论】:
【参考方案13】:这里有一些解决方案:
1-我将我的包从 NuGet 更新到最新版本并且 100% 正常工作。
2- 在配置中进行这些编辑:
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
3-删除所有 bin 和 objct 文件夹,然后清理解决方案,最后运行,希望这会工作。
【讨论】:
以上是关于无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 1.1.0.0的主要内容,如果未能解决你的问题,请参考以下文章
无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0
无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配
无法加载文件或程序集'netstandard,版本 = 2.0.0.0