使用Mono编译IronPython

时间:2015-02-06 11:18:17

标签: c# mono ironpython

当我尝试使用Mono(3.12)在Debian上安装IronPython时,出现以下错误:

socket.cs(1900,63): error CS0117: `System.Net.Sockets.SocketOptionName' does not contain a definition for `IPv6Only'

我该如何解决这个问题?根据{{​​3}},一切都应该编译没有错误。

在Mono邮件列表中有the IronPython website,但没有对此错误的答案。因此,我认为这个论坛可能是这个问题的一个更好的地方。

2 个答案:

答案 0 :(得分:3)

我不是IronPython或Mono的专家,但出于好奇,我只是尝试了这个。

无论出于何种原因,Mono实施中似乎缺少IPV6Only SocketOptionName中的enum值。您收到的错误消息来自IronPython.Module/Socket.cs中试图引用此错误的代码。事实证明,这已经在代码库中被认为是并非所有平台都具有的功能,因此有一个简单的解决方法:

git checkout中Common.proj目录中的Solutions/项目文件定义了许多可能的ReferencedPlatform值。默认值为V4。在XML的下方,找到一个块开始:

<PropertyGroup Condition="'$(ReferencedPlatform)' == 'V4'">

嵌套在一个Features元素中,其中包含适用的功能列表,如果在列表末尾找到并删除FEATURE_IPV6,那么您应该会发现项目将使用{{1 }}。我简单地尝试启动生成的make,它似乎有效。

显然这不是一个很好的解决方案。可能最好的事情是使用IronPython项目提交错误报告。我想Linux上的Mono对于那些努力维护它的人来说可能是一个相当低的优先级。

答案 1 :(得分:0)

正确,当设置Protocol option not supported false时,最多为单声道4.0抛出IPv6Only

这可能在这里得到解决:https://github.com/mono/mono/blob/mono-4.2.0-branch/mono/metadata/socket-io.c#L536

但是请注意编译标志IPV6_V6ONLY