다음을 통해 공유


방법: 프로그램 코드로 파일에서 모델 열기

DSL 모델은 해당 응용 프로그램에서 열 수 있습니다.

Visual Studio 확장명을 Modelbus이이 목적을 위해 사용할 수 있습니다.ModelBus 모델 나, 모델의 요소를 참조 하 고 이동 된 경우 모델을 찾기 위한 표준 메커니즘을 제공 합니다.자세한 내용은 Visual Studio Modelbus를 사용하여 모델 통합를 참조하십시오.

대상 프레임워크

설정에서 대상 프레임 워크 의 응용 프로그램 프로젝트에 .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)
{ ... }