、ブレンド3、およびVisual Studio 2010のVisual Studio 2008で、ブレンド2:すべてのデザイナーのためのSilverlightのデザインタイムを書く方法
はじめ
これは、デザインタイムの実装の 変更に関するシリーズの一部であるSilverlightツールキット 2009年3月リリース 。 この記事は、Silverlightの3/Blend 3/Visual Studio 2010で導入されたデザイナの機能拡張フレームワークにおける重大な変更に焦点を当て、どのようにすべての設計者をサポートするためのSilverlightの設計時間を開発する:Visual Studioの2008/Blend 2、およびVisual Studio 2010/Blend 3。
Visual Studio 2008とブレンド2のSilverlight 2の設計時
Visual Studioとブレンドの共有、同じデザイナの機能拡張フレームワーク、およびWPFとSilverlightの両方に使用。 WPFデザイナの機能拡張 MSDNのは、おそらくデザイナの機能拡張フレームワークで使用可能な最善の参照です。 2008年12月リリースのSilverlightツールキットは、 Silverlight 2の(別名SL2)に基づいて、およびVisual Studio 2008(別名VS9)とBlend 2のためのデザイナサポートを持っています。 それは、VS9とBlend 2のためのSilverlight 2の設計時の機能を開発する方法を示すの良い現実世界の例です。 私のブログの記事のSilverlightツールキットの設計時の機能の実装は、それがどのように行われるかを詳細に説明し、実装の フレームワークのユーザーは自らの設計時の実装で使用することができます。
一言で言えば、Visual Studio 2008とブレンド2のSilverlight 2の設計時フレームワーク、以下にまとめます。
- MWD:設計時の拡張性フレームワークは、特に、アセンブリのセットを通じてMicrosoft.Windows.Design.dll、Microsoft.Windows.Design.Extensibility.dll、およびMicrosoft.Windows.Design.Interaction.dllを露出している。 総称し、これらのアセンブリはMWDと呼ばれています。 彼らは%の下にインストールされているDevEnvDir%\ PublicAssemblies(C:\プログラムファイル\のMicrosoft Visual Studio 9.0 \ Common7 \ IDE \に32ビットOS、またはCでPublicAssemblies:\プログラムファイル(x86)\ Microsoft Visual Studioの9.0 \ Common7 \ IDE \にPublicAssemblies 64ビットOSで)。 彼らはまた、GAC - EDです。 ほとんどのデザイン時のプロジェクトは、それらのMWDのDLLを参照する必要があります。 Visual Studio 2008とBlend 2を使用MWDバージョン3.5。
- 命名規則:命名規則を使用してVisual Studioとブレンド負荷のデザイン時のアセンブリ:コントロールアセンブリFoo.dll、VSとブレンド用のネームFoo.Design.dll、Foo.VisualStudio.Design.dllとのデザイン時のアセンブリを見つけること、そしてFoo.Expression.Design.dll、Foo.dllは同じディレクトリ、またはデザインのサブディレクトリにあります。 ブレンドはFoo.Design.dllとFoo.Expression.Design.dllをロードする間、Visual Studioは、Foo.Design.dllとFoo.VisualStudio.Design.dllをロードします。 そうそれは。Design.dllですべての設計者間で共有、設計時の機能を入れ、それぞれ。VisualStudio.Design.dllと。Expression.Design.dllでVisual Studioとブレンド特定の設計時の機能を挿入することを勧めます。
- エントリポイント:Visual Studioやブレンドの負荷設計時のアセンブリ、それが実装するすべてのクラス見つけるためにリフレクションを使用IRegisterMetadataを 、その唯一のメソッド呼び出し登録 。 Silverlightツールキット2008年12月のリリースは以前のブログ記事はで詳細設計時の実装の フレームワークがありますデザインタイムをSilverlightツールキットの機能の実装 。
でSilverlight 2のツールキットのソースでSilverlight.Controls.Design.slnのスクリーンショットの下に2009年3月リリースでは、上述のVS9とブレンド2のSL2の設計時の実装を示します。
何は、Silverlight 3、ブレンド3とVisual Studio 2010で変更
に記載のとおりWPFデザイナの機能拡張アーキテクチャ MSDNで:
WPFデザイナは、完全な拡張性フレームワークをサポートしています。 Expression Blendには、プロパティエディタ、メタデータのロード、およびライセンスをサポートしています。 ブレンドは、メニューアクションと装飾をサポートしていません。
Blend 2はあまりにも上記のSilverlightのデザインタイムのサポートには制限がありますが、Visual Studio 2008には、Silverlightのデザインタイム(アイコンのみ、ToolboxBrowsableAttributeのようないくつかの属性のメタデータのロード)はほとんどサポートしています:それはデザイナーよりビューアです。 SilverlightのデザインタイムのサポートのためのWPFのパリティを持つために、Blend 3のとVisual Studio 2010(別名VS10は)特に、デザイナの機能拡張フレームワーク(例:MWD)への変更を壊す導入する必要があります。
- MWD:デザイナー拡張性フレームワークAPIのほとんどは変わりませんが、その物理的なパッケージングの変更:Microsoft.Windows.Design.dllがなくなっている、および3.5から4.0までのすべてのMWDアセンブリの変更のバージョン。 Visual Studio 2010の前にBeta1を、新しいMWDを取得する唯一の方法は、Blend 3のプレビューを経由しており、そのバージョンは今のところ代わりに4.0の7.3です。
- エントリポイント:代わりを通じて反映されるのIRegisterMetadataの実装、Blend 3のおよびVisual Studio 2010の新しいアセンブリ属性のProvideMetadataAttributeを使用し、そしてmetadataProviderTypeがIProvideAttributeTable実装する必要があります。

- 命名規則:MWDバージョンとエントリポイントのような重大な変更が、3.5 MWDに対して開発された既存のデザイン時のアセンブリがブレンド3とVisual Studio 2010でロードされないためには、Blend 3のためのMWD新しい4.0に対して新たな設計時間を書かなければならないこととVisual Studio 2010の。 これは(あなたが唯一のSilverlight 2とSilverlight 3およびブレンド2ブレンド3を使用することができますので)ブレンド用OKですが、これは、Silverlight 3の開発用のVisual Studio 2008を使用できるため、Visual Studio用の課題を作成し、同様のVisual Studio Silverlight 2の開発は2010年。
テーブルの下にサポートされているすべてのシナリオを示し、デザイン時のアセンブリをロードするために使用されますMWDのどのバージョン:
| SL \デザイナー | VS9 | VS10 | Blend2 | Blend3 |
| SL2 | MWD3.5 | MWD4.0 | MWD3.5 | |
| SL3 | MWD3.5 | MWD4.0 | MWD4.0 |
我々は2つの互換性のないMWDsに対してつのデザイン時のアセンブリを構築することができないので、我々は2つの別々のデザイン時のアセンブリ、各MWDに対してつを作成する必要があります。 デザイン時のアセンブリは、名前によってロードされ、そして我々は同じの複数のバージョンを可能にするために同じ場所に同じ名前なので、設計時のアセンブリの読み込みのメカニズム(すなわち、命名規則)を変更する必要がある、との2つのアセンブリを含めることはできませんデザイン時のアセンブリが共存する。
新しい命名規則は、Blend 3のとVisual Studio 2010 RTMで出てくるのを待っている間、我々はVS9とVS10の両方をサポートするために、今巧妙な何かを行うことができます。 現在の命名規則は、Visual Studioを可能に覚えているし、つの設計アセンブリをロードするためにそれぞれをブレンド。
| DLL \デザイナー | Visual Studioの | ブレンド |
| Foo.Design.dll | X | X |
| Foo.VisualStudio.Design.dll | X | |
| Foo.Expression.Design.dll | X |
私たちは、MWDの異なるバージョンに対して2つのアセンブリを構築することができます。
- Silverlight 3のために、我々が共有。Design.dllはMWD 4.0に対してビルドすることができますので、VS10とBlend 3の両方でロードすることができます。 我々はその後。VisualStudio.Design.dllはMWD 3.5に対してビルドされ、共有からすべてを重複している。Design.dllので、VS9でロードすることができます。 つの小さな問題もあります。VS10は読み込むことができないので、我々は、激しさを増しているVisual Studioのツールボックスからいくつかのコントロールを非表示にToolboxBrowsableAttribute(false)を使用して、同じように、VS10のためにVisual Studioの特定のデザイン時の機能を置く場所がない。VisualStudio.Design.dllはMWD 3.5に対してビルド。 これは、Visual Studio 2010のRTM後に新たな命名規則で解決されます。
| DLL \ MWD \デザイナー | MWD | VS9 | VS10 | Blend3 |
| Foo.Design.dll | 4.0 | X | X | |
| Foo.VisualStudio.Design.dll | 3.5 | X | ? | |
| Foo.Expression.Design.dll | 4.0 | X |
- Silverlight 2のために、同じアプローチに従います。。。。。共有Design.dllはMWD 4.0に対してビルドが、VisualStudio.Design.dllとExpression.Design.dll両方を持っているMWD 3.5に対してビルドされ、共有Design.dll内のすべての重複がある。 このように、VS9とBlend 2の両方は問題なく動作しますが、同じ問題でVS10のためのVisual Studio固有の機能を格納する場所がないこと。 再び、そのはVS10で新しい命名規則で解決されます。
| DLL \ MWD \デザイナー | MWD | VS9 | VS10 | Blend2 |
| Foo.Design.dll | 4.0 | X | X | |
| Foo.VisualStudio.Design.dll | 3.5 | X | ? | |
| Foo.Expression.Design.dll | 3.5 | X |
Silverlight 3のツールキットの設計時の機能の実装
MWD
でのSilverlight 3 Toolkitの設計プロジェクトMarch 2009リリースでは、上記のVisual Studio 2008とVisual Studio 2010だけでなく、Blend 3の両方をサポートするために前述のスキームに従った。
ダウンロード2009年3月リリースを 、ソースコードを解凍して、Visual Studio 2008のにSilverlight.Controls.Design.slnをロードする。 例として単純なControl.Input.Designのプロジェクトを使用します。
- VS9/Blend3のための設計プロジェクトでは、新しい4.0 MWDを参照する必要があります。 ここではブレンド3を検索し、Binariesディレクトリに2つのMWDのDLLをコピーするCopySystemWindows.batを呼び出すためのビルド前イベントを使用してください。
- CopySystemWindows.batファイルに若干の変更を注意してください:我々は、引用符で囲む必要がある"%THIS_DIR%\バイナリ\ Blend3"ソースコードがに解凍されているディレクトリへのパスに空白が含まれているケースを処理するために(黄色の線)。
あなたが壊れやすいCopySystemWindows.batファイルまたはビルドイベントを使用して好きではない場合は、以下に示すように新しいMWDが、ここでVisual Studioが見つけるのを助けるために参照パスを設定することができます。 唯一の注意点は、それは、x86とx64の両方のマシン上に構築するためには、%ProgramFiles%と%の両方PROGRAMFILES(x86)の%を指定する必要があることです。
。リファレンスパスの設定は、csproj.userファイルに永続化されます。
<プロジェクトのxmlns =" http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<ReferencePath> C:\ Program Files \ Microsoftの発現\ Blend 3のプレビュー\、C:\プログラムファイル(x86)\ Microsoftの発現\ Blend 3のプレビュー\ </ ReferencePath>
</のPropertyGroup>
</プロジェクト>
Metadata.cs
で説明されているように私は同じ実装の フレームワークを使用してSilverlightツールキットの設計時の機能の実装が若干の変更を加えて、:
- 私は同じ名前でControls.Design.Commonのフォルダからソリューションフォルダの下に、共有ファイルのExtensions.csとMetadataBase.csへのリンクを移動。
- 。。デザインでMetadata.csとExpression.Designプロジェクトは、新しいエントリポイント使用:ProvideMetadataアセンブリ属性を使用し、IProvideAttributeTableインタフェースを実装する。
- メソッドが対応する。VisualStudio.Designのプロジェクトで重複する必要があるAddAttributesでそのすべてを()に注意を追加。
。VisualStudio.DesignプロジェクトはまだMWD 3.5の古いIRegisterMetadataインターフェイスを使用しますが、:
- 。Controls.Designフォルダの下に対応するデザインプロジェクト内のすべての*のMetadata.csのファイルへのリンクです。
- AddAttributes()メソッドの重複に対応する。設計プロジェクトにおけるAddAttributesの内容()メソッド。
結論
MWDにおける重大な変更がいくつか不都合が生じるかもしれないが、それは、WPFと同様にSilverlightのリッチなデザインタイムエクスペリエンスとして実装する必要があります。 Visual Studio 2008で、Blend 2では、とブレンド3:この記事は、重大な変更に対応しており、既存のすべての設計者をサポートするための方法を説明します。 一度Visual Studio 2010には、私は新しい命名規則に関するブログ、およびVisual Studio 2010のツールキットの設計時の作業予定、公開されています。 お楽しみに!
2009年12月5日:VS2010ベータ2の更新
Visual Studioの2008/Blend2とMWDs(V3.5対。V4.0)の互換性のないバージョンを使用するVisual Studioの2010/Blend3、両方をサポートするの問題の上解決するには、デザイン時のアセンブリの命名規則はVS2010ベータ2から向上していますブレンド3:
ランタイムアセンブリFoo.dllのために、共有のデザイン時のアセンブリがFoo.Design *. dllの名前は、Visual Studioの特定のデザイン時のアセンブリは、Foo.VisualStudio.Design *. dllの名前が付けられ、ブレンド、特定のデザイン時のアセンブリはFooという名前です。Expression.Design *. *はゼロまたはそれ以上の有効な文字がファイル名には可能なDLL、。 デザイナーが(Visual Studioまたはブレンドのような)デザイン時のアセンブリをロードし、いくつかの命名規則に合うようにしようとすると、ゼロまたは1がロードされます。
- デザイン時のアセンブリによって参照されるMWDバージョンは設計者のMWDバージョンとは異なるメジャーバージョン番号を持っている場合、デザイン時のアセンブリがロードされ、バイパスされません。
- 複数のデザイン時のアセンブリは、設計者のMWDバージョンと互換性がある場合、デザイナーはより小さいか、デザイナーのMWDバージョンに等しい最高MWDのバージョンに対してコンパイルつをロードします。
Silverlight 3のSDK GDR 2 (また自動的にVS2010がインストールされている)と Silverlight 3のツールキット2009年10月リリースでは、 VS2008とVS2010の両方をサポートするために、新しい命名規則を使用してください。 例えばSystem.Windows.Controls.dllを取る、System.Windows.Controls.VisualStudio.Design.dllはMWD 3.5に対して構築され、古い命名規則を使用してVS2008で使用されて、新しいSystem.Windows.Controls.Toolkit。 MWD 4.0に対してビルドVisualStudio.Design.4.0.dllは、新しい命名規則を理解してVS2010用に追加されます。 参照してくださいSilverlightのデザインタイムアセンブリ詳細については、を。








最近のコメント