在 Visual Studio 中使用 Visual F# 进行开发

本文包含有关用于 F# 开发的 Visual Studio 功能的信息。

安装 F# 支持

若要在 Visual Studio 中使用 F# 进行开发,请先安装 .NET 桌面开发 工作负载(如果尚未安装)。 通过 Visual Studio 安装程序安装 Visual Studio 工作负载,可通过选择“工具获取工具和>功能”打开。

Visual Studio 中的 .NET 桌面开发工作负载

F# 项目功能

Visual Studio 中的 F# 提供了各种项目和项模板。 下图显示了适用于 .NET Core 和 .NET Standard 的一些 F# 项目模板:

Visual Studio 中的 F# 项目模板

下图显示了一些 F# 项模板:

Visual Studio 中的 F# 项模板

有关数据访问的项模板的详细信息,请参阅 F# 类型提供程序

下表汇总了 F# 项目属性中的功能:

项目设置 在 F# 中受支持? 注释
资源文件 是的
生成、调试和引用设置 是的
多重目标设定 是的
图标和清单 可通过编译器命令行选项使用。
ASP.NET 客户端服务
ClickOnce 如果适用,请使用另一种 .NET 语言中的客户端项目。
强命名 可通过编译器命令行选项使用。
程序集发布和版本控制
代码分析 代码分析工具可以手动运行,也可以作为生成后命令的一部分运行。
安全性(更改信任级别)

项目设计器

项目设计器 由多个按相关功能分组的项目属性页组成。 可用于 F# 项目的页面大多是可用于其他语言的页面的子集,下表中介绍了这些页面。 提供了指向相应 C# 项目设计器 页的链接。

“项目设计器”页 相关链接 DESCRIPTION
应用程序 应用程序页,项目设计器 使你能够指定应用程序级设置和属性,例如是创建库还是可执行文件、应用程序面向的 .NET 版本,以及有关应用程序使用的资源文件存储位置的信息。
建造 “生成”页,项目设计器 使你能够控制代码的编译方式。
生成事件 “生成事件”页,项目设计器 使你能够指定要在编译之前或之后运行的命令。
调试 调试页,项目设计器 使你能够控制应用程序在调试过程中的运行方式。 这包括要使用的命令以及应用程序的起始目录是什么,以及要启用的任何特殊调试模式,例如本机代码和 SQL。
仅包 (.NET SDK) 使你可以在发布为 NuGet 包时定义 NuGet 包元数据。
引用路径 管理项目中的引用 使你能够指定在何处搜索代码所依赖的程序集。
资源(仅限 .NET SDK) 使你能够生成和管理默认资源文件。

特定于 F# 的设置

下表汇总了特定于 F# 的设置:

“项目设计器”页 设置 DESCRIPTION
建造 生成结尾调用 如果选择,则允许使用结尾Microsoft中间语言(MSIL)指令。 这会导致堆栈帧重复使用尾递归函数。 等效于 --tailcalls 编译器选项。
建造 其他标志 允许指定其他编译器命令行选项。

代码和文本编辑器功能

F# 支持 Visual Studio 代码和文本编辑器的以下功能:

功能 / 特点 DESCRIPTION 在 F# 中受支持?
自动注释 使你能够注释或取消注释代码部分。 是的
自动设置格式 使用标准缩进和样式重新格式化代码。
书签 使你可以在编辑器中保存位置。 是的
更改缩进 缩进或取消缩进所选行。 是的
智能缩进 根据 F# 范围规则自动缩进和取消缩进游标。 是的
查找和替换文本 使你可以在文件、项目或解决方案中搜索,并可能更改文本。 是的
转到 .NET API 的定义 当游标定位在 .NET API 上时,显示从 .NET 元数据生成的代码。
转到用户定义的 API 的定义 当游标位于定义的程序实体上时,将光标移动到代码中定义实体的位置。 是的
转到行 使你可以按行号转到文件中的特定行。 是的
文件顶部的导航栏 使你能够跳转到代码中的位置,例如,函数名称。 是的
块结构准则 显示指示 F# 范围的准则,这些范围可以悬停在预览上。 是的
大纲显示 使你可以折叠代码的各个部分,以创建更精简的视图。 是的
Tabify 将空格转换为制表符。 是的
类型着色 以特殊颜色显示定义的类型名称。 是的
快速查找。 请参阅“快速查找”、“查找和替换”窗口。 允许您在文件或项目中搜索。 是的
Ctrl+单击 以转到定义 允许 按住 Ctrl 并单击 F# 符号以调用 Go to Definition。 是的
从 QuickInfo 转到定义 调用“转到定义”的工具提示内的可单击符号。 是的
转到“全部” 通过 Ctrl+T 为所有 F# 构造启用全局模糊匹配导航。 是的
内联重命名 重命名内联符号的所有匹配项。 是的
查找所有引用 查找代码库中符号的所有匹配项。 是的
简化名称代码修复 删除 F# 符号的不必要的限定符。 是的
删除未使用的 open 语句代码修复 删除文档中的所有不必要的 open 语句。 是的
未使用的值代码修复 建议重命名未使用的标识符以下划线。 是的

有关在 Visual Studio 中编辑代码以及文本编辑器功能的常规信息,请参阅 编辑器中的“编写代码”。

IntelliSense 功能

下表总结了 F# 中支持的、不支持的 IntelliSense 功能:

功能 / 特点 DESCRIPTION 在 F# 中受支持?
自动实现接口 为接口方法生成代码存根。 是的
代码片段 将常见编码构造库中的代码注入主题。
完成 Word 通过键入时完成单词和名称来保存键入内容。 是的
自动完成 启用后,会导致键入时选择第一个匹配项,而不是等待选择一个或按 Ctrl+空格 是的
未打开的命名空间中的符号的套餐完成 通过自动完成,建议使用位于未打开的命名空间中的匹配符号,从而在选择时使用相应的 open 语句完成。 是的
生成代码元素 使你可以为各种构造生成存根代码。
列出成员 键入成员访问运算符(.)时,会显示类型的成员。 是的
组织 Usings/Open 使用 C# 中的语句或 F# 中的 open 指令来组织引用的命名空间。
参数信息 在键入函数调用时显示有关参数的有用信息。 是的
快速信息 显示代码中任何标识符的完整声明。 是的
自动大括号完成 以事务方式自动完成类似于 F# 大括号的语法构造。 是的

有关 IntelliSense 的常规信息,请参阅 “使用 IntelliSense”。

调试功能

下表总结了调试 F# 代码时可用的功能:

功能 / 特点 DESCRIPTION 在 F# 中受支持?
“自动”窗口 显示自动变量或临时变量。
断点 使你可以在调试期间在特定点暂停代码执行。 是的
条件断点 启用断点,用于测试确定是否应暂停执行的条件。 是的
编辑并继续 允许在调试正在运行的程序时修改和编译代码,而无需停止和重启调试器。
表达式计算器 在运行时评估和执行代码。 否,但可以使用 C# 表达式计算器,尽管必须使用 C# 语法。
历史调试 使你能够单步执行以前执行的代码。 是的
“局部变量”窗口 显示本地定义的值和变量。 是的
运行到游标 使你能够执行代码,直到到达包含游标的行。 是的
逐语句 使你能够推进执行并移动到任何函数调用中。 是的
单步执行 使你能够在当前堆栈帧中推进执行,并移动过任何函数调用。 是的

有关 Visual Studio 调试器的一般信息,请参阅 Visual Studio 中的调试

其他工具

下表总结了 Visual Studio 工具中对 F# 的支持。

工具 DESCRIPTION 在 F# 中受支持?
调用层次结构 在代码中显示函数调用的嵌套结构。
代码指标 收集有关代码的信息,例如行计数。
类视图 提供项目中代码的基于类型的视图。
“错误列表”窗口 显示代码中的错误列表。 是的
F# 交互 使你可以键入(或复制和粘贴)F# 代码并立即运行它,独立于项目的生成。 F# 交互窗口是“读取”、“评估”、“打印循环”(REPL)。 是的
对象浏览器 使你能够查看程序集中的类型。 F# 类型在编译的程序集中出现时不会像创作它们一样显示。 可以浏览 F# 类型的已编译表示形式,但无法在 F# 中显示类型时查看这些类型。
“输出”窗口 显示生成输出。 是的
性能分析 提供用于测量代码性能的工具。 是的
“属性”窗口 显示并启用对具有焦点的开发环境中的对象的属性的编辑。 是的
服务器资源管理器 提供与各种服务器资源交互的方法。 是的
解决方案资源管理器 使你能够查看和管理项目和文件。 是的
任务列表 使你能够管理与代码相关的工作项。
测试项目 提供有助于测试代码的功能。
工具箱 显示包含可拖动对象的选项卡,如文本或代码的控件和节。 是的

另请参阅