回應檔(Response File,慣用 .rsp 副檔名)是純文字檔,儲存 csc.exe 編譯選項。編譯時以 @檔名.rsp 指定,編譯器會讀取檔案內容作為命令列參數。解決「參數過長、易打錯、難維護」三大痛點。
# MyLib.rsp - 編譯選項回應檔
# 輸出目標與名稱
/t:library
/out:MyLib.dll
# 遞迴包含所有 .cs 檔
/recurse:*.cs
# 產生 XML 文件
/doc:MyLib.xml
# 強名簽署
/keyfile:Keys\MyKey.snk
# 定義條件編譯符號
/define:DEBUG;TRACE
# 警告等級
/warn:4
/nowarn:1591
csc @MyLib.rsp
csc @Common.rsp @Debug.rsp @Sign.rsp
按遇到順序處理,後設定會覆蓋先設定。常見模式:
Common.rsp:共用設定(目標框架、警告等級、輸出路徑)Debug.rsp / Release.rsp:建置配置專用(/define、/optimize)Sign.rsp:簽署相關(/keyfile、/delaysign)csc.exe 同目錄(通常在 %FrameworkDir%)type %FrameworkDir%\csc.rspcsc /noconfig @MyLib.rsp
適用於:需完全控制參考組件、避免隱性相依、跨框架建置等情境。
| 技巧 | 說明 |
|---|---|
| 環境變數展開 | 回應檔支援 %VAR% 語法,如 /lib:%NUGET_PACKAGES% |
| 編譯器自動回應 | VS 專案屬性「建置事件」可呼叫 csc @$(ProjectDir)Custom.rsp |
| Rsp 檔巢狀引用 | 回應檔內可再包含 @Other.rsp(編譯器支援) |
| 編碼 | 儲存為 UTF-8 (含 BOM) 或 ANSI,避免中文路徑亂碼 |
雖 dotnet build 以 MSBuild 為主,但可透過 <CscAdditionalArguments>@Custom.rsp</CscAdditionalArguments> 於 .csproj 注入自訂編譯參數。
Common.rsp,納入版控csc @Common.rsp @Config.rspcsc.rsp 確認隱性參考無衝突回應檔是 C# 命令列建置的「組態即代碼」利器。善用它可消除冗長命令列、統一團隊建置標準、支援多環境配置切換。即使現代專案多用 MSBuild/dotnet CLI,理解 csc.rsp 機制仍有助於排查建置異常與客製化編譯流程。