方法: プログラム コード内のファイルからモデルを開く
アプリケーションの DSL モデルを開くことができます。
Visual Studio の拡張子 (ModelBus をこの目的で使用できます。 ModelBus はモデルでの要素を参照するとモデルを検索するに移動する標準的な機能を提供します。 詳細については、「Visual Studio Modelbus によるモデルの統合」を参照してください。
[対象とする Framework]
.NET Framework 4 にアプリケーション プロジェクトの 対象のフレームワーク を設定します。
ターゲット フレームワークを設定するには
DSL モデルを読み込みするアプリケーションの Visual Studio プロジェクトを開きます。
ソリューション エクスプローラーで、プロジェクトを右クリックし、[プロパティ] をクリックします。
プロジェクトのプロパティ] ウィンドウで[入力] ENT4ENT タブで**.NET Framework 4** に ENT5ENT [入力] フィールドを設定します。
注意
プロジェクトの作成] ダイアログ ボックスで [] を選択します ENT2ENT これが必要になる場合があります。ターゲット フレームワークは .NET Framework 4 Client Profile 必要があります。
References
Visual Studio アプリケーション プロジェクトに参照を追加する必要があります :
Microsoft.VisualStudio.Modeling.Sdk.11.0
- 追加の [.NET**] タブにあるのこれはダイアログ ボックスの参照はない場合** %Program Files% \ Microsoft Visual Studio 2010 SDK \ VisualStudioIntegration \ Common \ Assemblies \ クリックします。 [参照] タブを移動および
Bin フォルダーの下に DSL のプロジェクトを探します DSL のアセンブリ。 この名前は通常です : フォーム YourCompany。YourProject。Dsl.dll。
DSL の重要なクラス
DSL を読み取るコードを記述する前にDSL によって生成されるクラスの名前を指定する必要があります。 DSL のソリューションでは***** Dsl ***** でプロジェクトを開き[入力] フォルダー ENT6ENT " を参照してください。 またプロジェクト 参照設定 の DSL のアセンブリをクリックしダブル オブジェクト ブラウザー の DSL の名前空間を開きます。
これらは特定する必要のあるクラスです :
-YourDslRootClass これは DslDefinition.dsl のルート クラスの名前です。
YourDslNameSerializationHelper - このクラスはDSL のプロジェクトの SerializationHelper.cs で定義されます。
YourDslName ドメイン モデル - このクラスはDSL のプロジェクトの DomainModel.cs で定義されます。
ファイルからの読み取り
次の例では次のような重要なクラスを持つ DSL を読み込むように設計されています :
FamilyTreeModel
FamilyTreeSerializationHelper
FamilyTreeDomainModel
この DSL の他のドメインはクラスです。
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);
}
} } } }
ファイルへの保存
前のコードで次の追加をモデルに変更を加えファイルに保存します。
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)
{ ... }