【发布时间】: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