【问题标题】:Could not Load Type from Microsoft.Extensions.Logging.Abstractions无法从 Microsoft.Extensions.Logging.Abstractions 加载类型
【发布时间】:2019-11-22 00:41:05
【问题描述】:

我有一个适用于某些计算机而不适用于其他计算机的解决方案。例外是:

无法从程序集“Microsoft.Extensions.Logging.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 中加载类型“Microsoft.Extensions.Logging.Abstractions.Internal.NullScope”

来自诊断集输出构建的添加信息说:

抛出异常:Services.dll 中的“System.Exception”。抛出异常:System.Private.Corelib.dll 中的“System.Exception”

我正在尝试找出两台计算机之间的区别,但结果不足。

  • 工作/不工作的两台计算机都运行 VS2017 v15.9.17。
  • 两台计算机都安装了 .NET Framework 4.0
  • 启动项目使用 C# 7.1
  • 启动项目是.NET Core 2.0
  • 输出显示引发错误的项目是 .NET Standard 2.0
  • 启动项目正在使用依赖注入来创建通过 DBContexts 访问数据库的服务
  • 失败的调用是:
CustomUnit unit = await _dbContext.CustomUnit
                    .Include(x => x.Type)
                    .Include(x => x.UnitBuckets)
                    .Include(x => x.InventoryBuckets)
                    .Include(x => x.WIPBuckets)
                        .ThenInclude(y => y.Unit)
                    .SingleOrDefaultAsync(x => x.UnitId == unitId);

工作的机器总是工作,而机器不工作的机器。我试过清除 nuget 缓存、删除和重新添加引用、删除和重新克隆项目到新位置,但都没有结果。由于所有机器都是从同一个分支中提取代码而没有进行任何修改,因此代码库是相同的。我一直无法找到两台机器之间的任何差异,这可以解释为什么它可以在一台机器上运行而不是在另一台机器上运行。谁有想法?

【问题讨论】:

  • 鉴于这是在 .NET Core 上运行的,请从命令行运行 dotnet --info 并确保两台机器上都安装了相同版本的运行时。还可以尝试在两台机器上运行dotnet publish,将二进制文件复制到另一台机器上,然后在另一台机器上运行二进制文件,看看它是否是运行时的问题,或者构建资产。
  • dotnet --info 显示它们运行的​​是相同的版本。有趣的是,在可以运行的机器上运行 dotnet publish 会导致可执行文件在同一台机器上无法运行。这是否意味着 VS 以某种方式在内部访问 v2.2.0.0 以便可以看到 NullScope 对象?值得注意的是,在与微软交谈后,我了解到 NullScope 仅存在于 2.2.0.0 中,但在 3.0.0.0 中甚至不是对象

标签: c# .net-core reference nuget


【解决方案1】:

我解决了从 Nuget 安装“Microsoft.Extensions.Logging”的问题

【讨论】:

【解决方案2】:

问题已解决。我将项目中的每个 Microsoft.Extensions nuget 包都更新为 3.0.0.0,即使它们似乎与 Logging.Abstractions 无关并且解决了问题。

更新: 1. Microsoft.Extensions.Configuration 2. Microsoft.Extensions.Configuration.Abstractions 3.Microsoft.Extensions.Configuration.Binder 4.Microsoft.Extensions.Configuration.Json 5. Microsoft.Extensions.DependencyInjection 6. Microsoft.Extensions.Options

【讨论】:

    【解决方案3】:

    问题已解决。我从我的解决方案中删除了每个“Microsoft.Extensions.Logging.Abstractions”并解决了这个问题。不用谢我))

    【讨论】:

      【解决方案4】:

      我通过手动将包的项目加载到解决方案中来解决此问题,将其连接为包引用,然后编译,然后重新启动 Visual Studio,然后从解决方案中删除项目,使其恢复原样,然后再次编译。

      不知道为什么这会为我修复它,我认为这是 Visual Studio 的一个错误...

      【讨论】:

      • 这听起来太熟悉了...
      【解决方案5】:

      又遇到了这个问题,这次的问题是我的项目引用了不同版本的 Microsoft.Extensions.Logging.Abstractions。

      在大多数情况下,为我的解决方案加载了包,其中使用 3.x (Serilog.AspNetCore 3.x),但对于一个包(在我的情况下为 Microsoft.EntityFrameworkCore 2.x),加载了 2.x 版。对我来说,我无法升级这个,所以我不得不降级其他所有东西,以便任何软件包所需的唯一版本是 2.x。

      有谁知道 C# 是否/为什么不能处理同一个包的多个版本?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-07
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 2015-08-28
        • 2016-03-05
        相关资源
        最近更新 更多