理論鋪陳夠了,讓我們動手建立第一個 DSL 專案,體驗從零到可執行設計器的完整流程。
一、建立專案
- 開啟 Visual Studio,選擇 檔案 > 新增 > 專案
- 在「其他專案類型」展開 擴充性,選擇 Domain-Specific Language Designer
- 點擊確定,進入 DSL 專案精靈

二、選擇專案範本
精靈提供四種預設範本,本質上提供不同的起始模型樣本:
- Class Diagrams:UML 類圖風格,含類別、介面、關聯、組合、屬性、操作
- Component Models:組件模型,子組件組成父組件
- Minimal Language:最精簡的空白語言模型,適合從頭建構
- Task Flow:類 UML 狀態圖模型




三、專案設定步驟
- 選擇 Minimal Language,語言名稱保持預設,下一步
- 檔案副檔名與圖示:輸入
sm 作為副檔名,使用預設圖示。若副檔名已被註冊,精靈會列出衝突清單
- 產品資訊:產品名稱、公司、專案命名空間。這些資訊將內嵌於生成組件中,部署時生效。保持預設即可
- 強式命名簽章:VSX 部署需強命名(註冊至 GAC)。選擇自動建立金鑰
- 確認摘要:檢視所有設定,確認無誤後點擊完成




四、建置與執行
- 精靈自動建構方案結構
- 切換至 方案總管,點擊工具列最右側的 轉換所有範本 按鈕
- 完成後按 F5 偵錯啟動,將開啟 Visual Studio 實驗室環境
- 在實驗環境中新增
.sm 檔案,即可操作剛建立的 DSL 設計器
同樣方式可嘗試其他三種範本,效果如上圖所示。
五、方案結構解析
完整方案包含兩個核心專案(另含測試專案):
| 專案 | 職責 |
| Dsl |
根據 DslDefinition.dsl 產生模型操作邏輯:關聯、序列化、圖形、連接器等 |
| DslPackage |
支撐 DSL 在 VS 整合運行:選單、工具列、模型瀏覽器、VS 擴充點整合 |
關鍵架構細節:Dsl 專案透過 InternalsVisibleTo 將 DslPackage 設為友元組件,使 Package 可直接存取 Dsl 內部成員。兩個專案皆由 DslDefinition.dsl 產生,深入理解其結構是進階開發的基石。
六、T4 範本驅動生成機制
專案中大量 .tt 檔案是 Text Templating Transformation Toolkit (T4) 範本,類似 ASP/Ruby 的解釋式語言,讀取模型產生 C# 程式碼。每個 .tt 檔對應一個生成的 .cs 檔。
- 單一範本轉換:右鍵 .tt 檔選擇 執行自訂工具
- 批次轉換:工具列 轉換所有範本 按鈕
- 底層引擎:
TextTemplatingFileGenerator
七、DslDefinition.dsl 設計介面導覽

核心區域組成:
- 工具列:模型、關聯、圖形元素建立工具
- 模型中繼資料區:領域類別與關聯定義
- 圖形呈現區:透過中間連接線與模型綁定
- DSL Details 視窗:編輯關聯等進階屬性
- 方案資料夾:黃色區域為「轉換所有範本」按鈕;切換至 DSL Explorer 索引標籤

DSL Explorer 列出:模型元素、圖形、連接器、連接建構器、模型瀏覽器/工具箱/序列化設定。絕大多數 DSL 設計工作在此完成。
第一個 DSL 專案已就緒,下一篇將正式進入領域模型建模實戰。