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" "$@"
Другие вопросы по тегам