MacOSX上的单声道 - "此应用程序支持的运行时版本不可用。" V4.5

时间:2015-11-03 20:57:10

标签: asp.net .net dll mono

我刚在MACOSX 10.10.5 Yosemite上安装了Mono v4.0.4。 安装程序包是:MonoFramework-MDK-4.0.4.4.macos10.xamarin.x86.pkg昨晚从http://www.mono-project.com/download/下载的。/usr/bin/mono --runtime=v4.5 /Library/Frameworks/Mono.framework/Versions/4.0.4/lib/mono/4.5/xsp4.exe

我有一个webapi应用程序,我想用xsp4.exe运行。我使用这个命令行:

WARNING: The runtime version supported by this application is unavailable. Using default runtime: v4.0.30319 ...

我得到了这个输出:

/Library/Frameworks/Mono.framework/Versions/4.0.4/lib/mono

为什么我会收到此消息?为什么会说,"运行时版本不可用"?

我相信我安装了v4.5,单声道v4.0.4。在目录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? 中,我可以看到

  • 2.0
  • 3.5
  • 4.0
  • 4.5

这是否表示运行时的v4.5可用?

在4.5目录中,我看到很多DLL,都符号链接到gac目录。这些符号链接的目标存在。

我无法弄清楚如何辨别单声道, YEAH,v4.5 DOES EXIST。使用它。

我有一个单独的,可能相关的问题。 获得上述警告后,xsp4运行。当我尝试在浏览器中加载ASPX应用程序时,我遇到了可怕的CS0234错误,

enter image description here

System.Web.Http.dll -> ../gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll

但在/Library/Frameworks/Mono.framework/Versions/4.0.4/lib/mono/4.5中,我可以看到

SELECT
    ps_orders.id_customer,
    ps_customer.firstname,
    ps_customer.lastname,
    ps_customer.email,
    ps_orders.total_paid
FROM
    ps_orders
    RIGHT JOIN ps_customer 
        on ps_orders.id_customer = ps_customer.id_customer
WHERE
    ps_orders.total_paid > 1
GROUP BY
    ps_orders.id_customer;

该DLL确实存在于gac目录中。我认为xsp4 / mono无法找到System.Web.Http.dll,它是v4.5的一部分。我对吗?

我做了一些基本错误的事情。有人能引导我吗?

1 个答案:

答案 0 :(得分: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来自动检测所需的运行时,因此除非您确实需要强制使用不同的运行时版本,否则无需指定它。

仅供参考: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" "$@"