Aracılığıyla paylaş


Nasıl yapılır: Program kod dosyasından Model Aç

dsl modelleri herhangi bir uygulamasında açabilirsiniz.

Gelen bir Visual Studio uzantısı, bu amaç için ModelBus kullanabilirsiniz.ModelBus, bir model veya bir modeli öğeleri baþvurmak için ve onu taşınmışsa modeli bulmak için standart mekanizması sağlar.Daha fazla bilgi için bkz. Modelleri Visual Studio Modelbus kullanarak tümleştirme.

Hedef çerçevesi

Set hedef çerçevesi uygulama projenizin .net Framework 4.

Hedefi çerçevesi ayarlamak için

  1. Açık Visual Studio proje dsl modeli okumak istediğiniz uygulama için.

  2. Çözüm Gezgini'nde projeye sağ tıklayın ve sonra Özellikler'i tıklayın.

  3. Project properties penceresinde, Uygulama sekmesinde, ayarlamak hedef çerçevesi alanını .net Framework 4.

[!NOT]

Seçmiş olsanız bile bunu yapmak gereksinim duyabileceğiniz .net Framework 4 proje oluşturma iletişim kutusunda.Hedef Çerçeve olmaması .net Framework 4 istemci profil.

Başvurular

Bu başvuruları eklemek zorunda sizin Visual Studio uygulama projesi:

  • Microsoft.VisualStudio.Modeling.SDK.11.0

    • Bunun altında görmüyorsanız, .net sekmesinde Başvuruları eklemek iletişim kutusunu tıklatın göz sekmesini ve gitmek % Program Files%\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies\.
  • dsl projenizin bin klasörü altında bulacaksınız, dsl derleme.Şekli adı genellikle şöyledir: YourCompany. YourProject.DSL.dll.

dsl önemli sınıfları

dsl okur kod yazabilirsiniz önce bazı dsl tarafından üretilen sınıfın adını bilmeniz gerekir.dsl çözümünüzün açmak Dsl proje ve bak GeneratedCode klasörü.Alternatif olarak, projenizdeki dsl derleme çift başvurularıve dsl ad alanında Nesne tarayıcısı.

Tanımlamak sınıfları şunlardır:

  • YourDslRootClass -kök sınıfında adıdır, DslDefinition.dsl.

  • YourDslNameSerializationHelper -bu sınıfın tanımlandığı şekliyle SerializationHelper.cs dsl projenizde.

  • YourDslNameDomainModel -bu sınıfın tanımlandığı şekliyle DomainModel.cs dsl projenizde.

Bir dosyadan okuma

Aşağıdaki örnek, önemli sınıfları gibi olduğu bir dsl okumak için tasarlanmıştır:

  • FamilyTreeModel

  • FamilyTreeSerializationHelper

  • FamilyTreeDomainModel

Diğer etki alanı sınıfında bu dsl kişidir.

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

Bir dosyaya kaydetme

Önceki kod aşağıdaki ayrıca model bir değişiklik yapar ve sonra bir dosyaya kaydeder.

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