Mono на MacOSX - "Версия, поддерживаемая этим приложением, недоступна". v4.5
Я только что установил Mono v4.0.4 на MACOSX 10.10.5 Yosemite. Пакет установщика был: MonoFramework-MDK-4.0.4.4.macos10.xamarin.x86.pkg
скачано с http://www.mono-project.com/download/ прошлой ночью.
У меня есть приложение webapi, которое я хотел бы запустить с xsp4.exe. Я использую эту командную строку:
/usr/bin/mono --runtime=v4.5 /Library/Frameworks/Mono.framework/Versions/4.0.4/lib/mono/4.5/xsp4.exe
Я получаю этот вывод:
WARNING: The runtime version supported by this application is unavailable.
Using default runtime: v4.0.30319
...
Почему я получаю это сообщение? Почему написано, что "версия во время выполнения недоступна"?
Я считаю, что у меня установлен v4.5, с моно v4.0.4. В каталоге /Library/Frameworks/Mono.framework/Versions/4.0.4/lib/mono
, Я могу видеть
- 2,0
- 3,5
- 4,0
- 4.5
Означает ли это, что v4.5 среды выполнения доступен?
Внутри каталога 4.5 я вижу множество библиотек DLL, все они связаны с каталогом gac. Цели этих символических ссылок существуют.
Я не могу понять, как сказать моно, да, версия 4.5 существует. ИСПОЛЬЗУЙ ЭТО.
У меня есть отдельная, возможно, связанная проблема. После получения вышеуказанного предупреждения запускается xsp4. Когда я пытаюсь загрузить приложение ASPX в браузере, я получаю страшную ошибку CS0234,
System.Web.Compilation.CompilationException
CS0234: The type or namespace name `Http' does not exist in the namespace `System.Web'. Are you missing an assembly reference?
Но в /Library/Frameworks/Mono.framework/Versions/4.0.4/lib/mono/4.5 я могу видеть
System.Web.Http.dll -> ../gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll
И эта DLL, безусловно, существует в каталоге gac. Я думаю, что xsp4 / mono не может найти System.Web.Http.dll, который является частью v4.5. Я прав?
Я делаю что-то не так. Кто-нибудь может направить меня правильно?
1 ответ
mono --runtime=
Эта опция предназначена для управления средой выполнения CLR:
CLR version .NET version
1.0 1.0
1.1 1.1
2.0 2.0, 3.0, 3.5
4 4, 4.5, 4.6
Если вы откажетесь от xsp4.exe, вы увидите, что для него требуется хост, который может обеспечить среду выполнения CLR 4.0:
ikdasm xsp4.exe | head -n 2
// Metadata version: v4.0.30319
Или через xCorFlags:
>>corflags xsp4.exe
Mono/.NET Framework CorFlags Conversion Tool. Version 1.0.5643.36015
Copyright (c) SushiHangover. All rights reserved.
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 0x9
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 1
Mono автоматически определяет требуемое время выполнения, проверяя CIL, который он загружает, поэтому нет необходимости указывать его, если вам действительно не нужно принудительно устанавливать другую версию времени выполнения.
К вашему сведению: Mono устанавливает сценарии оболочки для инструментов / утилит для xsp4 (и других), поэтому вам не нужно вводить пути вручную:
cat `which xsp4`
#!/bin/sh
exec /Library/Frameworks/Mono.framework/Versions/4.2.1/bin/mono $MONO_OPTIONS "/Library/Frameworks/Mono.framework/Versions/4.2.1/lib/mono/4.5/xsp4.exe" "$@"