使用Mono编译IronPython

3

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

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

我该如何解决这个问题?根据IronPython网站上的说法,所有内容都应该能够无误地编译。
在Mono邮件列表中已经存在这样的一个bug,但对于这个bug并没有答案。因此,我想也许这个论坛是这个问题的更好解决之处。
2个回答

3
我虽然不是IronPython或Mono的专家,但出于好奇我刚刚尝试了一下。由于某种原因,在Mono实现中,SocketOptionName枚举中的IPV6Only值似乎已经消失了。你收到的错误消息来自IronPython.Module/Socket.cs中的代码,该代码试图引用此值。事实证明,这在代码库中已被认为是不是所有平台都具有的功能,因此有一个简单的解决方法:在您的git checkout中的Solutions/目录中的Common.proj项目文件中定义了许多可能的ReferencedPlatform值。默认值为V4。在XML中,找到以下块的位置:
<PropertyGroup Condition="'$(ReferencedPlatform)' == 'V4'">

嵌套在其中的是一个包含应用功能列表的Features元素,如果您找到并删除列表末尾的FEATURE_IPV6,那么您应该会发现使用make可以构建项目。我简要地尝试启动生成的ipy.exe,它似乎可以正常工作。
显然,这不是一个很好的解决方案。最好的方法可能是向IronPython项目提交错误报告。我猜,在维护Mono on Linux的人员中,Mono on Linux可能是一个相当低的优先级。

0

请详细说明一下,您是说如果我在“xbuild”命令中添加一些文本,它就会编译吗?如果是这样,请问那个文本是什么? - Michael
我正在使用mono 4.2.1版本,如果我试图在不从Common.proj中删除“IPV6Only”功能的情况下构建,它仍然会失败。 - Michael
很遗憾我还没有尝试过4.2版本,我只是注意到了代码更改,这意味着它可能很快就能工作。 - KCD

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