방법: 프로그램 코드로 파일에서 모델 열기
DSL 모델은 해당 응용 프로그램에서 열 수 있습니다.
Visual Studio 확장명을 Modelbus이이 목적을 위해 사용할 수 있습니다.ModelBus 모델 나, 모델의 요소를 참조 하 고 이동 된 경우 모델을 찾기 위한 표준 메커니즘을 제공 합니다.자세한 내용은 Visual Studio Modelbus를 사용하여 모델 통합를 참조하십시오.
대상 프레임워크
설정에서 대상 프레임 워크 의 응용 프로그램 프로젝트에 .NET Framework 4.
대상 프레임 워크를 설정.
열려 있는 Visual Studio DSL 모델 읽기 응용에 대 한 프로젝트.
솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.
프로젝트 속성 창에서에 응용 프로그램 탭에서 설정에 대상 프레임 워크 필드에 .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)
{ ... }