共用方式為


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

您可以在任何應用程式中開啟 DSL 模型。

從Visual Studio副檔名,您可以使用 ModelBus,為上述目的。ModelBus 提供標準的機制,來參考模型或項目在模型中,以及尋找模型,如果它已經移動。如需詳細資訊,請參閱 使用 Visual Studio Modelbus 整合模型

目標 Framework

設定目標架構 應用程式專案的 。NET Framework 4

若要設定目標架構

  1. 開啟Visual Studio想讀取 DSL 模型的應用程式的專案。

  2. 以滑鼠右鍵按一下 [方案總管] 中的專案,然後按一下 [屬性]。

  3. 在專案 [屬性] 視窗中,在應用程式 索引標籤上,設定 目標架構 欄位設 。NET Framework 4

注意事項注意事項

您可能需要執行這項操作,即使您選取 。NET Framework 4 在專案的 [建立] 對話方塊。目標架構不應 。NET Framework 4 用戶端設定檔

參考

您必須將這些參考加入至您Visual Studio應用程式專案:

  • Microsoft.VisualStudio.Modeling.Sdk.11.0

    • 如果您看不到這下 。NET 索引標籤上,在加入參考 對話方塊中,按一下 瀏覽 索引標籤,並巡覽至 %程式 Files%\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies\。
  • DSL 組件,其中您可以在 [bin] 資料夾] 下找到您的 DSL 專案。它的名稱通常是在表單的: YourCompany。 YourProject。Dsl.dll。

在 DSL 的重要類別

您可以撰寫會讀取您的 DSL 的程式碼之前,您應該知道一些您的 DSL 所產生的類別的名稱。在您的 DSL 方案中開啟 Dsl 專案,並查看 GeneratedCode 資料夾。或者,按兩下 [DSL 中的組件專案參考,並開啟 DSL 命名空間,在 物件瀏覽器

這些是您應能識別的類別:

  • YourDslRootClass -這是根類別名稱在您 DslDefinition.dsl。

  • YourDslNameSerializationHelper -這個類別定義在 SerializationHelper.cs 您的 DSL 專案中。

  • YourDslNameDomainModel -這個類別定義在 DomainModel.cs 您的 DSL 專案中。

從檔案讀取

下列範例被設計來讀取的 DSL 的重要類別如下:

  • FamilyTreeModel

  • FamilyTreeSerializationHelper

  • FamilyTreeDomainModel

在這個 DSL 另一個網域類別才要求帳號管理員。

using System;
using Microsoft.VisualStudio.Modeling;
using Company.FamilyTree; // Your DSL namespace

namespace StandaloneReadDslConsole
{ class Program
  { static void Main(string[] args)
    {
      // The path of a DSL model file:
      string dslModel = @"C:\FamilyTrees\Tudor.ftree";
      // Set up the Store to read your type of model:
      Store store = new Store(
        typeof(Company.FamilyTree.FamilyTreeDomainModel));
      // The Model type generated by the DSL:
      FamilyTreeModel familyTree;
      // All Store changes must be in a Transaction:
      using (Transaction t = 
        store.TransactionManager.BeginTransaction("Load model"))
      {
        familyTree = 
           FamilyTreeSerializationHelper.Instance.
              LoadModel(store, dslModel, null, null, null);
        t.Commit(); // Don't forget this!
      }
      // Now we can read the model:
      foreach (Person p in familyTree.People)
      {
        Console.WriteLine(p.Name); 
        foreach (Person child in p.Children)
        {
          Console.WriteLine("    " + child.Name);
        }
} } } }

儲存檔案

前述的程式碼的下列新增至模型中進行變更,然後將它儲存到檔案。

using (Transaction t =
  store.TransactionManager.BeginTransaction("update model"))
{
  // Create a new model element:
  Person p = new Person(store);
  // Set its embedding relationship:
  p.FamilyTreeModel = familyTree;
  // - same as: familyTree.People.Add(p);
  // Set its properties:
  p.Name = "Edward VI";
  t.Commit(); // Don't forget this!
}
// Save the model:
try
{
  SerializationResult result = new SerializationResult();
  FamilyTreeSerializationHelper.Instance
    .SaveModel(result, familyTree, @"C:\FamilyTrees\Tudor-upd.ftree");
  // Report any error:
  if (result.Failed)
  {
    foreach (SerializationMessage message in result)
    {
      Console.WriteLine(message);
    }
  }
}
catch (System.IO.IOException ex)
{ ... }