開始使用網域指定的語言
本主題將說明定義和使用定義域專屬語言 (DSL) 的基本概念。
如果您的 Dsl 的新手,建議您在逐步使用DSL Tools Lab,您可以在中找到這個站台: Visualizaton,並建立模型的 SDK
您可以使用定義域專屬語言做什麼?
定義域專屬語言是個標記,通常是圖形,是設計用來做為某特定用途。 相較之下,與 UML 這些語言是一般用途的程式。 在 DSL,您可以定義模型項目和其關聯性和螢幕上的呈現方式的型的別。
當您已經設計好 DSL 時,您可以提供與 Visual Studio 整合延伸 」 (VSIX) 封裝的一部份。 使用者會使用在 DSL Visual Studio:
標記只是一部分的 DSL。 加上標記法,VSIX 套件包括使用者可以套用以幫助他們編輯及產生資料從其模組的工具。
其中一項主要的應用程式的 Dsl 是產生的程式碼、 組態檔和其他成品。 特別是在大型專案 」 和 「 產品線,其中您將建立數個的玩法的產品,從 Dsl 中產生多個變數可提供大幅增加可靠性和需求的變更非常快速的回應中。
本概觀的其餘部分會介紹建立和使用中的網域特定語言的基本作業的逐步解說Visual Studio。
必要條件
若要定義 DSL,您必須安裝下列元件:
Visual Studio |
|
Visual Studio SDK |
|
Visual Studio 的視覺化和模型 SDK |
完整.嗎?LinkID = 186128 |
建立 DSL 方案
若要建立新的網域特定語言,您建立新的Visual Studio解決方案使用網域特定語言的專案範本。
若要建立 DSL 方案
在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。
在專案類型,展開 其他專案類型 節點,然後按一下 [ 擴充性。
按一下 [ 定義域專屬語言設計工具。
在名稱 ] 方塊中,輸入 FamilyTree。 按一下 [確定]。
定義域專屬語言精靈已開啟,且會顯示一份範本 DSL 的解決方案。
按一下每個範本,請參閱說明,
範本可在起始點。 每一個都提供可完整運作的 DSL,您可以視需要編輯。 一般來說,您應選擇最接近您要建立範本。
這個逐步解說中,選擇降到最低的語言範本。
您的 DSL 在適當的精靈頁面中輸入檔案的副檔名。 這是包含您的 DSL 的執行個體的檔案將使用的副檔名。
請選擇不在您的電腦,或您想要用來安裝 DSL 的任何電腦中的任何應用程式相關聯的副檔名。 例如, docx和htm是令人無法接受的檔案名稱副檔名。
精靈會警告您如果正在使用您所輸入的副檔名為 DSL。 請考慮使用不同的副檔名。 您也可以重設 Visual Studio 的 SDK 實驗來清除舊實驗性的設計工具的執行個體。 按一下 [ 開始,按一下 所有程式, Visual Studio 2010 SDK Microsoft, 工具,然後再 重設 Microsoft Visual Studio 2010年實驗的執行個體。
檢查其他頁面,然後按一下 [ 完成。
隨即會產生包含兩個專案的方案。 它們會命名 Dsl 及 DslPackage。 圖表檔,也就是開啟具名的 DslDefinition.dsl。
注意事項 DslDefinition.dsl 可產生大多數的程式碼,您可以看到在兩個專案中的資料夾中。基於這個理由,大多數到您的 DSL 修改此檔案中。
使用者介面現在類似下圖。
本解決方案定義的網域特定語言。 如需詳細資訊,請參閱 Domain-Specific Language Tools 使用者介面概觀。
DSL 方案中重要的部份
請注意下列各方面,新的方案。
Dsl\DslDefinition.dsl 這是您看到當您建立 DSL 方案檔。 在方案中幾乎所有的程式碼會產生從這個檔案中,且大多數的 DSL 定義所做的變更會對這裡進行。 如需詳細資訊,請參閱使用使用 DSL 定義圖表。
Dsl 專案這個專案包含定義網域特定語言的程式碼。
DslPackage 專案這個專案包含允許開啟並編輯在 DSL 的執行個體的程式碼Visual Studio。
DSL 的執行
當您已建立它時,您可以執行 DSL 方案。 稍後,您可以修改 DSL 定義逐漸,每次變更後再執行方案。
嘗試使用 DSL
按一下 轉換所有的範本在方案總管] 工具列中的色彩。 這會重新產生大多數的來源程式碼,從 DslDefinition.dsl。
注意事項 每當您更改 DslDefinition.dsl 時,您必須按一下轉換所有的範本重新建置方案之前。您可以自動執行此步驟。如需詳細資訊,請參閱 如何將轉換所有範本的作業自動化。
按下 F5,或在偵錯 ] 功能表中,按一下 啟動偵錯。
DSL 組建和已安裝在實驗性的執行個體的Visual Studio。
Visual Studio 的實驗執行個體隨即啟動。 實驗性的執行個體採用它的設定,從個別的子樹狀目錄的系統登錄中,其中Visual Studio延伸模組已註冊要進行偵錯之用。 正常的執行個體的Visual Studio不能那里註冊的擴充功能的存取。
實驗性的執行個體中Visual Studio,開啟模型檔名為測試從方案總管] 中。
-或-
偵錯的專案上按一下滑鼠右鍵,指到新增,然後按一下 [ 項目。 在加入項目對話方塊中,選取檔案,則您的 DSL 的型別。
模型檔案開啟為空白的圖表。
工具箱] 中開啟,並顯示 [圖表類型適合的工具。
若要在圖表上建立圖形和連接器使用的工具。
若要建立圖形,請從拖曳到圖表中的範例中的圖形] 工具拖曳。
若要連接兩個圖形,請按一下範例連接器工具],按一下第一個圖案中,,然後按一下第二個圖形。
按一下圖形,以變更它們的標籤。
您實驗Visual Studio會類似下列範例:
模型的內容
DSL 的執行個體檔案的內容就會呼叫模型。 模型都會包含模型項目 和 連結項目之間。 DSL 定義指定的模型項目類型,並連結可以存在模型中。 比方說,在 DSL,從最小的語言範本建立,沒有一種類型的模型項目,以及一種類型的連結。
DSL 定義可以指定模型就會出現在圖表上。 您可以選擇從多個樣式的圖案及接點。 您可以指定某些圖形會出現在其他圖形。
您可以檢視模型以樹狀結構中總管檢視您正在編輯的模型。 當您新增圖形到圖表中,模型項目也會出現在 [檔案總管] 中。 即使沒有任何圖表,則可以使用 [檔案總管]。
如果您看不見 [總管] 中的偵錯的執行個體Visual Studio、 起檢視功能表指向 其他視窗,然後按一下 < 您的語言 >總管。
API,您的 DSL 的
您的 DSL 會產生一個 API,讓您可以讀取並更新該 DSL 的執行個體的模型。 API 的應用之一,就是從模型產生文字檔。 如需詳細資訊,請參閱 使用 T4 文字範本在設計階段產生程式碼。
在偵錯方案中,請以".tt"的副檔名開啟範本檔案。 這些範例會示範如何從模型中,產生的文字,並讓您測試您的 DSL 的 API。 其中一個範例以Visual Basic、 其他在Visual C#。
在每個範本檔案會是它所產生的檔案。 展開 [方案總管] 中的範本檔案並開啟所產生的檔案。
範本檔內含簡短的區段會列出模型中的所有元素的程式碼。
產生的檔案包含結果。
當您變更模型檔案時,您會看到對應的變更,在產生的檔案之後重新產生檔案。
若要變更的模型檔案之後,重新產生文字檔案
實驗性的執行個體中Visual Studio,儲存模型檔案。
請確定每個.tt 檔案中的檔案名稱參數是指您用來實驗的模型檔案。 將.tt 檔案儲存。
按一下 轉換所有的範本 的工具列中的 方案總管] 中。
-或-
以滑鼠右鍵按一下您想要重新產生,然後按一下 [範本執行自訂工具。
您可以將任何數目的文字範本檔案加入專案。 每個範本會產生一個結果檔案。
注意事項 |
---|
當您變更 DSL 定義時,範例文字範本程式碼將無法作用,除非您在更新。 |
如需詳細資訊,請參閱 從網域指定的語言產生程式碼和 撰寫程式碼來自訂網域指定的語言。
自訂 DSL
當您想要修改 DSL 定義時,請關閉實驗性的執行個體,並更新主定義Visual Studio執行個體。
注意事項 |
---|
您已經修改過的 DSL 定義之後,您可能會遺失您使用較早的版本來建立測試模型中的資訊。比方說,偵錯方案中包含的名為 Sample,其中包含某些圖案及連接線的檔案。您開始開發您的 DSL 定義之後,將不會顯示,而且它們將會遺失您儲存檔案時。 |
您可以讓您的 DSL 各種不同的副檔名。 下列範例會提供您各種可能性的印象。
在每個變更之後,儲存 DSL 定義中,按一下 轉換所有的範本 在 方案總管] 中,然後按下 F5 嘗試使用已變更的 DSL。
重新命名的型別和工具
重新命名現有的網域類別和關聯性。 例如,從最小的語言範本建立而 Dsl 定義開始,您就可以執行下列的重新命名作業,讓代表家族樹 DSL。
若要重新命名網域類別、 關聯和工具
在 DslDefinition 圖表中,重新命名 ExampleModel 到 FamilyTreeModel,ExampleElement 人,父代,和子系的來源的目標。 您可以按一下 [變更它的每個標籤。
重新命名的項目] 和 [連接器工具。
在 [方案總管] 中按一下 [索引標籤中開啟 DSL 總管] 視窗中的色彩。 如果您看不見它,在檢視 功能表指向 [ 其他視窗 ,然後按一下 [ DSL 總管。 DSL 總管在 DSL 定義圖表是使用中視窗時,才會顯示。
開啟 [屬性] 視窗,並將它定位,讓您可以同時看到 DSL 檔案總管] 及 [內容。
在 DSL 總管] 中,展開編輯器, 工具箱] 索引標籤, < 您的 DSL >,然後再 工具。
按一下 [ExampleElement]。 這是用來建立項目的工具箱項目。
在 [屬性] 視窗中,變更名稱人的屬性。
請注意, 標題屬性也會變更。
在相同的方式,變更 ExampleConnector 工具的名稱為 ParentLink。 改變標題屬性,因此它並不是一份 Name 屬性。 例如,輸入父系連結。
重建 DSL。
將儲存的 DSL 定義檔。
按一下 轉換所有的範本在 [方案總管] 的工具列
按 F5。 等到實驗性的執行個體的Visual Studio就會出現。
在偵錯方案中,在實驗性的執行個體的Visual Studio,開啟 [測試模型檔。 從工具箱拖曳到其上的項目。 請注意工具標號,而且在 DSL 總管] 中的型別名稱已經變更。
儲存模型檔案。
開啟.tt 檔案,並以新名稱取代舊的型別和屬性名稱的項目。
請確定在.tt 檔案中指定的檔名指定測試模型。
將.tt 檔案儲存。 開啟.tt 檔案中執行程式碼的結果,請參閱產生的檔案。 請確認正確。
將網域內容加入至類別
將屬性加入至網域類別,例如要代表的出生年份生與死的人員。
若要讓新的屬性顯示在圖表上,您必須新增裝飾會顯示該模型元素的圖形。 此外,您也必須將屬性對應到裝飾。
若要加入屬性,以及顯示圖像
加入屬性。
在 DSL 定義圖表中,以滑鼠右鍵按一下 Person 網域類別,並指向新增,然後按一下 [ 網域屬性。
輸入新的屬性名稱,例如款刺青,死亡的清單。 按下 Enter 在每一項之後。
將會在圖形中顯示的屬性的裝飾。
請依照下列人員的網域類別從延伸到圖表的另一端的灰線。 這是圖表項目對應。 它會將網域類別連結至圖形的類別。
這個圖形類別上按一下滑鼠右鍵,指到新增,然後按一下 [ 文字裝飾。
加入兩個裝飾名稱,例如 BirthDecorator 和 DeathDecorator。
選取每個新的裝飾,然後在 [屬性] 視窗中,設定位置欄位。 這會決定網域的屬性值顯示在圖形上的位置。 例如,設定 InnerBottomLeft 和 InnerBottomRight。
對應屬性裝飾。
開啟 DSL 細節] 視窗中的色彩。 它通常是以索引標籤旁邊的 [輸出] 視窗。 如果您看不見它,在檢視 功能表上指向 其他視窗,然後按一下 DSL 詳細資料。
在 DSL 定義圖表中,按一下 [條線連接 shape 類別的人的網域類別]。
在 DSL 詳細資料、 起 裝飾對應索引標籤上,按一下 [核取方塊,在未對應的裝飾上。 在顯示屬性,選取您要它對應的 [網域] 屬性。 舉例來講,對應到誕生的 BirthDecorator。
儲存 DSL、 按一下 [轉換所有的範本,然後按 F5。
在範例模型圖中,請確認您可以現在,按一下您所選擇的位置並在其中輸入值。 此外,當您選取的人員圖形時,[屬性] 視窗就會顯示新的屬性款刺青,死亡。
在.tt 檔案中,您可以新增會取得屬性的每個人的程式碼。
定義新類別
您可以加入網域類別和關聯性的模型。 例如,您可以建立新的類別來代表城鎮,並使用新的關聯性,來代表生活將會一個人變建造一座城鎮中。
若要使不同的型別不同模型圖表上,您可以在不同類型的圖形,或用不同的幾何與色彩對應網域類別。
若要加入,並顯示新的網域類別
新增網域類別,並使其模型的根項目的子系。
在 DSL 定義圖表中,按一下 [ 內嵌關聯性工具,按一下 [根類別 FamilyTreeModel,,然後按一下圖表的空白部分。
新的網域類別出現,請連接至內嵌的關聯性 FamilyTreeModel。
設定它的名稱,例如城鎮。
注意事項 每個網域類別除了根目錄之外的模型必須是至少一個內嵌的關聯性,目標,或必須繼承自類別做為內嵌的目標。基於這個理由,它會經常方便使用內嵌的關聯性的工具來建立網域類別項目。
將屬性新增到網域的新類別,例如名稱。
新增參考之間的關係人,並將城鎮。
按一下 [ 參考關係工具,按一下收件者,然後按一下城鎮。
注意事項 參考的關聯性代表模型樹狀目錄中的某一部份的交互參照到另一個。
新增圖形來代表模型圖表上的城鎮。
拖曳幾何圖案從工具箱] 中加入圖表及重新命名,例如 TownShape。
在 [屬性] 視窗中,會將新圖案,例如填滿色彩] 和 [幾何的 [外觀] 欄位。
新增要顯示的城鎮名稱的裝飾,其重新命名為 NameDecorator。 設定其 [位置] 屬性。
城鎮網域類別對應至 TownShape。
按一下 圖表項目對應工具,然後按一下城鎮網域類別],然後按一下 [TownShape shape 類別。
在裝飾對應 索引標籤上的 DSL 詳細資料 選取 [視窗大小與對應的連接器,請 NameDecorator,並設定 顯示屬性名稱。
建立連接器,以顯示個人和城鎮之間的關係。
連接器從工具箱拖曳至圖表。 將它重新命名並設定其外觀屬性。
使用圖表項目對應人和城鎮之間的關係來連結新的連接器] 工具。
建立項目] 工具,讓新市鎮。
在 DSL 總管,展開 編輯器 再 工具箱] 索引標籤。
以滑鼠右鍵按一下 < 您的 DSL > ,然後按一下 [ 加入新項目工具。
設定名稱 屬性的新工具,並設定其 類別的城鎮的屬性。
設定工具箱圖示屬性。 Click [...] ,並在 的檔案名稱欄位中,選取圖示檔。
建立連接器] 工具,讓城鎮和人員之間的連結。
以滑鼠右鍵按一下 < 您的 DSL > ,然後按一下 [ 加入新的連接器工具。
設定新工具的 [名稱] 屬性。
在 ConnectionBuilder 屬性中,選取 [建立幫手],其中包含人員城鎮關聯的名稱。
設定工具箱圖示。
儲存 DSL 定義,請按一下 [ 轉換所有的範本,然後按下 F5。
實驗性的執行個體中Visual Studio,開啟 [測試模型檔。 使用新的工具來建立城鎮和城鎮與人之間的連結。 請注意您只能建立項目的正確的型別間的連結。
建立列出的每個人所存在的城鎮的程式碼。 文字範本是您可以在其中執行這類程式碼的地方。 比方說,您可以修改現有的 Sample.tt 檔案,偵錯方案中,使其包含下列程式碼中:
<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" debug="true" #> <#@ output extension=".txt" #> <#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Sample.ftree'" #> <# foreach (Person person in this.FamilyTreeModel.People) { #> <#= person.Name #><#if (person.Town != null) {#> of <#= person.Town.Name #> <#}#> <# foreach (Person child in person.Children) { #> <#= child.Name #> <# } } #>
當您儲存 *.tt 檔時,就會建立附帶介紹人和他們 residences 的檔案。 如需詳細資訊,請參閱 從網域指定的語言產生程式碼。
驗證和命令
您也可以開發這個 DSL 進一步將驗證條件約束加入。 這些條件約束是方法,您可以定義,請確定模型] 是在正確的狀態。 例如,您可定義的條件約束,以確定孩子的出生日期會晚於其父代的。 如果 DSL 使用者試圖向其中儲存的模型,會中斷任何條件約束,驗證功能,就會顯示警告。 如需詳細資訊,請參閱 網域指定的語言中的驗證。
您也可以定義使用者可以叫用的功能表命令。 命令可以修改模型。 也可以互動而有些款式中Visual Studio與外部資源。 如需詳細資訊,請參閱 HOW TO:使用網域指定的語言修改標準功能表命令。
部署 DSL
若要允許其他使用者使用網域特定語言,您將散發Visual Studio的副檔名 (VSIX) 檔案。 在建置 DSL 方案時,會建立此項目。
方案的 [bin] 資料夾中,找出.vsix 檔案。 請將它複製到您要安裝的電腦。 在安裝程式,請連按兩下 VSIX 檔案。 DSL 適用於所有的執行個體的Visual Studio在該電腦上。
您可以使用相同的程序,讓您不需要使用的實驗性的執行個體,您自己的電腦上安裝 DSL Visual Studio。
如需詳細資訊,請參閱 部署網域指定的語言方案。
正在移除舊的實驗 Dsl
如果您已建立實驗性質的 Dsl 不再需要,您可以先將它們從電腦移除,藉由重設Visual Studio實驗性的執行個體。
這樣會從您的電腦移除所有的實驗 Dsl 與其他實驗Visual Studio副檔名。 這些都是在偵錯模式執行的擴充功能。
此程序不會移除 Dsl 或其他Visual Studio完整安裝藉由執行 VSIX 檔案的副檔名。
若要重設 Visual Studio 實驗性的執行個體
按一下 [ 開始,按一下 所有程式, Visual Studio 2010 SDK Microsoft, 工具,然後再 重設 Microsoft Visual Studio 2010年實驗的執行個體。
重建任何實驗性質的 Dsl 或其他實驗Visual Studio要使用的副檔名。
請參閱
概念
其他資源
Visualizaton 和建立模型的 SDK