Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Anda dapat membuka model DSL di aplikasi apa pun.
Dari ekstensi Visual Studio, Anda dapat menggunakan ModelBus untuk tujuan ini. ModelBus menyediakan mekanisme standar untuk mereferensikan model atau elemen dalam model, dan untuk menemukan model jika telah dipindahkan. Untuk informasi selengkapnya, lihat Mengintegrasikan Model dengan menggunakan ModelBus Visual Studio.
Kerangka kerja target
Atur Kerangka kerja target proyek aplikasi Anda ke .NET Framework 4 atau yang lebih baru.
Buka proyek Visual Studio untuk aplikasi tempat Anda ingin membaca model DSL.
Di Penjelajah Solusi, klik kanan proyek kemudian klik Properti.
Di jendela properti proyek, pada tab Aplikasi, atur bidang Kerangka kerja target ke .NET Framework 4 (atau yang lebih baru).
Catatan
Kerangka kerja target tidak boleh .NET Framework 4 Profil Klien.
Referensi
Tambahkan referensi ini ke proyek aplikasi Visual Studio Anda:
Microsoft.VisualStudio.Modeling.Sdk.11.0- Jika Anda tidak melihat ini di bawah tab .NET dalam kotak dialog Tambahkan Referensi, klik tab Telusuri dan navigasi ke
%Program Files%\Microsoft Visual Studio\2022\YourVSversionSKU\VSSDK\VisualStudioIntegration\Common\Assemblies.
- Jika Anda tidak melihat ini di bawah tab .NET dalam kotak dialog Tambahkan Referensi, klik tab Telusuri dan navigasi ke
Rakitan DSL Anda, yang akan Anda temukan di bawah folder bin proyek DSL Anda. Namanya biasanya dari bentuk: YourCompany. YourProject
.Dsl.dll.
Kelas penting di DSL
Sebelum Anda dapat menulis kode yang membaca DSL Anda, Anda harus mengetahui nama beberapa kelas yang dihasilkan oleh DSL Anda. Dalam solusi DSL Anda, buka proyek Dsl dan lihat di folder GeneratedCode. Atau, klik dua kali rakitan DSL di Referensi proyek Anda, dan buka namespace DSL di Browser Objek.
Ini adalah kelas yang harus Anda identifikasi:
YourDslRootClass - Ini adalah nama kelas root di
DslDefinition.dslAnda.YourDslName
SerializationHelper- Kelas ini ditentukan dalamSerializationHelper.csproyek DSL Anda.YourDslName
DomainModel- Kelas ini ditentukan dalamDomainModel.csproyek DSL Anda.
Membaca dari file
Contoh berikut dirancang untuk membaca DSL di mana kelas penting adalah sebagai berikut:
FamilyTreeModel
FamilyTreeSerializationHelper
FamilyTreeDomainModel
Kelas domain lain dalam DSL ini adalah Orang.
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);
}
} } } }
Simpan ke file
Tambahan berikut untuk kode sebelumnya membuat perubahan pada model lalu menyimpannya ke 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)
{ ... }