Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.csprojektu DSL.YourDslName
DomainModel– Tato třída je definována vDomainModel.csprojektu 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)
{ ... }