aspnet_compiler 將 .aspx/.ascx 編譯為 DLL,部署時不含原始碼,啟動更快、體積更小(200KB → 28KB 實測)Company.Project.Layer.Module,避免百餘類別混淆Init → Load → Control Events → PreRender → Render;動態建立控制項必須在 CreateChildControls 或 Init 階段EnableViewState="false" 針對無需回傳資料的控制項(GridView、Repeater 僅顯示)| 層級 | 處理方式 | 基底類別 |
|---|---|---|
| 資料存取層 | 捕獲具體例外(SqlException),包裝為自訂 DataAccessException 拋出 | ApplicationException |
| 業務邏輯層 | 捕獲 DataAccessException,轉換為 BusinessRuleException 或領域例外 | ApplicationException |
| 表現層 | 統一捕獲 ApplicationException 顯示友善訊息;Exception 記錄日誌並顯示通用錯誤頁 | Exception |
原則:框架例外繼承 System.Exception,應用例外繼承 ApplicationException,便於上層區分攔截。
== vs Equals:參考型別 == 比較參考,Equals 比較值(字串已多載為值比較)string vs ToString():obj.ToString() 可能拋 NullReferenceException,用 Convert.ToString(obj) 或 obj?.ToString()Session.Remove(key) 移除單一,Session.Abandon() 棄用整個 Session[]、MySQL ``、Oracle "",參數化查詢統一用 @param / ?param
public static string OutMessage(string[] args) {
string msg = args.Length > 1 ? args[1] : args[0] switch {
"0" => "操作失敗.", "1" => "操作成功.", _ => "操作結束."
};
var sb = new StringBuilder($"{msg}");
if (args.Length > 2) {
sb.Append($"
2秒後跳轉到{args[2]}");
sb.Append($"");
sb.Append($"
點這裡直接跳轉");
}
return sb.ToString();
}
^([0-9]+)(\.[0-9]+)?([Ee][-+]?[0-9]+)?$
BACKUP LOG [DB] WITH NO_LOG;
DBCC SHRINKDATABASE([DB]);
ALTER DATABASE [DB] SET AUTO_SHRINK ON;
ntsd -c q -p
try/catch/finally 正確釋放資源Web.config / appsettings.json)debug="true"、customErrors mode="Off"