本文包含有关用于 F# 开发的 Visual Studio 功能的信息。
安装 F# 支持
若要在 Visual Studio 中使用 F# 进行开发,请先安装 .NET 桌面开发 工作负载(如果尚未安装)。 通过 Visual Studio 安装程序安装 Visual Studio 工作负载,可通过选择“工具获取工具和>功能”打开。
F# 项目功能
Visual Studio 中的 F# 提供了各种项目和项模板。 下图显示了适用于 .NET Core 和 .NET Standard 的一些 F# 项目模板:
下图显示了一些 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# 中显示类型时查看这些类型。 |
| “输出”窗口 | 显示生成输出。 | 是的 |
| 性能分析 | 提供用于测量代码性能的工具。 | 是的 |
| “属性”窗口 | 显示并启用对具有焦点的开发环境中的对象的属性的编辑。 | 是的 |
| 服务器资源管理器 | 提供与各种服务器资源交互的方法。 | 是的 |
| 解决方案资源管理器 | 使你能够查看和管理项目和文件。 | 是的 |
| 任务列表 | 使你能够管理与代码相关的工作项。 | 否 |
| 测试项目 | 提供有助于测试代码的功能。 | 否 |
| 工具箱 | 显示包含可拖动对象的选项卡,如文本或代码的控件和节。 | 是的 |