首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# #error 與 #warning 指令實戰:建置時期強制規範與提醒

     編輯:關於C#

指令語法


#error 錯誤訊息文字
#warning 警告訊息文字
  • #error:導致建置失敗,視為編譯錯誤 (CS1029)
  • #warning:產生編譯警告 (CS1030),建置繼續
  • 訊息文字為自由字串,無需引號
  • 常搭配 #if 條件觸發

經典應用場景

1. 互斥建置配置防護


#define DEBUG
#define RELEASE
#define DEMO_VERSION

#if DEMO_VERSION && !DEBUG
#warning 您正在建置 Demo 版本 (非 Debug 模式)
#endif

#if DEBUG && DEMO_VERSION
#error 無法建置 Debug 版 Demo 版本 (邏輯衝突:Demo 應為 Release)
#endif

2. 強制框架版本需求


#if !NET6_0_OR_GREATER
#error 此專案需要 .NET 6.0 或更新版本
#endif

3. 標記未完成/過時功能


#if LEGACY_API
#warning LEGACY_API 將於 v3.0 移除,請遷移至 NewApi
#endif

#if EXPERIMENTAL_FEATURE
#error EXPERIMENTAL_FEATURE 尚未完成,禁止發布建置
#endif

4. 組態驗證


#if !CONNECTION_STRING_DEFINED
#error 專案屬性必須定義 CONNECTION_STRING_DEFINED 條件編譯符號
#endif

與 ConditionalAttribute 比較

最佳實踐

  • 訊息文字具體、可執行:說明衝突原因、建議修正動作
  • 配合 CI/CD:#error 讓錯誤配置在建置階段即失敗,不進入部署
  • 避免濫用:核心邏輯驗證用單元測試,#error 專用於建置配置層級約束
  • 團隊約定:在專案 README 記錄所有條件編譯符號含義與互斥規則

實際建置輸出範例


> dotnet build
  Demo.cs(10,5): warning CS1030: 您正在建置 Demo 版本 (非 Debug 模式)
  Demo.cs(14,5): error CS1029: 無法建置 Debug 版 Demo 版本 (邏輯衝突:Demo 應為 Release)
Build FAILED.
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性#error/#warning[Conditional]
作用層級建置時期 (原始碼層級)建置時期 (方法呼叫層級)
效果阻止/警告建置移除方法呼叫與參數評估
適用範圍任何程式碼區塊僅方法
參數副作用不影響參數運算式完全不執行