2011-11-24 66 views
3

我一直在尝试编译一些我在f#中编写的库,以在我为xbox360编写的游戏中工作,除非我一直收到一个错误,说"The module/namespace 'System.Net.WebRequest' from compilation unit 'System' did not contain the namespace, module or type 'WebRequest'为xbox360编译f#

我一直在使用编译它是命令

"C:\Program Files (x86)\Microsoft F#\v4.0\fsc.exe" -o:obj\Release\XBox360.dll --standalone --noframework --define:TRACE --optimize+ --tailcalls+ -r:"C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360\mscorlib.dll" -r:"C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360\System.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.dll" --target:library --warn:3 --warnaserror:76 --fullpaths --flaterrors somefile.fs 

有谁知道的方式来解决,或者避免这个问题?

回答

9

xbox 程序集是正常.net程序(它使用客户端框架+ - 几位)的精简版本。

一个主要的局限性是,在xbox上,只能使用微软的LIVE服务器进行通信。即没有网络请求。

您可以通过比较WebRequest page(支持的成员和构造函数旁边的xna符号)与SerializableAttribute page()的结果来看到此情况。


没有失去一切。看来核心F#DLLS要求这个类在System中出现,所以你不能只链接到核心库的XNA/xbox版本。
幸运的是,有些人在微软亲切地建立了没有这个限制的DLL。在这里看到:

https://docs.google.com/presentation/d/1teGhBf-m7qRkMzsbCKvRcIEo-QLwdK9w8VOEWqu1qWQ/edit#slide=id.ge02f430_0_70幻灯片29

XNA + F#在Xbox 360上不是一个正式支持的组合。缺少支持CLR中尾部调用的 会导致与标准F# 核心库崩溃。 Don Syme和微软的其他人友好地为Xbox 360提供了定制的 F#core lib。需要使用.fsproj 文件(可以使用脚本自动完成)。

在该演讲中,我发现了以下链接:

项目包含F#的DLL的XNA特别是内置(貌似Source的文件夹FSharpCore是你以后在做什么):https://bitbucket.org/johdex/xnautils

关于在F#中为XNA开发的博客:http://sharp-gamedev.blogspot.co.uk/

+1

有没有办法解决这个问题? (我使用的是VS 2012,并在项目MSBuild文件中播放,直到我得到了这个;请参阅我的问题[here](http://stackoverflow.com/questions/12993514/target-the-xna-framework-in-ordinary -visual-studio-2012-project)) – Jwosty

+0

不幸的不是。即使你可以通过创建你自己版本的DLL或其他东西来编译它,MS也不会让你与媒体服务器(用于流媒体音乐等)或其实时服务之外的其他任何东西进行通信。 –

+0

为什么它不起作用,如果你禁用WebRequest的东西,所以唯一的方法来与其他计算机沟通_would_将是你提到的? – Jwosty