无法让 System.Numerics 在 OS X 上使用命令行 Mono (mcs)

Posted

技术标签:

【中文标题】无法让 System.Numerics 在 OS X 上使用命令行 Mono (mcs)【英文标题】:Can't get System.Numerics to work with command-line Mono (mcs) on OS X 【发布时间】:2013-05-12 00:49:32 【问题描述】:

我们正在尝试在 OS X 的命令行上运行一个简单的 Mono 脚本。大多数脚本对我们来说都可以正常工作,但是一旦我们尝试使用 System.Numerics,我们就会收到“错误 CS0234:类型或命名空间命名空间 System 中不存在名称 `Numerics'。"

这并不太令人惊讶,应该可以通过 mcs 的适当命令行选项以及正确设置 PKG_CONFIG_PATH 来修复......但这就是我们难住的地方。首先,这是脚本,您可以在家里跟着做:

using System;
using System.Numerics;

public static class MainProgram 
    public static void Main(string[] args) 
        Console.WriteLine("Hello world!");
    

接下来我们尝试了“mcs -r:System.Numerics Test.cs”。这会产生“错误 CS0006:找不到元数据文件‘System.Numerics’”。

“man mcs”建议我们可以通过在命令行中添加“-pkg:dotnet”来获取其他系统包。但这会产生:

在 pkg-config 搜索路径中找不到包 dotnet。可能 您应该将包含“dotnet.pc”的目录添加到 PKG_CONFIG_PATH 环境变量 No package 'dotnet' found 错误 CS8027:运行 pkg-config 时出错。检查上面的输出。

好吧,我们没有 PKG_CONFIG_PATH,所以我们尝试定义一个:

export PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig/

这修复了 CS8027;但我们仍然得到我们开始使用的 CS0234。如果我将 -pkg 和 -r 结合起来,例如“mcs -pkg:dotnet -r:System.Numerics Test.cs”,我收到“错误 CS0006:找不到元数据文件‘System.Numerics’”。

此时我被难住了...知道我缺少什么咒语来使 System.Numerics 与 mcs 一起工作吗?

【问题讨论】:

【参考方案1】:

如果您使用的是 Mono 2.10.x,则必须使用 dmcs 而不是 mcs 进行编译以启用 4.0 配置文件(System.Numerics 仅是 C# 4.0+ 功能)。

如果您使用的是 Mono 2.11.x 或 3.0.x,则默认情况下mcs 应选择 4.5 配置文件。 mcs -help 应显示 244.5 作为 -sdk 选项的可能值。如果没有,那么框架没有正确安装;我有一次,我认为/Library/Frameworks/Mono.framework/Versions/Current 指向了错误的目录;第二次安装解决了这个问题。

处理pkg-config 应该是不必要的。

【讨论】:

谢谢! mcs --version 显示我正在运行 2.10.12.0。它确实有一个 -sdk 选项,默认为 2,据说允许 4,但是当我尝试 -sdk:4 时,我得到一页错误。但是 dmcs 可以正常工作,所以我们会一直坚持下去,直到升级到 Mono 2.11.x 或更高版本。我们真的被这个问题难住了——感谢您的帮助!

以上是关于无法让 System.Numerics 在 OS X 上使用命令行 Mono (mcs)的主要内容,如果未能解决你的问题,请参考以下文章

如何添加对 System.Numerics.dll 的引用

System.Numerics.Vectors IsHardwareAccelerated 返回 false

c# 使用 system.numerics 将数组元素相乘

System.Numerics.Vector<int> 仅部分初始化

使用 SIMD (System.Numerics) 编写向量求和函数并使其比 for 循环更快

System.Numerics.Vector.GreaterThan 和 bool 结果