使用F#开发Metro风格的应用?

16

在2011年的Build Keynote和演示中,他们总是谈论C++,C#,Visual Basic和JavaScript。我是否可以使用F#构建Metro样式的应用程序?或者可以说如果它适用于C#,那么它也适用于F#吗?

6个回答

12

如果它能在 C# 中工作,那么它也应该能在 F# 中工作,对吗?

是的,这就是它应该运作的方式。除了 JavaScript 和 C/C++ 之外,任何符合 CLS 并运行在 CLR 上的语言都可以访问 WinRT API。

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

enter image description here


18
这并不是很容易。确实,运行时投影对于编译为IL的任何内容都是完全透明的,但大多数编译器也需要在编译时从程序集中加载类型信息(进行类型检查)。这意味着能够读取和解析.winmd文件,与纯CLI程序集相比,.winmd文件有一些扩展。此外,.winmd文件描述WinRT类型本身,而不应用CLR投影规则——例如,如果你读取它们,你会看到一个实现IIterable<T> WinRT接口的类型,但在运行时CLR将其映射为IEnumerable<T>。因此需要编译器支持。 - Pavel Minaev

11

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#幻灯片)。

6
使用Visual Studio 11 Developer Preview(完整版,非Express版本),我能够引用并在C# Metro样式应用程序中运行F#代码,但需要注意以下事项:
  • 您将收到一个构建警告,指出无法引用项目,尽管Visual Studio仍然允许您添加它。

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

通过遵循这些步骤,可以在C# Metro样式应用程序中运行F#代码,但几乎不可能编写任何有用的F#代码而不引用核心语言库。希望他们尽快更新库以使其与WinRT兼容。

1
问题已在此处回答: Windows 8 和 F# 虽然你不能直接用 F# 创建和设计 Metro 应用程序,但是你仍然可以在 F# 中创建所谓的可移植库,其中包含所有模型和视图模型,并在另一个 Metro 项目中使用它。这并不理想,但它能够工作。

1

我将我的股票图表库从.NET3.5-4.0移植到了可移植库,它在使用C# Metro应用程序和一些我的Metro UI桥接时表现得非常好。 我相信我可以在许多方面使用F#来制作Metro应用程序。


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