共用方式為


使用 Visual Studio Modelbus 整合模型

Visual StudioModelBus 提供方法,以建立模型間來回的其他工具的連結到模型。 比方說,就可以連線定義域專屬語言 (DSL) 模型以及 UML 模型。 您可以建立一組整合的 Dsl。

ModelBus 可讓您建立特別的參考到模型或模型內的特定項目。 這個參考可以儲存超出該模型,比方說,在另一個模型中的項目。 當您在較新的情況下,一種工具想要取得項目的存取權時,將載入適當的模型模型匯流排基礎結構,並將其傳回的項目。 如果您想要的選項,您可以向使用者顯示的模型。 如果無法存取檔案,先前的位置中,ModelBus 會要求使用者尋找它。 如果使用者發現的檔案,ModelBus 會修復該檔案的所有參考。

注意事項注意事項

在 [目前的Visual Studio ModelBus,連結模型的實作必須在同一個項目Visual Studio的解決方案。

如需詳細資訊和範例程式碼,請參閱:

提供存取的 DSL

您可以建立模型或其元素的 ModelBus 參照之前,您就必須定義 ModelBusAdapter 的 DSL。 若要這麼做最簡單的方法是使用Visual Studio模型匯流排副檔名,將命令加入 DSL 設計工具。

若要公開 (expose) 至模型匯流排的 DSL 定義

  1. 下載並安裝 Visual Studio 模型匯流排擴充,除非您已經安裝它。 如需詳細資訊,請參閱視覺化和模型的 SDK。

  2. 開啟 DSL 的定義檔。 在設計介面上按一下滑鼠右鍵,然後按一下 [ 啟用 Modelbus

  3. 在對話方塊中,選擇我想要公開 (expose) 這個 DSL 而將 ModelBus。 如果您想要公開 (expose) 其模型和使用其他 Dsl 參考這個 DSL 的情況下,可以選擇這兩個選項。

  4. 按一下 [確定]。 "ModelBusAdapter"的新專案加入至 DSL 方案。

  5. 如果您想要從某文字範本存取 DSL 時,您必須修改 AdapterManager.tt,新的專案中。 如果您想要存取的 DSL 與其他的程式碼,例如命令和事件處理常式,略過此步驟。 如需詳細資訊,請參閱 使用文字範本中的 Visual Studio ModelBus

    1. 變更基底類別的 AdapterManagerBase 到VsTextTemplatingModelingAdapterManager

    2. 檔案結尾,靠近插入這個額外的屬性類別 AdapterManager 的前面:

      [Microsoft.VisualStudio.Modeling.Integration.HostSpecific(HostName)]

    3. 在參考的 ModelBusAdapter 專案中,加入Microsoft.VisualStudio.TextTemplating.Modeling.11.0

    如果您想要存取 DSL 文字範本和與其他程式碼,您需要兩張介面卡,分別修改和未經修改。

  6. 按一下 [ 轉換所有範本

  7. 重建方案。

現在您就可以為 ModelBus 開啟本 DSL 的執行個體。

資料夾ModelBusAdapters\bin\*包含所建置的組件Dsl專案以及ModelBusAdapters專案。 若要從其他 DSL 參考這個 DSL,您應該在匯入這些組件。

Ff519531.collapse_all(zh-tw,VS.110).gif並確認其項目可以被參考

Visual StudioModelBus 介面卡使用項目的 guid 來識別它,預設情況下。 因此,這些識別項必須保存在模型檔案。

若要確保該項目被永久性的識別碼

  1. 開啟 [DslDefinition.dsl]。

  2. 在 DSL 總管] 中,展開 Xml 序列化行為,然後 類別資料

  3. 您要建立模型匯流排的每個類別的參考:

    按一下 [類別] 節點,並在 [屬性] 視窗中,確認序列化識別碼設定為 true。

或者,如果您想要使用的項目名稱來識別項目,而不是 guid,您可以覆寫產生的配接器的組件。 覆寫下列方法在配接器類別:

  • 覆寫GetElementId傳回您想要使用的識別項。 建立參考時,會呼叫這個方法。

  • 覆寫ResolveElementReference找不到正確的項目從模型匯流排參考。

從其他 DSL 存取 DSL

您可以將模型匯流排參考儲存在網域中的屬性 DSL,而且您可以撰寫自訂程式碼,使用它們。 您也可以讓使用者挑選模型檔案,並在其中的項目,以建立模型匯流排參考。

若要啟用 DSL 而將使用其他 DSL 參考,您應該先讓它消費者的模型匯流排參考。

若要啟用 DSL 而將使用公開的 DSL 的參考

  1. 在 DSL 定義圖表中,以滑鼠右鍵按一下圖表的主要部分,然後按一下啟用 Modelbus

  2. 在對話方塊中,選取 [ 我要啟用這種模型使用模型匯流排參考

  3. 將在使用 DSL 的 Dsl 專案中,下列組件參考加入至專案。 在 「 公開 」 DSL ModelBusAdapter\bin\ * 目錄中,您會發現這些組件 (.dll 檔案)。

    • 公開的 DSL 組件例如Fabrikam.FamilyTree.Dsl.dll

    • 公開的模型的匯流排介面卡組例如Fabrikam.FamilyTree.ModelBusAdapter.dll

  4. 加入下列程式碼。NET 使用的 DSL 專案的專案參考的組件。

    1. Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0.dll

    2. Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell.11.0.dll

在 [網域] 屬性中儲存模型匯流排參考

  1. 在使用 DSL DSL 定義中,將屬性新增到網域的網域類別,並設定它的名稱。

  2. 在 [屬性] 視窗中,與網域選取屬性,將型別到ModelBusReference。

在這個階段中,程式碼可以設定屬性值,但是唯讀屬性] 視窗中。

您可以讓使用者能夠設定具有特殊的 ModelBus 參考編輯器的屬性。 有兩個版本,這個編輯器或選擇器: 一個可讓使用者選擇模型檔案中,以及其他可讓使用者選擇模型檔案,並在模型中的項目。

若要允許使用者在 [網域] 屬性設定模型匯流排參考

  1. 以滑鼠右鍵按一下 [網域] 屬性,然後按一下 特定屬性的編輯 ModelBusReference。 對話方塊隨即開啟。 這是模型匯流排選擇器。

  2. 選取適當的的 ModelBusReference: 一種模型或模型內的項目。

  3. 在 [檔案] 對話方塊的篩選條件字串,請輸入字串,例如Family Tree files |*.ftree。 Subsitute 您的公開 DSL 的副檔名。

  4. 如果您選擇要參考到模型中的項目,您可以新增型別的清單,使用者可以選取,例如 Company.FamilyTree.Person。

  5. 按一下 [確定],然後按一下 轉換所有的範本在 [方案總管] 工具列中。

    警告

    如果您尚未選取有效的模型或實體,[確定] 按鈕必須沒有作用,即使它可能會顯示已啟用。

  6. 如果您指定的目標型別,例如 Company.FamilyTree.Person 清單時,您必須新增組件參考至您的 DSL 專案參考該 DLL 的目標 DSL,例如 Company.FamilyTree.Dsl.dll

若要測試模型匯流排參考

  1. 建立公開及取用的 Dsl。

  2. 執行其中一個 Dsl 實驗性質的模式,請按 F5 或 CTRL + F5。

  3. 在 [偵錯專案中,實驗性質的執行個體的Visual Studio,新增每一個 DSL 的執行個體的檔案。

    注意事項注意事項

    Visual StudioModelBus 可以只參考解析為模型,是在同一個項目Visual Studio的解決方案。比方說,您無法建立模型檔的參考,您的檔案系統的其他部分。

  4. 建立公開的 DSL 執行個體中的某些項目和連結,並將它儲存。

  5. 開啟使用 DSL 的執行個體,並選取模型匯流排參考屬性的模型項目。

  6. 在 [屬性] 視窗中,連按兩下的模型匯流排參考] 屬性。 選擇器] 對話方塊隨即開啟。

  7. 按一下 [ 瀏覽 ,然後選取 [公開 DSL 的執行個體。

    選擇器也可以選擇一個項目在模型中,如果您所指定模型匯流排參考的項目特定種類。

建立程式碼中的參考

當您想要儲存參考的模型或模型內的項目時,建立ModelBusReference。 有兩種類型的ModelBusReference: 建立參考和項目參考的模型。

若要建立模型的參考,您需要的 DSL 模型是執行個體,且檔名的 AdapterManager 或Visual Studio模型的專案項目。

若要建立項目參考,您需要的配接器模型檔案及您想要參照的項目。

注意事項注意事項

與Visual Studio ModelBus,您可以在同一個建立之項目的參考Visual Studio的解決方案。

Ff519531.collapse_all(zh-tw,VS.110).gif匯入公開的 DSL 組件

使用的專案中加入專案參考 DSL 及 ModelBusAdapter 的組件公開的 DSL。

例如,假設您想要將 ModelBus 的參考儲存在 MusicLibrary DSL 的項目。 ModelBus 參考會參考 FamilyTree DSL 的項目。 在Dsl MusicLibrary 方案,在 [參考] 節點中的專案中加入下列組件參考:

  • Fabrikam.FamilyTree.Dsl.dll-公開的 DSL。

  • Fabrikam.FamilyTree.ModelBusAdapters.dll-ModelBus 介面卡的 「 公開 」 DSL。

  • Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0

  • Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell.11.0

這些組件位於ModelBusAdapters的 「 公開 」 DSL 的專案、 在bin\*。

在您將在其中建立參考程式碼檔,您通常必須匯入這些命名空間:

// The namespace of the DSL you want to reference:
using Fabrikam.FamilyTree;  // Exposed DSL
using Fabrikam.FamilyTree.ModelBusAdapters;
using Microsoft.VisualStudio.Modeling.Integration;
using System.Linq;
...

Ff519531.collapse_all(zh-tw,VS.110).gif若要建立模型的參考

若要建立模型的參考,您存取 AdapterManager 的 「 公開 」 DSL,並用它來建立模型的參考。 您可以指定任何檔案的路徑,或EnvDTE.ProjectItem。

從 AdapterManager 中,您可以取得介面卡,它提供了存取模型中的個別項目。

注意事項注意事項

完成後使用它,您必須處置配接器。若要這麼做最方便的方法是使用using陳述式。下列範例將說明這點。

// The file path of a model instance of the FamilyTree DSL:
string targetModelFile = "TudorFamilyTree.ftree";
// Get the ModelBus service:
IModelBus modelBus = 
    this.Store.GetService(typeof(SModelBus)) as IModelBus;
// Get an adapterManager for the target DSL:
FamilyTreeAdapterManager manager = 
    (modelbus.GetAdapterManager(FamilyTreeAdapter.AdapterId) 
     as FamilyTreeAdapterManager;
// or: (modelBus.FindAdapterManagers(targetModelFile).First())
// or could provide an EnvDTE.ProjectItem

// Create a reference to the target model:
// NOTE: the target model must be a file in this project.
ModelBusReference modelReference =
     manager.CreateReference(targetModelFile);
// or can use an EnvDTE.ProjectItem instead of the filename

// Get the root element of this model:
using (FamilyTreeAdapter adapter = 
     modelBus.CreateAdapter(modelReference) as FamilyTreeAdapter)
{
  FamilyTree modelRoot = adapter.ModelRoot;
  // Access elements under the root in the usual way:
  foreach (Person p in modelRoot.Persons) {...}
  // You can create adapters for individual elements:
  ModelBusReference elementReference =
     adapter.GetElementReference(person);
  ...
} // Dispose adapter

如果您想要能夠使用modelReference之後,您可將其儲存在網域屬性具有外部型別的ModelBusReference:

using Transaction t = this.Store.TransactionManager
    .BeginTransaction("keep reference"))
{
  artist.FamilyTreeReference = modelReference;
  t.Commit();
}

若要允許使用者編輯網域中的這個屬性,請使用ModelReferenceEditor中的編輯屬性參數。 如需詳細資訊,請參閱允許使用者編輯參考。

Ff519531.collapse_all(zh-tw,VS.110).gif若要建立項目的參考

模型建立的介面卡可用來建立及解析參考。

// person is an element in the FamilyTree model:
ModelBusReference personReference = 
  adapter.GetElementReference(person);

如果您想要能夠使用elementReference之後,您可將其儲存在網域屬性具有外部型別的ModelBusReference。 若要允許使用者加以編輯,請使用ModelElementReferenceEditor中的編輯屬性參數。 如需詳細資訊,請參閱允許使用者編輯參考。

Ff519531.collapse_all(zh-tw,VS.110).gif在解析參考

如果您有ModelBusReference (MBR) 您可以在模型或取得它所參考的模型項目。 如果項目呈現在 [圖表] 或 [其他檢視,您可以開啟 [檢視],並選取項目。

您可以建立配接器從 MBR。 從介面卡,您可以取得模型的根。 您也可以解決在模型中的特定項目,請參閱的 Mbr。

using Microsoft.VisualStudio.Modeling.Integration; ...
ModelBusReference elementReference = ...;

// Get the ModelBus service:
IModelBus modelBus = 
    this.Store.GetService(typeof(SModelBus)) as IModelBus;
// Use a model reference or an element reference
// to obtain an adapter for the target model:
using (FamilyTreeAdapter adapter = 
   modelBus.CreateAdapter(elementReference) as FamilyTreeAdapter)
   // or CreateAdapter(modelReference)
{
  // Get the root of the model:
  FamilyTree tree = adapter.ModelRoot;

  // Get a model element:
  MyDomainClass mel =
    adapter.ResolveElementReference<MyDomainClass>(elementReference);
  if (mel != null) {...}

  // Get the diagram or other view, if there is one:
  ModelBusView view = adapter.GetDefaultView();
  if (view != null) 
  {
   view.Open();
   // Display the diagram:
   view.Show(); 
   // Attempt to select the shape that presents the element:
   view.SetSelection(elementReference);
  }
} // Dispose the adapter.

如果要解決 ModelBus 文字範本中的參考

  1. 您想要存取的 DSL 必須存取設定的文字範本是 ModelBus 介面卡。 如需詳細資訊,請參閱 To provide access to a DSL。

  2. 一般而言,您將要存取儲存於來源 DSL 的使用模型匯流排參考 (MBR) 的 DSL 的目標。 因此您的範本會包含來源 DSL、 再加上程式碼指示詞,以解決 MBR。 如需文字範本的詳細資訊,請參閱從網域指定的語言產生程式碼

    <#@ template debug="true" hostspecific="true" 
    inherits="Microsoft.VisualStudio.TextTemplating.Modeling.ModelBusEnabledTextTransformation" #> 
    <#@ SourceDsl processor="SourceDslDirectiveProcessor" requires="fileName='Sample.source'" #>
    <#@ output extension=".txt" #>
    <#@ assembly name = "Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0" #>
    <#@ assembly name = "System.Core" #>
    <#@ assembly name = "Company.CompartmentDragDrop.Dsl.dll" #>
    <#@ assembly name = "Company.CompartmentDragDrop.ModelBusAdapter.dll" #>
    <#@ import namespace="Microsoft.VisualStudio.Modeling.Integration" #>
    <#@ import namespace="System.Linq" #>
    <#@ import namespace="Company.CompartmentDragDrop" #>
    <#@ import namespace="Company.CompartmentDragDrop.ModelBusAdapters" #>
    <# // Get source root from directive processor:
      ExampleModel source = this.ExampleModel; 
      // This DSL has a MBR in its root:
    using (ModelBusAdapter adapter = this.ModelBus.CreateAdapter(source.ModelReference) as ModelBusAdapter) 
      {
      ModelBusAdapterManager manager = this.ModelBus.FindAdapterManagers(this.Host.ResolvePath("Sample.compDD1")).FirstOrDefault();
      ModelBusReference modelReference =
        manager.CreateReference(this.Host.ResolvePath("Sample.compDD1"));
    
      // Get the root element of this model:
      using (CompartmentDragDropAdapter adapter = 
         this.ModelBus.CreateAdapter(modelReference) as CompartmentDragDropAdapter)
      {
        ModelRoot root = adapter.ModelRoot;
    #>
    [[<#= root.Name #>]]
    <#
      }
    #>
    

如需詳細資訊和逐步解說中,請參閱使用文字範本中的 Visual Studio ModelBus

序列化的 ModelBusReference

如果您想要儲存ModelBusReference (MBR) 在表單中的字串,您可以將它序列化:

string serialized = modelBus.SerializeReference(elementReference);
// Store it anywhere, then get it back again:
ModelBusReference elementReferenceRestored =
    modelBus.DeserializeReference(serialized, null);

如此一來會序列化 MBR 與內容無關。 如果您正在使用簡單的檔案架構模型匯流排介面卡,「 MBR 」 包含絕對檔案路徑。 這便足以表達例項的模型檔將不會移動。 不過,模型檔通常還會在項目Visual Studio專案。 您的使用者會預期要能夠移動整個專案的檔案系統的不同部分。 將也會希望能夠保留原始檔控制之下的專案,並在不同的電腦上開啟。 因此,路徑名稱應序列化相對於專案檔案所在的位置。

Ff519531.collapse_all(zh-tw,VS.110).gif序列化指定的檔案路徑的相對

A ModelBusReference包含ReferenceContext,也就是的字典,您可以在其中儲存資訊,例如檔案路徑,相對它應該序列化。

要序列化相對於路徑:

elementReference.ReferenceContext.Add(
   ModelBusReferencePropertySerializer.FilePathSaveContextKey, 
   currentProjectFilePath);
string serialized = modelBus.SerializeReference(elementReference);

若要擷取字串中的參考:

ReferenceContext context = new ReferenceContext();
context.Add(ModelBusReferencePropertySerializer.FilePathLoadContextKey,
    currentProjectFilePath);
ModelBusReference elementReferenceRestored =
    modelBus.DeserializeReference(serialized, context);

Ff519531.collapse_all(zh-tw,VS.110).gif其他介面卡所建立的 ModelBusReferences

下列資訊是很有用,如果您想要建立您自己的配接器。

A ModelBusReference (MBR) 是由兩個部分所組成: MBR 標頭,模型匯流排還原序列化時,而且由特定的配接器管理員 」 處理配接器特定。 這可以讓您提供您自己的介面卡的序列化格式。 比方說,您便可以同時參考的資料庫,而不是一個檔案,或者您可以將額外的資訊儲存在配接器的參考。 您自己的配接器可以放置在所需的詳細資訊ReferenceContext。

當您還原序列化有 MBR 時,則您必須提供的 ReferenceContext,然後儲存在 MBR 物件。 當您序列化有 MBR 時,預存的 ReferenceContext 使用配接器,協助產生的字串。 已還原序列化的字串不包含在 ReferenceContext 中的所有資訊。 比方說,在簡單的 「 檔案為基礎介面卡 」,ReferenceContext 會包含根目錄的檔案路徑,而不會儲存在已序列化的 MBR 字串。

MBR 會還原序列化,以兩個階段:

  • ModelBusReferencePropertySerializer是標準的序列化程式處理 MBR 標頭包含進來。 它會使用標準的 DSL SerializationContext屬性包,儲存在ReferenceContext使用金鑰ModelBusReferencePropertySerializer.ModelBusLoadContextKey。 特別是, SerializationContext應該包含的執行個體ModelBus。

  • 您的 ModelBus 介面卡處理配接器特有的一部分 MBR。 它可以使用儲存在 MBR 的 ReferenceContext 中的其他資訊。 簡單檔案為基礎的配接器會使用金鑰的根檔案路徑FilePathLoadContextKey 和FilePathSaveContextKey。

    只有在使用時,只還原序列化配接器中的參考模型檔案。

若要建立模型

Ff519531.collapse_all(zh-tw,VS.110).gif建立、 開啟和編輯模型

下列片段取自狀態機器的範例中,「 VMSDK 」 網站上。 它會說明使用 ModelBusReferences 建立並開啟模型,並取得與模型相關聯的圖表。

在這個範例中,目標 DSL 的名稱會是 StateMachine。 多個名稱衍生自它,例如模型類別的名稱和 ModelBusAdapter 的名稱。

using Fabrikam.StateMachine.ModelBusAdapters; 
using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Diagrams;
using Microsoft.VisualStudio.Modeling.Integration;
using Microsoft.VisualStudio.Modeling.Integration.Shell;
using Microsoft.VisualStudio.Modeling.Shell;
...
// Create a new model.
ModelBusReference modelReference = 
   StateMachineAdapterManager    .CreateStateMachineModel(modelName, fileName);
//Keep reference of new model in this model.
using (Transaction t = ...)
{
  myModelElement.ReferenceProperty = modelReference;
  t.Commit();
}
// Get the ModelBus service from Visual Studio.
IModelBus modelBus = Microsoft.VisualStudio.Shell.Package.
    GetGlobalService(typeof(SModelBus)) as IModelBus;
// Get a modelbus adapter on the new model.
ModelBusAdapter modelBusAdapter;
modelBus.TryCreateAdapter(modelReference, 
    this.ServiceProvider, out modelBusAdapter);
using (StateMachineAdapter adapter = 
      modelBusAdapter as StateMachineAdapter)
{
    if (adapter != null)
    {
        // Obtain a Diagram from the adapter.
        Diagram targetDiagram = 
           ((StandardVsModelingDiagramView)
                 adapter.GetDefaultView()
            ).Diagram;

        using (Transaction t = 
             targetDiagram.Store.TransactionManager
                .BeginTransaction("Update diagram"))
        {
            DoUpdates(targetDiagram);
            t.Commit();
        }

        // Display the new diagram.
        adapter.GetDefaultView().Show();
    }
}

正在驗證參考

BrokenReferenceDetector 測試可保留 ModelBusReferences 的存放區中的所有網域的內容。 它呼叫的動作,您可以找到的任何動作。 這特別適用於驗證的方法。 下列的驗證方法會測試嘗試儲存模型中,存放區,並報告中斷的參照,在錯誤視窗中:

[ValidationMethod(ValidationCategories.Save)]
public void ValidateModelBusReferences(ValidationContext context)
{
  BrokenReferenceDetector.DetectBrokenReferences(this.Store,
    delegate(ModelElement element, // parent of property
             DomainPropertyInfo property, // identifies property
             ModelBusReference reference) // invalid reference
    { 
      context.LogError(string.Format(INVALID_REF_FORMAT, 
             property.Name, 
             referenceState.Name, 
             new ModelBusReferenceTypeConverter().
                 ConvertToInvariantString(reference)), 
         "Reference", 
         element);
      });
}}
private const string INVALID_REF_FORMAT = 
    "The '{0}' domain property of ths ReferenceState instance "
  + "named '{1}' contains reference value '{2}' which is invalid";

ModelBus 擴充功能所執行的動作

下列的資訊不是很重要的但可能會很有用,如果您在進行大量使用 ModelBus。

ModelBus 副檔名會進行下列變更,DSL 方案中。

當您的 DSL 定義圖表上按一下滑鼠右鍵時,按一下 [ 啟用 Modelbus,綴恁寁 啟用這個 DSL 而將使用 ModelBus

  • 在 DSL 專案中,若要加入的參考Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0.dll

  • 在 DSL 定義中,加入外部型別參考: Microsoft.VisualStudio.Modeling.Integration.ModelBusReference。

    您所見的參考,在 DSL 總管網域類型。 若要以手動方式新增外部的型別參考,以滑鼠右鍵按一下根節點。

  • 新增新的範本檔案時, Dsl\GeneratedCode\ModelBusReferencesSerialization.tt

當您將網域屬性的型別設定為 ModelBusReference,然後以滑鼠右鍵按一下該屬性並按一下啟用 ModelBusReference 的特定屬性

  • 有數個 CLR 屬性會加入至 [網域] 屬性。 您可以在 [屬性] 視窗中的 [自訂屬性] 欄位中看到它們。 在Dsl\GeneratedCode\DomainClasses.cs,您所見的屬性在屬性宣告:

    [System.ComponentModel.TypeConverter(typeof(
    Microsoft.VisualStudio.Modeling.Integration.ModelBusReferenceTypeConverter))]
    [System.ComponentModel.Editor(typeof(
      Microsoft.VisualStudio.Modeling.Integration.Picker
      .ModelReferenceEditor // or ModelElementReferenceEditor
      ), typeof(System.Drawing.Design.UITypeEditor))]
    [Microsoft.VisualStudio.Modeling.Integration.Picker
      .SupplyFileBasedBrowserConfiguration
      ("Choose a model file", "Target model|*.target")]
    

當您以滑鼠右鍵按一下 DSL 定義圖表中時,按一下 [ 啟用 ModelBus,然後選取 公開 (expose) 這個 DSL 而將 ModelBus

  • 新的專案ModelBusAdapter加入至方案。

  • 參考ModelBusAdapter加入至DslPackage專案。 ModelBusAdapter參考Dsl專案。

  • DslPackage\source.extention.tt, |ModelBusAdapter|會被加入成為 MEF 的元件。

請參閱

概念

HOW TO:在程式碼中開啟檔案的模型

HOW TO:整合 UML 模型與其他模型和工具

HOW TO:加入拖放處理常式

使用文字範本中的 Visual Studio ModelBus