编译器选项

本文介绍 F# 编译器的编译器命令行选项。 命令 dotnet build 对 F# 项目文件调用 F# 编译器。 F# 项目文件使用 .fsproj 扩展名进行记录。

还可以通过设置项目属性来控制编译环境。 对于面向 .NET Core 的项目,.fsproj 中的“其他标记”属性 <OtherFlags>...</OtherFlags> 用于指定额外的命令行选项。

按字母顺序列出的编译器选项

下表显示了按字母顺序列出的编译器选项。 某些 F# 编译器选项类似于 C# 编译器选项。 在这种情况中,系统会提供指向 C# 编译器选项主题的链接。

编译器选项 说明
--allsigs 为编译中的每个源文件生成一个新的(或重新生成现有的)签名文件。 有关签名文件的详细信息,请参阅签名
-a filename.fs 从指定的文件生成库。 此选项是 --target:library filename.fs 的简短形式。
--baseaddress:address 指定要加载 DLL 的首选基址。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /baseaddress(C# 编译器选项)
--codepage:id 在所需页不是系统的当前默认代码页时,指定编译期间要使用的代码页。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /code pages(C# 编译器选项)
--consolecolors 指定错误和警告在控制台上使用颜色编码的文本。
--crossoptimize[+ or -] 启用或禁用跨模块优化。
--delaysign[+|-] 仅使用强名称密钥的公共部分对程序集进行延迟签名。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /delaysign(C# 编译器选项)
--checked[+|-] 启用或禁用溢出检查的生成。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /checked(C# 编译器选项)
--debug[+|-]

-g[+|-]

--debug:[full|pdbonly]

-g: [full|pdbonly]
启用或禁用调试信息的生成,或指定要生成的调试信息的类型。 默认值为 full,它允许附加到正在运行的程序。 选择 pdbonly 以获取存储在 pdb(程序数据库)文件中的有限调试信息。

等效于同名的 C# 编译器选项。 有关详细信息,请参阅

/debug(C# 编译器选项)
--define:symbol

-d:symbol
定义用于条件编译的符号。
--deterministic[+|-] 产生确定性的程序集(包括模块版本 GUID 和时间戳)。 此选项不能与通配符版本号一起使用,并且仅支持嵌入式和可移植式调试类型
--doc:xmldoc-filename 指示编译器对指定的文件生成 XML 文档注释。 有关更多信息,请参见 XML Documentation

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /doc(C# 编译器选项)
--fullpaths 指示编译器生成完全限定的路径。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /fullpaths(C# 编译器选项)
--help

-?
显示使用情况信息,包括所有编译器选项的简要说明。
--highentropyva[+|-] 启用或禁用高熵地址空间布局随机化 (ASLR),这是一项增强的安全功能。 OS 可随机化内存中的位置,其中加载了应用程序的基础结构(如堆栈和堆)。 如果启用此选项,操作系统可以使用此随机化在 64 位计算机上使用完整的 64 位地址空间。
--keycontainer:key-container-name 指定强名称密钥容器。
--keyfile:filename 指定用于对生成的程序集进行签名的公钥文件的名称。
--lib:folder-name

-I:folder-name
针对引用的程序集指定要搜索的目录。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /lib(C# 编译器选项)
--linkresource:resource-info 将指定资源链接到程序集。 resource-info 的格式为 filename[name[public|private]]

使用此选项链接单个资源是使用 --resource 选项嵌入整个资源文件的替代方法。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /linkresource (C# 编译器选项)
--mlcompatibility 在你使用旨在与其他版本的 ML 兼容的功能时,忽略出现的警告。
--noframework 禁用对 .NET Framework 程序集的默认引用。
--nointerfacedata 指示编译器忽略资源 - 它通常添加到包含 F# 特定元数据的程序集中的资源。
--nologo 在启动编译器时不显示横幅文本。
--nooptimizationdata 指示编译器仅包括实现内联构造所必要的优化。 禁止跨模块内联,但提高了二进制兼容性。
--nowin32manifest 指示编译器忽略默认的 Win32 清单。
--nowarn:warning-number-list 禁用按编号列出的特定警告。 用逗号分隔每个警告编号。 可以从编译输出中发现任何警告的警告编号。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /nowarn(C# 编译器选项)
--optimize[+|-] [optimization-option-list]

-O[+|-] [optimization-option-list]
启用/禁用优化。 可以通过列出某些优化选项来有选择地禁用或启用这些选项。 这些包含:nojitoptimizenojittrackingnolocaloptimizenocrossoptimizenotailcalls
--out:output-filename

-o:output-filename
指定已编译的程序集或模块的名称。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /out(C# 编译器选项)
--pathmap:path=sourcePath,... 指定如何将物理路径映射到编译器输出的源路径名称。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /pathmap(C# 编译器选项)
--pdb:pdb-filename 为输出调试 PDB(程序数据库)文件命名。 此选项仅在同时启用 --debug 时适用。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /pdb(C# 编译器选项)
--platform:platform-name 指定生成的代码仅在指定的平台(x86Itaniumx64)上运行,或者,如果选择平台名称 anycpu,则指定生成的代码可在任何平台上运行。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /platform(C# 编译器选项)
--preferreduilang:lang 指定首选的输出语言区域性名称(例如 es-ESja-JP)。
--quotations-debug 指定应为派生自 F# 引用文本和反射定义的表达式发出的额外调试信息。 调试信息将添加到 F# 表达式树节点的自定义属性中。 请参阅代码引用Expr.CustomAttributes
--reference:assembly-filename

-r:assembly-filename
使 F# 或 .NET Framework 程序集中的代码可用于要编译的代码。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /reference(C# 编译器选项)
--resource:resource-filename 将受管理资源文件嵌入到生成的程序集中。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /resource (C# 编译器选项)
--sig:signature-filename 基于生成的程序集生成签名文件。 有关签名文件的详细信息,请参阅签名
--simpleresolution 使用基于目录的 Mono 规则而不是 MSBuild 解析指定应解析的程序集引用。 默认做法是使用 MSBuild 解析,在 Mono 下运行时除外。
--standalone 指定生成包含其所有依赖项的程序集,以便它可以自行运行,而无需其他程序集,如 F# 库。
--staticlink:assembly-name 以静态方式链接给定程序集以及依赖于此程序集的所有引用 DLL。 使用程序集名称,而不是 DLL 名称。
--subsystemversion 指定生成的可执行文件使用的 OS 子系统的版本。 将 6.02 用于 Windows 8.1,将 6.01 用于 Windows 7,将 6.00 用于 Windows Vista。 此选项仅适用于可执行文件,而不适用于 DLL,并且仅当应用程序依赖于仅在特定 OS 版本上可用的特定安全功能时才需要使用此选项。 如果使用此选项,并且用户尝试在较低版本的 OS 上执行应用程序,则会失败并出现错误消息。
--tailcalls[+|-] 启用或禁用尾 IL 指令,这将导致对尾递归函数重复使用堆栈帧。 默认情况下会启用此选项。
--target:[exe|winexe|library|module] filename 指定生成的已编译代码的类型和文件名。
  • exe 表示控制台应用程序。
  • winexe 表示 Windows 应用程序,该应用程序与控制台应用程序不同,因为前者未定义标准输入/输出流(stdin、stdout 和 stderr)。
  • library 是没有入口点的程序集。
  • module 是 .NET Framework 模块 (.netmodule),稍后可将其与其他模块组合到一个程序集中。
--times 显示编译的计时信息。
--utf8output 启用以 UTF-8 编码格式打印编译器输出。
--warn:warning-level 设置警告等级(0 到 5)。 默认级别为 3。 系统会根据每个警告的严重性为其指定一个级别。 与级别 1 相比,级别 5 警告出现频率更高,但严重性更低。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /warn(C# 编译器选项)
--warnon:warning-number-list 启用可能默认关闭或被另一个命令行选项禁用的特定警告。 该列表以逗号分隔。
--warnaserror[+|-] [warning-number-list] 启用或禁用将警告报告为错误的选项。 可以提供要禁用或启用的特定警告编号。 命令行中之后的选项将覆盖命令行中之前的选项。 例如,若要指定不希望报告为错误的警告,请指定 --warnaserror+--warnaserror-:warning-number-list

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /warnaserror(C# 编译器选项)
--win32manifest:manifest-filename 将 Win32 清单文件添加到编译中。 此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /win32manifest(C# 编译器选项)
--win32res:resource-filename 将 Win32 资源文件添加到编译中。

此编译器选项等效于同名的 C# 编译器选项。 有关详细信息,请参阅 /win32res(C# 编译器选项)

选择加入警告

F# 编译器支持多个选择加入警告:

Number 总结 Level 说明
21 在运行时检查的递归 5 在针对运行时的 initialization-soundness 检查递归使用时发出警告。
22 无序执行的绑定 5 在由于前向引用而无序执行递归绑定时发出警告。
52 结构的隐式副本 5 在复制不可变结构时发出警告,以确保操作不会改变原始结构。
1178 隐式相等/比较 5 在 F# 类型声明隐式推断为 NoEqualityNoComparison 但类型上不存在该属性时发出警告。
1182 未使用的变量 不适用 对未使用的变量发出警告。
3180 隐式堆分配 不适用 当可变本地变量因为已由关闭事件捕获而被隐式分配为引用单元格时发出警告。
3366 索引表示法 不适用 在使用 F# 5 索引表示法 expr.[idx] 时发出警告。
3517 InlineIfLambda 失败 不适用 在 F# 优化器无法内联某个 InlineIfLambda 值(例如提供了计算函数值而不是显式 lambda)时发出警告。
3387 op_Implicit 转换 不适用 在方法参数中使用 .NET 隐式转换时发出警告。
3388 其他隐式向上转换 不适用 在隐式使用其他向上转换(在 F# 6 中添加)时发出警告。
3389 隐式扩展 不适用 在使用隐式数值扩展时发出警告。
3390 XML 文档注释格式错误 不适用 当 XML 文档注释出现各种形式的格式错误时发出警告。

可以通过使用 /warnon:NNNN<WarnOn>NNNN</WarnOn>(其中 NNNN 是相关的警告编号)来启用这些警告。 (也可以使用语法 <WarnOn>FSNNNN</WarnOn>,例如 <WarnOn>FS3388</WarnOn>。)请注意,如果多次指定 WarnOn 属性,只使用最后一个匹配项。 若要指定多个警告,请使用逗号分隔的字符串提供一次 WarnOn 属性作为其内容:<WarnOn>3388,3559</WarnOn>

Title 描述
F# Interactive 选项 描述 F# 解释器 fsi.exe 支持的命令行选项。
项目属性引用 描述项目的 UI,包括提供生成选项的项目属性页。