创建 F# 应用程序

已完成

此时,你已使用了 REPL,甚至可能已经创建了 fsx 脚本文件。 现在,应用程序正在增多,因此需要包含更多文件并提升打包和分发应用程序的能力。 为此,将需要创建一个项目。 .NET SDK 提供各种项目模板来帮助你开始生成各种类型的应用程序。

什么是 .NET 模板?

安装 .NET SDK 时,将收到超过一打用于创建项目和文件的内置模板,包括:

  • Console 应用程序
  • 类库
  • 单元测试项目
  • ASP.NET Core Web 应用
  • 配置文件

F# 支持各种模板,包括测试、Web 和类库。 有关在控制台运行 dotnet new -l 的受支持项目的完整列表。

使用模板创建应用程序

若要创建新的应用程序,请使用 dotnet new .NET CLI 命令。 例如,如果要创建 F# 控制台应用程序,应使用以下命令。

dotnet new console --language F# -o MyFSharpApp

某些 shell 将 # 解释为特殊字符。 在这种情况下,将语言括在引号中,例如 dotnet new console --language "F#" -o MyFSharpApp

dotnet new console 命令使用内置控制台 .NET 模板来搭建新的控制台应用程序。

几秒钟后,名为 MyFSharpApp 的目录显示 F# 应用程序的代码。

项目结构

MyFSharpApp 目录中有两个文件:

  • Program. fs - 应用程序的入口点。
  • MyFSharpApp .fsproj - 包含生成信息和说明的 MSBuild 项目文件。 MSBuild 是一种用于生成应用程序的平台,它为项目文件提供了 XML 架构,并控制生成平台处理和生成软件的方式。

Program.cs 文件包含以下代码:

// Learn more about F# at https://learn.microsoft.com/dotnet/fsharp

open System

// Define a function to construct a message to print
let from whom =
    sprintf "from %s" whom

[<EntryPoint>]
let main argv =
    let message = from "F#" // Call the function
    printfn "Hello world %s" message
    0 // return an integer exit code

该应用程序使用由 open 关键字导入的 System 类库。

from 函数使用 whom 字符串参数来创建字符串消息并设置其格式。

main 函数是应用程序的入口点。 它使用 from 函数来创建 "from F#" 消息并将值绑定到 message。 然后,通过使用 printfn 函数,将 "Hello world from F#" 输出到控制台。

构建应用程序

既然已经创建了控制台应用程序,那么现在需要使用 dotnet build 命令来生成它。 dotnet build 命令将项目及其依赖项生成为一组二进制文件。 二进制文件包括扩展名为 .dll 的中间语言 (IL) 文件中的项目代码。 根据项目类型和设置,可能会包含其他文件,例如:

  • 可用于运行应用程序的可执行文件(如果项目类型是面向 .NET Core 3.0 或更高版本的可执行文件)。
  • 用于调试的扩展名为 .pdb 的符号文件。
  • 列出了应用程序或库的依赖项的 .deps.json 文件。
  • 用于指定应用程序的共享运行时及其版本的 .runtimeconfig.json 文件。
  • 项目通过项目引用或 NuGet 包引用所依赖的其他库。

将输出文件写入默认位置,即 bin/configuration/target<><>。 虽然调试是默认配置,但可以使用 --configuration 选项替代它。 目标是指 fsproj 文件的 TargetFramework 属性中指定的目标框架。 目标框架指定可供应用或库使用的 API 集。 例如,如果有一个 .NET 5 应用程序并运行 dotnet build,输出将显示在 bin/Debug/net5.0 中。

运行应用程序

对于可执行的应用程序,dotnet run 命令提供了一种更方便的选项来运行应用程序。 dotnet run 命令在输出目录中查找 .dll 或可执行文件,并使用 dotnet 驱动程序来执行应用程序的入口点 (Program.fs) 中定义的代码。

提示

使用 dotnet run 命令时,dotnet build 也会自动运行。 因此,可以自行保存显式生成应用程序的步骤。