MacOSX上的Mono - “此应用程序支持的运行时版本不可用。”v4.5

3
我刚刚在MACOSX 10.10.5 Yosemite上安装了Mono v4.0.4。 安装程序包是:从http://www.mono-project.com/download/下载的MonoFramework-MDK-4.0.4.4.macos10.xamarin.x86.pkg
我有一个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和mono 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目录。这些符号链接的目标是存在的。
我无法弄清楚如何告诉mono,“是的,v4.5确实存在。请使用它。”
我有一个单独的问题,可能与此相关。在收到上述警告后,xsp4运行。当我尝试在浏览器中加载ASPX应用程序时,我遇到了可怕的CS0234错误。

enter image description here

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

我想你需要找到 System.Web.Http.dll,它是 v4.5 版本的一部分,并且已经存在于 gac 目录中。我认为 xsp4/mono 找不到这个 DLL。我的理解正确吗?

我可能做错了一些基础操作。有人能给我指点迷津吗?


那个运行时指的是CLR,所以它只是4.0。 - Lex Li
1个回答

3

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所需的运行时,因此除非你确实需要强制使用不同的运行时版本,否则不需要指定它。
FYI:Mono为xsp4(以及其他工具/实用程序)安装了Shell脚本,因此您无需手动输入路径。
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" "$@"

谢谢Robert。这个语句:“那个选项是用来控制CLR运行时的”解决了我的问题。我花了很多时间才找到权威文档,描述“--runtime”选项或任何“mono”程序选项。我对mono还不熟悉,但之前在.NET方面有很多经验,所以你提供的其他提示也非常有帮助。 - Cheeso
np... FYI:man mono将提供有关各种选项的大量信息。 - SushiHangover
1
我也收到了同样的警告,但上面的回答并没有让我明白。这个警告只是噪音,还是我们应该担心它? - Joe Strout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接