使用F#的Metro风格应用?

jeh*_*eha 16 f# microsoft-metro windows-8 visual-studio-2012

在Build 2011主题演讲和演示中,他们总是谈论C++,C#,Visual Basic和JavaScript.我不能用F#构建Metro风格的应用程序吗?或者可以肯定地说,如果它适用于C#,那么它也适用于F#吗?

Dar*_*rov 12

或者它是否有资格说它是否适用于C#然后它也适用于F#?

是的,这就是应该如何运作的.除了javascript和C/C++之外,在CLR之上运行的任何符合CLS的语言都可以访问WinRT API.

不幸的是在VS 2011 Express版本中你没有获得工具支持,但我想这将逐步添加或添加到其他版本:

在此输入图像描述

  • 这不是那么容易.确实,运行时投影对于编译为IL的任何内容都是完全透明的,但是大多数编译器还需要在编译时从程序集中加载类型信息(用于类型检查).这意味着能够读取和解析.winmd文件,与vanilla CLI程序集相比,这些文件具有一些扩展名.此外.winmd文件按原样描述WinRT类型,而不应用CLR投影规则 - 例如,如果您阅读它们,您会看到实现`IIterable <T>`WinRT接口的类型,但在运行时CLR会将其映射到`IEnumerable <T>`.因此需要编译器支持. (18认同)

Bri*_*ian 11

唐在7点40分左右谈到这个问题.

http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-904T


Pie*_*ort 8

我有同样的问题并创建了一篇博文:在F#中创建一个Metro应用程序(不是)

有几个问题:

  • 你不能引用普通的.NET dll(即使在C#中).它们必须通过WinRT的"引用"进行重新编译.因此,您无法引用F#dll.我认为这将在F#3.0发布时解决(来源:在构建时从Don Syme了解F#幻灯片).
  • F#创建Metro应用程序的能力.这必须由F#团队建立.这是一个悬而未决的问题.这是全F#方法(在WPF中,它现在可以但不推荐).
  • 用于创建Metro前端项目的工具支持.对于F#3.0版本,情况并非如此.(来源:在构建时了解Don Syme的F#幻灯片).


jgr*_*ves 6

使用Visual Studio 11 Developer Preview(Full,而不是Express),我能够从C#Metro风格应用程序引用和运行F#代码,并带有以下警告:

  • 即使Visual Studio仍允许您添加它,您将收到一条构建警告,指出无法引用该项目.

  • 您必须删除F#项目中所有DLL的所有引用,包括FSharp.Core.

通过执行这些步骤,可以从C#Metro样式应用程序运行F#代码,但是如果不引用核心语言库,几乎不可能在F#中编写任何有用的代码.我们希望他们很快就能将这些库更新为WinRT兼容.