Postupy: Otevření modelu ze souboru v kódu programu
Modely DSL můžete otevřít v libovolné aplikaci.
Z Visual Studio rozšíření, můžete použít ModelBus pro tento účel.ModelBus poskytuje standardní mechanismus pro odkazování na model nebo prvky v modelu a hledání modelu, pokud byl přesunut.Další informace naleznete v tématu Integrace modelů pomocí Visual Studio Modelbus.
Cílové rozhraní Framework
Nastavit cílový rámec z aplikace project .NET Framework 4.
Nastavit cílový rámec
Otevřít Visual Studio project pro aplikaci, ve které chcete číst DSL model.
V Průzkumníku řešení klikněte pravým tlačítkem myši na projekt a potom klikněte na Vlastnosti.
V okně Vlastnosti projektu na aplikace karta, nastavte cílový rámec pole na .NET Framework 4.
[!POZNÁMKA]
Je třeba provést i v případě, že jste vybrali .NET Framework 4 v dialogovém okně vytvoření projektu.Cílový rámec by neměl být .NET Framework 4 profilu klienta.
Odkazy
Chcete přidat tyto odkazy na vaše Visual Studio aplikace project:
Microsoft.VisualStudio.Modeling.SDK.11.0
- Pokud to pod .NET karta v Přidat odkazy dialogové okno, klepněte Procházet tab a přejděte na % Program Files%\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies\.
Vaše DSL sestavení, které najdete ve složce přihrádky projektu DSL.Jeho název je obvykle formuláře: YourCompany. YourProject.DSL.dll.
Důležité třídy v modem DSL
Dříve, než můžete napsat kód, který přečte vaše DSL, byste měli znát názvy některých tříd generovaných vaše DSL.V řešení DSL, otevřete Dsl projektu a oblast hledání GeneratedCode složky.Nebo poklepejte na sestavení DSL v projektu odkazya otevřít obor názvů DSL v Prohlížeč objektů.
Jsou třídy, které by měl identifikovat:
YourDslRootClass -Toto je kořenová třída v vaše DslDefinition.dsl.
YourDslNameSerializationHelper -Tato třída je definována v SerializationHelper.cs v projektu DSL.
YourDslNameDomainModel -Tato třída je definována v DomainModel.cs v projektu DSL.
Čtení ze souboru
V následujícím příkladu je navržen pro čtení DSL, ve kterém jsou důležité tříd takto:
FamilyTreeModel
FamilyTreeSerializationHelper
FamilyTreeDomainModel
Domény třídy v tomto DSL je osoba.
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);
}
} } } }
Uložení do souboru
V předchozím kódu navíc následující provede změnu modelu a uloží jej do souboru.
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)
{ ... }