首页 > 解决方案 > 使用单声道时缺少 Microsoft.Extensions.DependencyInjection 的 System.Collection 依赖项

问题描述

我正在处理一个相当复杂的项目,它有很多依赖项。在我使用旧 Mono(来自 Xamarin 的 4.8,遗憾的是当时无法升级)的 Debian 9 安装中,当我尝试运行我的应用程序的可执行文件时,我收到以下错误(我已排除与问题):

Mono: Assembly Loader probing location: '/home/test/Application/Microsoft.Extensions.DependencyInjection.Abstractions.dll'.
Mono: Image addref Microsoft.Extensions.DependencyInjection.Abstractions[0xa3d4aa0] -> /home/test/Application/Microsoft.Extensions.DependencyInjection.Abstractions.dll[0xa3d3ea0]: 2
Mono: Prepared to set up assembly 'Microsoft.Extensions.DependencyInjection.Abstractions' (/home/test/Application/Microsoft.Extensions.DependencyInjection.Abstractions.dll)
Mono: Assembly Microsoft.Extensions.DependencyInjection.Abstractions[0xa3d4aa0] added to domain Application.exe, ref_count=1
Mono: Assembly Loader loaded assembly from location: '/home/test/Application/Microsoft.Extensions.DependencyInjection.Abstractions.dll'.
Mono: Assembly Ref addref Microsoft.Extensions.DependencyInjection[0xa3d0f58] -> Microsoft.Extensions.DependencyInjection.Abstractions[0xa3d4aa0]: 2
Mono: Assembly Loader probing location: '/home/test/Application/System.Runtime.dll'.
Mono: Assembly Ref addref Microsoft.Extensions.DependencyInjection.Abstractions[0xa3d4aa0] -> System.Runtime[0xa3d2160]: 3
Mono: Assembly Loader probing location: '/usr/lib/mono/gac/System.Collections/4.0.0.0__b03f5f7f11d50a3a/System.Collections.dll'.
Mono: Assembly Loader probing location: '/usr/lib/System.Collections.dll'.
Mono: Assembly Loader probing location: '/usr/lib/mono/4.5//Facades/System.Collections.dll'.
Mono: Assembly Loader probing location: '/usr/lib/mono/gac/System.Collections/4.0.0.0__b03f5f7f11d50a3a/System.Collections.exe'.
Mono: Assembly Loader probing location: '/usr/lib/System.Collections.exe'.
Mono: Assembly Loader probing location: '/usr/lib/mono/4.5//Facades/System.Collections.exe'.
Mono: Assembly Loader probing location: '/usr/lib/mono/gac/System.Collections/4.0.0.0__b03f5f7f11d50a3a/System.Collections.dll'.
Mono: Assembly Loader probing location: '/home/test/Application/System.Collections.dll'.
Mono: Assembly Loader probing location: '/usr/lib/System.Collections.dll'.
Mono: Assembly Loader probing location: '/usr/lib/mono/4.5//Facades/System.Collections.dll'.
Mono: Assembly Loader probing location: '/usr/lib/mono/gac/System.Collections/4.0.0.0__b03f5f7f11d50a3a/System.Collections.exe'.
Mono: Assembly Loader probing location: '/home/test/Application/System.Collections.exe'.
Mono: Assembly Loader probing location: '/usr/lib/System.Collections.exe'.
Mono: Assembly Loader probing location: '/usr/lib/mono/4.5//Facades/System.Collections.exe'.
Mono: The following assembly referenced from /home/test/Application/Microsoft.Extensions.DependencyInjection.dll could not be loaded:
     Assembly:   System.Collections    (assemblyref_index=5)
     Version:    4.0.0.0
     Public Key: b03f5f7f11d50a3a
The assembly was not found in the Global Assembly Cache, a path listed in the MONO_PATH environment variable, or in the location of the executing assembly (/home/test/Application/).

Mono: Failed to load assembly Microsoft.Extensions.DependencyInjection[0xa3d0f58]


Unhandled Exception:
System.TypeLoadException: Could not load type 'Microsoft.Extensions.DependencyInjection.ServiceCollection' from assembly 'Microsoft.Extensions.DependencyInjection, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type 'Microsoft.Extensions.DependencyInjection.ServiceCollection' from assembly 'Microsoft.Extensions.DependencyInjection, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.

我通过使用以下命令运行我的应用程序来获得此输出

MONO_LOG_LEVEL=debug MONO_LOG_MASK=asm mono Application.exe

我看到的是程序集加载器正在尝试加载 DependencyInjection,它也存在于我的可执行文件所在的目录中。使用dotPeek我反汇编了Microsoft.Extension.DependencyInjection.dll并且确实System.Collection存在:

在此处输入图像描述

我查看/usr/lib了内部(包括mono文件夹),但找不到任何System.Collections.dll,顺便说一句,Windows 上存在该应用程序,并且该应用程序在那里运行得很好。

我试图寻找所有 Xamarin 软件包,但由于版本的年龄以及 Xamarin 确保在他们的存储库中不容易找到它,这被证明是相当棘手的。作为解决方案一部分的所有项目都以 .NET 4.5.1 为目标

我将尝试复制 Windows 版本并希望它可以工作,但我仍然感到惊讶的是,没有找到基本的东西。

标签: c#.netlinuxmono

解决方案


推荐阅读