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'

我怎么解决这个问题?根据the IronPython website,所有内容均应编译无误.

在Mono邮件列表中,有already such a bug,但是此错误没有答案.因此,我认为也许这个论坛是解决这个问题的一个好地方.

解决方法:

我不是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项目提交错误报告.我猜想Linux上的Mono对于那些正在维护它的人来说可能不是一个很低的优先级.

上一篇:C#-无法将代码块放入我的正则表达式匹配组


下一篇:在C#中使用`dynamic`关键字无法编译