編譯器選項

本文說明 F# 編譯器的編譯器命令列選項。 dotnet build 命令會在 F# 專案檔上叫用 F# 編譯器。 F# 專案檔會以 .fsproj 副檔名來表示。

編譯環境也可以透過設定專案屬性來控制。 針對以 .NET Core 為目標的專案,.fsproj 中會使用 "Other flags" 屬性 <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 將指定的資源連結至組件。 資源資訊的格式為 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 適用於r Windows Vista。 此選項僅適用於可執行檔,不適用於 DLL,而且只有在您的應用程式相依於特定作業系統版本可用的特定安全性功能時,才需要使用。 如果使用此選項,且使用者嘗試在較低版本的作業系統上執行您的應用程式,則會失敗並顯示錯誤訊息。
--tailcalls[+|-] 啟用或停用使用 tail 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。 每個警告都會根據其嚴重性來指定層級。 層級 5 會提供比層級 1 更多但嚴重性較低的警告。

此編譯器選項相當於相同名稱的 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# 編譯器可支援數個選擇加入警告:

數字 摘要 層級 描述
21 在執行階段上檢查到遞迴情況 5 在執行階段上的初始化穩健性上檢查到遞迴使用時發出警告。
22 未依序執行繫節 5 因為向前參考而無法依序執行遞迴繫結時發出警告。
52 結構的隱含複本 5 複製不可變的結構時發出警告,以確保原始結構不會由作業變動。
1178 隱含相等/比較 5 當 F# 型別宣告隱含推斷為 NoEqualityNoComparison,但屬性不存在於型別上時,發出警告。
1182 未使用的變數 n/a 針對未使用的變數發出警告。
3180 隱含堆積配置 n/a 當可變動的本機變數隱含配置為參考資料格時 (因為已由關閉作業所擷取),發出警告。
3366 索引標記法 n/a 使用 F# 5 索引標記法 expr.[idx] 時發出警告。
3517 InlineIfLambda 失敗 n/a 當 F# 最佳化工具無法內嵌 InlineIfLambda 值時發出警告,例如,如果提供計算的函式值,而不是明確的 Lambda 時。
3387 op_Implicit 轉換 n/a 在方法引數上使用 .NET 隱含轉換時發出警告。
3388 其他隱含向上轉換 n/a 隱含使用額外的向上轉換時發出警告 (F# 6 中的新增項目)。
3389 隱含擴展 n/a 使用隱含數值擴展時發出警告。
3390 格式錯誤的 XML 文件註解 n/a 當 XML 文件註解以各種方式出現格式錯誤時會發出警告。

您可以使用 /warnon:NNNN<WarnOn>NNNN</WarnOn> 啟用這些警告,其中 NNNN 是相關的警告編號。 (您也可以使用語法 <WarnOn>FSNNNN</WarnOn>,例如 <WarnOn>FS3388</WarnOn>。)請注意,如果指定 WarnOn 屬性多次,則只會使用最後一個出現項目。 若要指定多個警告,請使用逗號分隔字串作為其內容提供 WarnOn 屬性一次:<WarnOn>3388,3559</WarnOn>

標題 描述
F# Interactive 選項 描述 F# 解譯器 (fsi.exe) 支援的命令列選項。
專案屬性參考 描述專案的 UI,包括提供建置選項的專案屬性頁面。