Porady: otwieranie modelu z pliku w kodzie programu
Modele DSL można otworzyć w dowolnej aplikacji.
Z Visual Studio rozszerzenia, w tym celu można użyć ModelBus.ModelBus udostępnia standardowy mechanizm odwołującego się do modelu lub elementy w modelu i znajdowanie modelu, jeśli został on przeniesiony.Aby uzyskać więcej informacji, zobacz Integrowanie modeli za pomocą Visual Studio Modelbus.
Ramy docelowej
Ustaw ramach docelowej projektu aplikacji do .NET Framework 4.
Aby ustawić ramy docelowej
Otwórz Visual Studio projektu dla aplikacji, w którym chcesz przeczytać modelu modemu DSL.
W Solution Explorer, kliknij prawym przyciskiem myszy projekt, a następnie kliknij przycisk Właściwości.
W oknie właściwości projektu na aplikacji kartę, należy ustawić ramach docelowej pola do .NET Framework 4.
[!UWAGA]
Trzeba to zrobić, nawet jeśli wybrano .NET Framework 4 w oknie dialogowym Tworzenie projektu.Ramy docelowej nie powinny być .NET Framework 4 klienta profilu.
Odwołania
Trzeba dodać te odwołania do użytkownika Visual Studio projekt aplikacji:
Microsoft.VisualStudio.Modeling.SDK.11.0
- Jeśli nie widać to w .NET kartę w Dodać odwołania okno dialogowe, kliknij przycisk Przeglądaj kartę i przejdź do % Program Files%\Microsoft programu Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies\.
Twoje zestawu DSL, który można znaleźć w folderze bin projektu DSL.Jego nazwa jest zazwyczaj formularza: twojafirma. YourProject.DSL.dll.
Ważnych klas w modem DSL
Przed można napisać kod, który czyta modem DSL, należy znać nazwy niektórych klas generowanych przez modem DSL.W rozwiązaniu DSL, otwórz Dsl projektu i poszukaj GeneratedCode folder.Alternatywnie, kliknij dwukrotnie zestawu DSL w projekcie odniesieniai Otwórz obszar nazw DSL, w Przeglądarki obiektów.
Klasy, które należy zidentyfikować te są:
YourDslRootClass -jest to nazwa główna klasa w sieci DslDefinition.dsl.
YourDslNameSerializationHelper -tej klasy jest zdefiniowany w SerializationHelper.cs w projekcie DSL.
YourDslNameDomainModel -tej klasy jest zdefiniowany w DomainModel.cs w projekcie DSL.
Odczyt z pliku
Poniższy przykład jest przeznaczony do odczytu DSL, w którym ważnych klas są następujące:
FamilyTreeModel
FamilyTreeSerializationHelper
FamilyTreeDomainModel
Inne klasy domeny w tym DSL jest osobą.
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);
}
} } } }
Zapisywanie do pliku
Oprócz poprzedniego kodu wprowadza zmianę w modelu, a następnie zapisuje w pliku.
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)
{ ... }