Comment : ouvrir un modèle depuis un fichier dans le code de programme
Vous pouvez ouvrir des modèles DÉSOLÉ dans n'importe quelle application.
d'une extension de Visual Studio , vous pouvez utiliser ModelBus à cet effet. ModelBus fournit le mécanisme standard pour référencer un modèle ou des éléments dans un modèle, et pour rechercher le modèle s'il a atteint. Pour plus d'informations, consultez Intégration de modèles à l'aide de Visual Studio Modelbus.
Framework cible
définissez Framework cible de votre projet d'application à .NET Framework 4.
Pour définir le framework cible
Ouvrez le projet de Visual Studio pour l'application dans laquelle vous souhaitez lire un modèle DÉSOLÉ.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis cliquez sur Propriétés.
Dans la fenêtre des propriétés du projet, sous l'onglet d' Application , affectez le champ de Framework cible à .NET Framework 4.
Notes
Vous devrez peut-être faire cela même si vous avez sélectionné .NET Framework 4 dans la boîte de dialogue de création du projet.La version cible du. Net Framework ne doit pas être .NET Framework 4 Client Profile.
Références
vous devez ajouter ces références à votre projet d'application de Visual Studio :
Microsoft.VisualStudio.Modeling.Sdk.11.0
- Si vous ne voyez pas cette opération sous l'onglet de .NET dans la boîte de dialogue d' Ajouter des références , cliquez sur l'onglet de Parcourir et naviguez jusqu'à %Program Files%\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies \.
Votre assembly DÉSOLÉ, que vous trouverez dans le dossier Bin votre projet DÉSOLÉ. son nom est typique du formulaire : YourCompany.YourProject. Dsl.dll.
Classes importantes dans le langage DÉSOLÉ
Avant de pouvoir écrire du code qui lit votre DÉSOLÉ, vous devez connaître les noms de quelques-unes des classes générées par votre DÉSOLÉ. Dans votre solution DÉSOLÉ, ouvrez le projet de DÉSOLÉ et recherchez dans le dossier de GeneratedCode . Ou bien, double-cliquez sur l'assembly DÉSOLÉ dans votre projet Références, ouvrez l'espace de noms DÉSOLÉ dans Explorateur d'objets.
Ce sont des classes que vous devez identifier :
YourDslRootClass - il s'agit du nom de la classe racine de votre DslDefinition.dsl.
YourDslNameSerializationHelper - cette classe est définie dans SerializationHelper.cs dans votre projet DÉSOLÉ.
YourDslNameDomainModel - cette classe est définie dans DomainModel.cs dans votre projet DÉSOLÉ.
Lire un fichier
L'exemple suivant est conçu pour lire un langage spécifique à un domaine dans lequel les classes importantes sont les suivantes :
FamilyTreeModel
FamilyTreeSerializationHelper
FamilyTreeDomainModel
L'autre classe de domaine dans ce langage DÉSOLÉ est personne.
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);
}
} } } }
Enregistrement dans un fichier
L'ajout suivant au code précédent modifie le modèle puis l'enregistre dans un fichier.
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)
{ ... }