【译文】在微软发布WindowsPhone7平台之后,WindowsPhone的发展并不是很快,但是在诺基亚携手微软之后,更多的开发者看到了WindowsPhone的潜力7平台,也是谢倾尽全力打造了一个平台,供不同语言的开发者开发WindowsPhone应用。不久前,我把《写给Android开发者的Windows Phone开发秘籍》献给了你。在本文中,我们将向您介绍国外开发者贾斯汀·詹姆斯(JustinJames)如何使用IronRuby开发WindowsPhone7应用程序。以后我们会告诉大家如何开发不同语言的WindowsPhone7应用程序。的实例。以下是全文翻译:几周前,我在微软赞助的一场比赛中免费赢得了一部三星Focus手机,这激起了我开发WindowsPhone7应用程序的愿望。尝试使用IronRuby开发WindowsPhone7应用程序,因此开发了提升计算器程序。下载IronRuby我的电脑上安装了IronRuby1.1.1,但我更熟悉IronRuby1.1.2,它包括对WindowsPhone7的支持,所以我下载了二进制包(MSI版本不友好)。使用IronRuby编写WindowsPhone7应用程序我阅读了ShayFriedman的MSDN文章,标题为“WindowsPhone7上的IronRuby”,我重新定位他以适应我的需要,部分原因是作者已经完成了一些功能,另一方面,我想尝试如何使用IronRuby,此外,该文章中给出的说明并不完全正确。以下是我采取的步骤:◆添加对IronRuby包的引用,我添加了目录中的所有WindowsPhone7二进制包。◆准备XAML并添加需要的代码(作者还没有用过MVVM)。◆在调用Ruby的C#代码中,添加了如下Using语句:usingSystem.Reflection;使用System.IO;使用Microsoft.Scripting.Hosting;使用铁红宝石;传递全局变量,然后返回一个输出值。◆我将构建操作设置为将新的Ruby文件复制到输出目录。◆添加调用IronRuby脚本的代码,通过变量接收其输出。有关详细信息,请参见示例代码A(C#代码调用IronRuby脚本)和B(IronRuby脚本)。在Shay的文章中,他将整个应用程序传递给脚本。相反,我只是传递了代表输入参数的对象和保存输出的对象。运行此脚本时,输出信息显示在屏幕上。示例代码A:调用IronRuby脚本的C#代码privatevoidShowBarbellLoadout(intbarbellWeight,intdesiredLoad){varresourceStream=Application.GetResourceStream(newUri("BarbellLoader.rb",UriKind.Relative));vardataFile=newStreamReader(resourceStream.Stream);varcode=dataFile.ReadToEnd();varengine=Ruby.CreateEngine();engine.Runtime.Globals.SetVariable("BarbellWeight",barbellWeight);engine.Runtime.Globals.SetVariable("DesiredLoad",desiredLoad);varloadoutResults=(IronRuby.Builtins.Hash)engine.Execute(code);varresults=newList{{newBarbellLoadout{PlateSize=45,PlateCount=int.Parse(loadoutResults["45"].ToString())}},{newBarbellLoadout{PlateSize=25,PlateCount=int.Parse(loadoutResults["25"].ToString())}},{newBarbellLoadout{PlateSize=10,PlateCount=int.Parse(loadoutResults["10"].ToString())}},{newBarbellLoadout{PlateSize=5,PlateCount=int.Parse(loadoutResults["5"].ToString())}},{newBarbellLoadout{PlateSize=2.5M,PlateCount=int.Parse(loadoutResults["2.5"].ToString())}}};loadingChart.ItemsSource=结果;mainPivotControl.SelectedItem=barbellLoading;}示例代码B:IronRuby脚本currentTotal=DesiredLoad.to_i-BarbellWeight.to_ioutput={}output["45"]=(currentTotal/90).truncatecurrentTotal-=output["45"]*90output["25"]=(currentTotal/50).truncatecurrentTotal-=output["25"]*50output["10"]=(currentTotal/20).truncatecurrentTotal-=output["10"]*20output["5"]=(currentTotal/10).truncatecurrentTotal-=output["5"]*10output["2.5"]=(currentTotal/5).truncatecurrentTotal-=output["2.5"]*5returnoutput作者得到了一个很重要的教训:外部全局变量设置必须使用大写名称,否则变量将不起作用更令人沮丧的是,在我的脚本中,全局变量名称以美元符号为前缀,这样做本身没有错,变量被初始化,但是有没有输出,我花了很多时间解决这个问题。另一种替代技术是使用C#4中的动态函数。例如,Ruby脚本可以创建类,您可以使用动态方法实例化它们以从C#运行它们。我没有直接尝试这种方法。在纯C#代码中它可以工作,我相信在调用IronRuby代码时它可以工作。总结这个新方法不是很实用,除非你喜欢Ruby或者有兴趣深入挖掘它的能力,最大的问题是在托管DLR环境中缺乏调试选项,你无法单步调试Ruby代码,作者的调试方法是将它们复制到其他IronRuby项目中,设置全局变量,并重现C#代码设置,以便我可以单步执行代码。对于Ruby高手来说,这是小菜一碟,但对于新手来说,却并不容易。不过,在WindowsPhone7应用程序中使用IronRuby还是很有趣的。如果你想在WindowsPhone7上更多地使用IronRuby,我推荐下载iron7,一个用于WP7的Ruby解释器。【转载,非授权禁止转载,合作媒体转载请注明原文出处、作者、译者、译者!】原始出处原标题:使用IronRuby开发WindowsPhone7应用作者:JustinJames开发.net应用。【编辑推荐】WindowsPhone7动手实验室“内幕”曝光!诺基亚向开发者赠送E7和WindowsPhone7手机微软发布WindowsPhone7开发者指南WindowsPhone7发布首次更新微软向开源社区发布“IronRuby”语言