【问题标题】:Could not load file or assembly Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.0.0无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 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 中恢复绑定重定向
  • 如果此错误包含有用的信息(例如不兼容的软件包)以及至少更清晰的错误消息,那就太好了。

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


【解决方案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 吗?知道什么时候修复吗? ~stackoverflow.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)。

    试试这个:

    1. 卸载 Microsoft.Extensions.DependencyInjection.Abstractions
    2. 卸载 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

    【讨论】:

    【解决方案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】:

            我遇到了同样的问题,最后用下面的解决方案解决了

            1. 在一个临时项目中安装“System.ComponentModel.Annotations”版本4.4.1得到“System.ComponentModel.Annotations.dll”的文件,然后将此文件复制到你的真实项目中,然后将你的项目引用更改为点此文件而不是原始 NuGet 路径

            2. 然后在您的 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 文件夹,然后清理解决方案,最后运行,希望这会工作。

                  【讨论】:

                    猜你喜欢
                    • 2021-03-06
                    • 2017-04-03
                    • 2023-03-21
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-01-06
                    • 2021-10-09
                    • 2020-05-09
                    相关资源
                    最近更新 更多