无法加载文件或程序集Microsoft.Extensions.DependencyInjection.Abstractions,Version = 1.1.0.0

时间:2017-05-16 07:49:44

标签: c# .net entity-framework .net-core entity-framework-core

更新到新软件包后,Microsoft.EntityFrameworkCore.SqlServer 1.1.2尝试创建DBContext时遇到错误:

  

发生System.IO.FileLoadException HResult = 0x80131040
  消息=无法加载文件或程序集   “Microsoft.Extensions.DependencyInjection.Abstractions,   Version = 1.1.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'或   其中一个依赖项。定位程序集的清单定义   与装配参考不匹配。 (HRESULT的例外情况:   0x80131040)Source = Microsoft.EntityFrameworkCore StackTrace:at   Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions   选项)at   Services.Infrastructure.Data.SqlServerDbContext..ctor(DatabaseOptions   databaseOptions)   C:\ SRC \后端\包\ Services.Infrastructure \ DATA \ SqlServerDbContext.cs:行   16点到   Translations.Api.Data.TranslationsDbContext..ctor(DatabaseOptions   databaseOptions)   C:\ SRC \后端\模块\翻译\ Translations.Api \数据\ TranslationsDbContext.cs:线   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之前一切正常。请帮忙解决问题。

10 个答案:

答案 0 :(得分:36)

由于您在.net框架库中使用该项目,因此自动生成的绑定重定向存在问题(可能会在即将发布的15.3 update / 2.0 .net核心CLI中解决)。要解决此问题,请将其添加到cpsroj文件中(最好在<Import>文件的任何.targets元素之前(如果存在):

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

这应该强制MSBuild创建/更新包含必要绑定重定向的YourProject.dll.config文件。

答案 1 :(得分:7)

如果您在 .NET Core 中使用 Azure Functions,这将起作用

如果您使用的不是 .net 框架库,而是 .net 核心库,则接受的解决方案将不起作用,因为“您不应该在 netcoreapp 项目上设置属性 AutoGenerateBindingRedirects,因为绑定重定向不是甚至在 netcoreapp 中都不是东西,它们只是 .NET Framework 中的一个概念”(来源:https://github.com/microsoft/ApplicationInsights-dotnet/issues/1699#issuecomment-592693436)。

试试这个:

  1. 卸载 Microsoft.Extensions.DependencyInjection.Abstractions
  2. 卸载 Microsoft.Extensions.DependencyInjection

虽然这看起来是一个激进的解决方案,但它确实有效,因为该库已经通过 Microsoft.Azure.Functions.Extensions 间接安装:

enter image description here

重要:不要尝试通过将 .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):

今天 (10/3/2021),我们宣布支持在 Azure Functions 上运行生产 .NET 5 应用。 https://techcommunity.microsoft.com/t5/apps-on-azure/net-on-azure-functions-roadmap/ba-p/2197916

答案 2 :(得分:5)

这是一个旧线程,但是在将Azure功能从dotnet核心版本3更新到3.1之后,我遇到了类似的问题。

错误消息:Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.9.0

在这种情况下,您需要将.proj文件中的Azure函数版本更新为“ v3”。

enter image description here

答案 3 :(得分:1)

对我来说,将所有支持.Net Standard的软件包从3.x.x降级到2.2.0是什么? 我猜想3.x软件包与不支持.net框架的.NET标准的不同版本有关。

答案 4 :(得分:1)

如果 Luis Gouveia 解决方案不适合您,请尝试降级项目中包含的其他依赖项。 .NET 标准存在一些兼容性问题。

参考:https://github.com/Azure/Azure-Functions/issues/1729

答案 5 :(得分:0)

我在下面用Google搜索了我的例外情况,这使我进入了这个stakoverflow帖子。

  

System.IO.FileNotFoundException:'无法加载文件或程序集   'Microsoft.Extensions.OptionsModel,版本= 1.0.0.0,文化=中性,   PublicKeyToken = adb9793829ddae60'或其依赖项之一。的   系统找不到指定的文件。'

我有相关的绑定重定向,但是如果我删除所有bin / obj文件夹,则此后工作正常。

答案 6 :(得分:0)

对我来说,原因是过时的VS。帮助>检查更新>更新。更新后-问题消失了。

答案 7 :(得分:0)

我将我的软件包从NuGet更新到最新版本,并且可以100%工作。

答案 8 :(得分:0)

我遇到了这个问题。但是数据包是Microsoft.Extensions.Primitives。 就我而言,我将其安装在我的项目中,也安装在nuget的项目测试中。也许可以帮助某人。

答案 9 :(得分:0)

我正在开发我的简单 .Net 5.0 控制台应用程序,在修改我项目的命名空间时,“自动安装”仅添加 Menubar = { 0: "Yes", 1: "test", 2: "test2" } MenuPrint = int(input(f"Select from: {[k for k in Menubar.keys()]} -> ")) print(Menubar[MenuPrint]) 而不是包 nuget Microsoft.Extensions.DependencyInjection.Abstraction

我花了一段时间才意识到...