要开始使用F#,请参考以下文档:

安装并运行F#后,请参考以下资源,以获取特定于平台的技术,工具和资源.

本指南包括与使用F#进行跨平台开发有关的资源. 要贡献本指南,请登录GitHub, 编辑此页面并发送拉取请求.


请注意,下面列出的资源仅用于与F#编程语言相关的教育目的. F#软件基金会不认可或推荐任何商业产品,过程或服务. 因此,提及商业产品,过程或服务不应理解为认可或推荐.

Resources for cross-platform development

Compilation, Command Line Tools and Scripting

您可以使用来启动F#Interactive

$ fsharpi

> 1+1;;

val it : int = 2

你走了! 一些常见的命令是:

fsharpi                            (starts F# interactive)
fsharpc file.fs                    (F# compiler)
xbuild                             (builds .fsproj projects and .sln files)
mono file.exe arg1 ... argN        (runs a compiled F# program)
mkbundle --static file.exe -o file (makes a static native image, including the F# runtime)

跨平台用户也可能对Fable感兴趣, Fable是发出JavaScript的F#编译器.

Editing

一些编辑器内置或通过F#社区提供的插件对F#具有特定的支持:

如果在Emacs或其他类似环境中运行F#Interactive,请使用

> fsharpi --readline-

to turn off console processing.

Documentation

有关大多数F#文档,请参阅文档页面 .

Projects and Build Automation

.fsproj and .sln files

您可以使用xbuild从Visual Studio构建.fsproj.sln文件格式描述的项目和解决方案,而无需进行更改. Xamarin Studio和MonoDevelop也可以创建和管理.fsproj和.sln文件.

使用xbuild构建项目和解决方案:

xbuild RocketPart.fsproj
xbuild RocketSolution.sln

许多进行跨平台或Mac / Linux开发的人不喜欢.sln文件,因为文件格式不太适合人工编辑. 如果是的话,你还可以创建一个.fsproj ,汇集集合文件.fsproj文件. 可以在F#Core Engineering上找到此示例

围绕F#项目的工具通常依赖于存在的.fsproj文件,例如emacs模式下的自动完成或Vim不能自动完成,除非编辑F#脚本时. 这些.fsproj文件是特殊的XML文件,因此手工维护可能有些笨拙. 为了解决这个问题,您可以使用Xamarin Studio或MonoDevelop之类的工具来创建和维护它们,或者使用Forge类的命令行工具(请参见下文).

Forge

Forge是用于生成和管理项目的自包含工具. 它允许基于扩展的模板列表生成新项目. 它还从工具和布局方面总结了这些项目的最佳实践. 生成的项目包含.fsproj文件,这些文件又可以通过伪造进行管理,并确保跨平台构建以及编辑器集成可以立即使用. 当然,forge也可以为现有项目管理.fsproj文件.

Makefiles

F#命令行编译器(fsharpc)可以按常规方式与Makefile一起使用.

FAKE

FAKE是F#程序员有时使用的构建和发布自动化实用程序(部分是因为构建是使用F#本身自动化的,部分是因为它是一个很好的工具).

FAKE can be fetched using NuGet.exe, e.g.:

# Get nuget.exe
sudo mozroots --import --sync
curl -L http://nuget.org/nuget.exe -o nuget.exe

# Get FAKE.exe
mono nuget.exe install FAKE -OutputDirectory lib -ExcludeVersion -Prerelease

Package Repositories and Dependency Management

NuGet

NuGet是一个开放源代码,跨平台的软件包管理工具,其中包含成千上万的软件包. 请参阅文档 . 它在Windows生态系统中得到了广泛的使用,但是在跨平台使用中却在不断增长.

对于Mac / Linux上的用户,熟悉命令行NuGet.exe实用程序非常有用. 获取这样的命令行实用程序:

# Get nuget.exe
sudo mozroots --import --sync
curl -L http://nuget.org/nuget.exe -o nuget.exe

在Mac / Linux上使用NuGet.exe之前,请确保运行

 mozroots --import --sync

典型用法是:

mono nuget.exe install                               -- installs from packages.config
mono nuget.exe install packageId -Version 2.2.2.3    -- installs particular version of particular package

一个示例packages.config是:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="FsUnit" version="1.2.1.0" targetFramework="net40" />
 <package id="NUnit" version="2.6.2" targetFramework="net40" />
</packages>

另请参阅文档 .

可以将F#项目文件(.fsproj)配置为在构建过程中自动获取NuGet软件包. 项目文件应具有这样的行(调整"…"以引用已签入项目的NuGet.targets的副本).

<Import Project="...\NuGet.targets" Condition="Exists('...\NuGet.targets')" />

NuGet.exe的副本应位于设置了可执行权限的目录中. 您可能还需要设置:

export EnableNuGetPackageRestore=true

将NuGet.exe的副本检入到项目中是很常见的,例如在lib / NuGet / NuGet.exe中.

您可以将NuGet支持添加到这些IDE(如果尚不存在). 参见NuGet for MonoDevelop和Xamarin Studio .

请访问http://nuget.org,以了解如何制作和发布NuGet软件包,或查看其他F#社区项目中的示例.

Paket

Paket是.NET的依赖项管理器客户端,在F#社区中非常流行. 在Paket网站上可以找到有关将Paket与F#一起使用的出色文档.

您也可以在F#脚本中使用Paket规范作为前缀. 例如,请参阅Paket和Suave .

一些技巧:

Paket Load Script Generation

Paket具有--generate-include-scripts ,对于执行引用许多nuget包的跨平台脚​​本非常有用.

Some Examples of Cross-Platform Packages

某些F#和CLI软件包比其他软件包更跨平台友好. 许多人将保持不变. 这里有一些有趣的地方:

在更广泛的F#exosystem中,有许多跨平台和/或可移植的软件包和库. 这里有些例子:

作为F#可用核心库的一部分,可以使用多种跨平台库,例如:

还提供兼容性指南, 文档迁移评估工具 .

Portable (PCL) Libraries

便携式.NET库可以访问较少的核心功能(称为"便携式配置文件"),但可以在多个平台和.NET的多个配置文件中使用. 例如,便携式库可能在Mac,Linux,Android,iOS,Windows和Windows Store应用程序上可用(取决于使用的运行时机器的版本和其他因素).

有关针对Visual Studio用户的跨平台可移植库的透视图,请参见正在发生带有.NET的跨平台可移植类库.

F#可移植库引用FSharp.Core版本(例如2.3.5.1)以及匹配的mscorlib版本. 可能需要进行绑定重定向,以确保正确绑定到这些库的绑定,例如,重定向到FSharp.Core 4.4.0.0.

在OSX和Linux上编写可移植库时,请确保参考FSharp.Core nuget包以找到FSharp.Core的正确配置文件版本. 这比依靠F#安装附带的任何特定版本要简单.

有关FSharp.Core的更多信息,请参见F#Software Foundation的核心工程组提供 有关FSharp.Core注释和指南 .

Binding Redirects

应用程序几乎肯定会需要为某些或所有组件指定"绑定重定向",其中在运行时需要将组件的多个版本"统一"为一个主版本. 这尤其适用于FSharp.Core但也适用于其他组件. 例如,请参阅FSharp.Cpre的绑定重定向示例 .

Unit Testing

可以在此处找到.NET单元测试框架的表.

Fuchu

Fuchu是.NET的测试库,支持C#和VB.NET,但特别关注F#. 它极大地借鉴了Haskell的测试框架和HUnit. 您可以在此博客文章中了解基本原理和基本概念,或者测试应该是一流的值,以便您可以随意移动它们并在所需的任何上下文中执行它们. 另外,如果它们是一流的值,那么您可以格外小心测试方法返回的内容,从而使与外部库的集成便宜得多.

Install-Package Fuchu

由于测试是价值,因此很容易扩展框架以使其与其他工具集成,例如通过FsCheck使用模糊测试/随机化方法进行测试(请参见下文)

Install-Package Fuchu.FsCheck

Fuchu还与PerfUtil集成在一起,可用于在持续集成环境中自动化性能测试和趋势.

Install-Package Fuchu.PerfUtil

FsCheck

FsCheck是用于自动测试.NET程序的工具. 程序员以函数,方法或对象应满足的属性形式提供程序规范,然后FsCheck测试该属性在大量随机生成的情况下是否成立.

NUnit

NUnit是一个针对F#和其他.NET语言的开源,跨平台的单元测试框架. 它是用C#编写的,并且经过了完全重新设计,以利用许多.NET语言功能,例如自定义属性和其他与反射相关的功能. 而且xUnit是NUnit的一个很好的选择.

一起使用F#和NUnit的一些指南是:

FsUnit

Fs程序员通常将FsUnit用作DSL来访问流行的单元测试框架. FsUnit NuGet软件包可用.

Continuous Integration builds

Using Travis and AppVeyor

定期跨多个平台构建和测试工作的最简单方法就是使用Travis.

您可以使用Travis自动化所有提交的构建和测试,并将请求拉到Linux和OSX上的GitHub项目. 这很容易安排,只需将.travis.yml文件添加到项目根目录( exampleexample ),然后在Travis帐户中注册该项目.

将语言设置为" objective-c"会导致Travis使用OSX机器进行构建.

Travis对于开源项目是免费的.

为了在Windows上自动化构建和测试,AppVeyor是一个不错的选择. 这是一个示例配置文件 .

Miscellaneous Notes on Open Source and Cross Platform Development

Testing on multiple platforms

如果您是Windows开发人员,则可以设置一个Vagrant框,以便在Mono上测试您的库和工具(尽管Travis构建通常比较简单,请参见上文). 此处提供了设置Vagrant的详细指南.

Dos and Don’ts

Developing Cross-Platform and Multi-Targeting Type Providers

F#类型提供程序是编译时组件,必须在构建和开发过程中在您的计算机上执行.

在Mac / Linux上执行的类型提供程序可以暴露.NET实现中的一些细微差异,例如System.Type实现中的差异. 通常可以调整ProvidedTypes API以解决这些问题.

为了帮助解决问题,请尝试以下操作:

切换到命令行编译将有助于定位问题.

Having trouble?

by  ICOPY.SITE