Condividi tramite


Procedura: aprire un modello da file nel codice del programma

È possibile aprire i modelli DSL in qualsiasi applicazione.

Da a Visual Studio estensione, è possibile utilizzare ModelBus a questo scopo.ModelBus fornisce un meccanismo per fare riferimento a un modello o gli elementi in un modello e individuare il modello se si è spostati.Per ulteriori informazioni, vedere Integrazione di modelli tramite ModelBus di Visual Studio.

Framework di destinazione

impostare framework di destinazione il progetto di applicazione a .NET Framework 4.

Per impostare il framework di destinazione

  1. aprire Visual Studio progetto per l'applicazione in cui si desidera leggere un modello DSL.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Proprietà.

  3. Nella finestra delle proprietà del progetto, scegliere applicazione la scheda, impostare framework di destinazione campo su .NET Framework 4.

[!NOTA]

Potrebbe essere necessario eseguire questo anche se è stata selezionata .NET Framework 4 nella finestra di dialogo per la creazione del progetto.Il framework di destinazione non deve essere .NET Framework 4 Client Profile.

Riferimenti

È necessario aggiungere questi riferimenti a Visual Studio progetto di applicazione:

  • Microsoft.VisualStudio.Modeling.Sdk.11.0

    • Se non viene visualizzato questo in .NET scheda in aggiungere i riferimenti la finestra di dialogo, fare clic su Navigazione tabulazione e passare a %Program Files%\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies \.
  • L'assembly DSL, che si trova nella cartella bin del progetto di modello DSL.Il nome viene in genere del form: la società.TheProject. Dsl.dll.

Classi importanti nel modello DSL

Prima di poter scrivere il codice che legge il modello DSL, è necessario conoscere i nomi delle classi generate dal modello DSL.Nella soluzione DSL, aprire Dsl project e cercare in GeneratedCode cartella.In alternativa, fare doppio clic sull'assembly DSL nel progetto riferimentie aprire lo spazio dei nomi DSL in Visualizzatore oggetti.

Queste sono le classi che è necessario identificare:

  • TheDslRootClass - Questo è il nome della classe radice in DslDefinition.dsl.

  • TheDslNameSerializationHelper - Questa classe è definita in SerializationHelper.cs nel progetto di modello DSL.

  • TheDslNameDomainModel - Questa classe è definita in DomainModel.cs nel progetto di modello DSL.

La lettura da un file

Nell'esempio è progettato per leggere un modello DSL in cui le classi importanti sono le seguenti:

  • FamilyTreeModel

  • FamilyTreeSerializationHelper

  • FamilyTreeDomainModel

L'altra classe di dominio in questo modello DSL è persona.

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);
        }
} } } }

Salvataggio di un file

Nell'aggiunta al codice precedente apporta una modifica al modello e la salva in un file.

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)
{ ... }