Otevření modelu ze souboru v kódu programu
Modely DSL můžete otevřít v libovolné aplikaci.
Z rozšíření sady Visual Studio můžete k tomuto účelu použít ModelBus. ModelBus poskytuje standardní mechanismus pro odkazování na model nebo prvky v modelu a pro vyhledání modelu, pokud se model přesunul. Další informace naleznete v tématu Integrace modelů pomocí sady Visual Studio Modelbus.
Cílová architektura
Nastavte cílovou architekturu projektu aplikace na .NET Framework 4 nebo novější.
Otevřete projekt sady Visual Studio pro aplikaci, ve které chcete přečíst model DSL.
V Průzkumník řešení klepněte pravým tlačítkem myši na projekt a potom klepněte na příkaz Vlastnosti.
V okně vlastností projektu na kartě Aplikace nastavte pole Cílové rozhraní na .NET Framework 4 (nebo novější).
Poznámka:
Cílová architektura by neměla být profil klienta rozhraní .NET Framework 4.
Reference
Do projektu aplikace sady Visual Studio přidejte tyto odkazy:
Microsoft.VisualStudio.Modeling.Sdk.11.0
- Pokud tuto možnost nevidíte na kartě .NET v dialogovém okně Přidat odkazy , klikněte na kartu Procházet a přejděte na
%Program Files%\Microsoft Visual Studio\2022\YourVSversionSKU\VSSDK\VisualStudioIntegration\Common\Assemblies
.
- Pokud tuto možnost nevidíte na kartě .NET v dialogovém okně Přidat odkazy , klikněte na kartu Procházet a přejděte na
Vaše sestavení DSL, které najdete ve složce bin projektu DSL. Jeho název je obvykle tvar: YourCompany.Váš projekt
.Dsl.dll
.
Důležité třídy v DSL
Než budete moci napsat kód, který čte vaše DSL, měli byste znát názvy některých tříd vygenerovaných vaší DSL. V řešení DSL otevřete projekt Dsl a vyhledejte složku GeneratedCode . Případně poklikejte na sestavení DSL v projektu Reference a otevřete obor názvů DSL v prohlížeči objektů.
Toto jsou třídy, které byste měli identifikovat:
YourDslRootClass - Toto je název kořenové třídy ve vaší
DslDefinition.dsl
.YourDslName
SerializationHelper
– Tato třída je definována vSerializationHelper.cs
projektu DSL.YourDslName
DomainModel
– Tato třída je definována vDomainModel.cs
projektu DSL.
Čtení ze souboru
Následující příklad je navržen tak, aby četl DSL, ve kterém jsou důležité třídy následující:
FamilyTreeModel
FamilyTreeSerializationHelper
FamilyTreeDomainModel
Druhá třída domény v této DSL je 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);
}
} } } }
Uložení do souboru
Následující doplněk k předchozímu kódu provede změnu modelu a uloží ho 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)
{ ... }