Поделиться через


Практическое руководство. Открытие модели из файла в коде программы

Можно открыть модели DSL в любом приложении.

From a Visual Studio расширение, можно использовать ModelBus для этой цели.ModelBus предоставляет стандартный механизм для ссылок на элементы в модель или модели, а также для поиска переместила модель при ее.Дополнительные сведения см. в разделе Интеграция моделей с помощью Visual Studio Modelbus.

Требуемая версия .NET Framework

Установка Целевая рабочая среда проекта приложения .NET Framework 4.

Установка требуемая версия .NET Framework

  1. Открытие Visual Studio проект приложения, в котором необходимо считать модели DSL.

  2. В обозревателе решений щелкните правой кнопкой мыши проект и выберите пункт Свойства.

  3. В окне свойства проекта на Приложение вкладка ", присвойте Целевая рабочая среда поле .NET Framework 4.

ПримечаниеПримечание

Это можно сделать, даже если выбрана .NET Framework 4 в диалоговом окне создание проекта.Требуемая версия .NET Framework не обязательно Клиентский профиль .NET Framework 4.

Ссылки

Необходимо добавить эти ссылки к вашему Visual Studio проект приложения:

  • Microsoft.VisualStudio.Modeling.Sdk.11.0

    • Если это не отображается под .NET вкладка в Добавление ссылок откроется диалоговое окно выберите Обзор вкладка и перейдите к общее VisualStudioIntegration \ SDK \ %Program Files% \ assemblies \ Microsoft Visual Studio 2010 \.
  • Сборка 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 person.

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)
{ ... }