Я работаю с довольно сложным проектом, который имеет много зависимостей.На моей установке Debian 9 со старым Mono (4.8 от Xamarin, к сожалению, обновление невозможно в то время), когда я пытаюсь запустить исполняемый файл моего приложения, я получаю следующую ошибку (я исключил журналы, которые не относятся кпроблема):
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 и надеюсь, что она работает, но все же я нахожу удивительным, что что-то базовое являетсяне найден.