编译Mono缺少默认的.NET库 - System.Object未定义或未导入。

41

我已经按照这里的指南在OS X Mavericks上编译了Mono: http://www.mono-project.com/docs/compiling-mono/mac/

现在,当我使用xbuild编译我的应用程序时,我遇到以下错误:

CSC: error CS0518: The predefined type `System.Object' is not defined or imported
CSC: error CS0518: The predefined type `System.ValueType' is not defined or imported
CSC: error CS0518: The predefined type `System.Attribute' is not defined or imported
CSC: error CS0518: The predefined type `System.Int32' is not defined or imported
CSC: error CS0518: The predefined type `System.UInt32' is not defined or imported
CSC: error CS0518: The predefined type `System.Int64' is not defined or imported
CSC: error CS0518: The predefined type `System.UInt64' is not defined or imported
CSC: error CS0518: The predefined type `System.Single' is not defined or imported
CSC: error CS0518: The predefined type `System.Double' is not defined or imported
CSC: error CS0518: The predefined type `System.Char' is not defined or imported
CSC: error CS0518: The predefined type `System.Int16' is not defined or imported
CSC: error CS0518: The predefined type `System.Decimal' is not defined or imported
CSC: error CS0518: The predefined type `System.Boolean' is not defined or imported
CSC: error CS0518: The predefined type `System.SByte' is not defined or imported
CSC: error CS0518: The predefined type `System.Byte' is not defined or imported
CSC: error CS0518: The predefined type `System.UInt16' is not defined or imported
CSC: error CS0518: The predefined type `System.String' is not defined or imported
CSC: error CS0518: The predefined type `System.Enum' is not defined or imported
CSC: error CS0518: The predefined type `System.Delegate' is not defined or imported
CSC: error CS0518: The predefined type `System.MulticastDelegate' is not defined or imported
CSC: error CS0518: The predefined type `System.Void' is not defined or imported
CSC: error CS0518: The predefined type `System.Array' is not defined or imported
CSC: error CS0518: The predefined type `System.Type' is not defined or imported
CSC: error CS0518: The predefined type `System.Collections.IEnumerator' is not defined or imported
CSC: error CS0518: The predefined type `System.Collections.IEnumerable' is not defined or imported
CSC: error CS0518: The predefined type `System.IDisposable' is not defined or imported
CSC: error CS0518: The predefined type `System.IntPtr' is not defined or imported
CSC: error CS0518: The predefined type `System.UIntPtr' is not defined or imported
CSC: error CS0518: The predefined type `System.RuntimeFieldHandle' is not defined or imported
CSC: error CS0518: The predefined type `System.RuntimeTypeHandle' is not defined or imported
CSC: error CS0518: The predefined type `System.Exception' is not defined or imported
当我在OS X上使用mono安装程序时,我从未收到过这些错误。(我正在构建mono,因为我正在添加未完成的.NET框架功能)运行autogen.sh的结果:https://gist.github.com/Geesu/149332f3f877c891d387 运行make的结果:https://gist.github.com/Geesu/4296f7d4c6c368d6986d

1
你可以发布实际的csc行以及它和构建库的位置吗? - Eris
我该如何提供这个?我不确定如何找到CSC行。此外,我可以发布编译的输出 - 这有帮助吗? - Geesu
我已经在上面添加了autogen.sh和make的结果。 - Geesu
这些结果是用于构建Mono还是您的应用程序? - Eris
这些要点是关于构建Mono的。 - Geesu
你能否发布整个xbuild输出的要点? - Cat Zimmermann
9个回答

13

如果出现类似以下警告:

/lib/mono/4.5/Microsoft.Common.targets:  warning : Unable to find framework corresponding to the target framework moniker '.NETFramework,Version=v2.0'. Framework assembly references will be resolved from the GAC, which might not be the intended behavior.

你可以在命令行上覆盖 .NET Framework:

xbuild /p:TargetFrameworkVersion="v4.0"
你可以更改你的解决方案:
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

8
我在构建Debian unstable(Sid)上的YouCompleteMe / OmniSharpServer时遇到了这个问题。问题是安装的mono版本没有安装v4.5.2框架组件,而编译器在构建该解决方案/项目时默认使用该组件。解决方法是指定一个你可用的目标框架版本或使被目标选中的版本可用(例如,在自定义编译期间)。Cat Zimmermann的响应是恰当的。

3
我也遇到了这个问题。重新运行Mavericks安装程序后,我忘记检查更新,发现Mono和Xamarin.Android都有稳定通道更新可用。安装后,一切都构建得很好。

2
原帖作者谈论的是从头开始编译的 Mono 安装,而不是通过 Xamarin 下载或通过 Mono 安装程序安装的。 - Steve Mitcham

1
我的项目开始编译,当我删除了几行代码时。
<NoStdLib>true</NoStdLib>
<NoConfig>true</NoConfig>

从它中获取。

1
安装程序和自行编译的区别在于,安装程序“知道”库文件的位置,而编译后的文件则不知道。因此,除非您在编译应用程序时指定该位置,否则会出现问题(基本上找不到系统dll)。我建议查看mcs文档并指定路径(编辑:使用“-L”参数应该可以解决问题)。

我不需要mcs工具。我正在尝试编译Mono本身。我正在为它添加尚未完成的功能。 - Geesu

1
尝试删除该解决方案中所有项目的 bin 和 obj 文件夹。

似乎这些文件夹包含了一些较早版本的 Visual Studio 生成的旧文件,这些文件与新版本的 Visual Studio 不兼容。

1

我不知道如何逻辑地回溯,但在试图修复这个问题几个小时后,

Unload .net standards project

由于我没有得到确切的问题并决定

reload it again

嘭……它奏效了……但我仍然不知道其中的逻辑原因。如果有人知道,请在下面评论。


有点奇怪,但是它有效!谢谢! - Sandro Stadler

0

我通过更改项目设置 -> 通用 -> 目标框架为Mono/.NET 4.5来解决了这个问题。

希望对您有用。


0

我遇到了同样的问题。

我检查了我的目标框架路径:属性>应用程序:目标框架,并将其设置为.Net Framework 4.7


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