Metro スタイルアプリを作成するために使用される新しいWindows 8ランタイムを一周しようとしています。 XAML で使用できることはわかっています。C#とVB.NETを使用してアプリを作成できるように.NETに基づいていますが、HTMLと関係があるようです。 CSS、DOM、およびJavaScript。
.NET UIプログラマーが理解できる用語で、誰かがそれを数段落で説明できますか? (それを理解するために必要な「キー」がありません。)
WPF、 Silverlight 、 Windows Forms などは、少なくともIntelシステムではWindows 8(およびWindows 10)で動作し続けることを知っています。教えて...
最下位レベルでは、WinRTはABIレベルで定義されたオブジェクトモデルです。 COMをベースとして使用し(したがって、すべてのWinRTオブジェクトはIUnknown
を実装し、参照カウントを行います)、そこからビルドします。古いCOMに比べて、かなり多くの新しい概念を追加します。そのほとんどは.NETから直接提供されます。たとえば、WinRTオブジェクトモデルにはデリゲートがあり、イベントは.NETスタイルで行われます(デリゲートとサブスクライバの追加/削除メソッド、イベントごとに1つ)ではなく、イベントのソースとシンクの古いCOMモデルではありません。他の注目すべき点のうち、WinRTにはパラメータ化された(「汎用」)インターフェイスもあります。
もう1つの大きな変更点は、すべてのWinRTコンポーネントに、.NETアセンブリと同様に利用可能なメタデータがあることです。 COMでは、typelibを使用すると多少の問題が発生しますが、すべてのCOMコンポーネントがtypelibを使用するわけではありません。 WinRTの場合、メタデータは.winmdファイルに含まれています-Developer Previewの「C:\ Program Files(x86)\ Windows Kits\8.0\Windows Metadata \」の内部を見てください。いろいろと調べてみると、それらは実際にはコードのないCLIアセンブリであり、単なるメタデータテーブルであることがわかります。実際、ILDASMで開くことができます。これは、WinRT自体が管理されていることを意味するものではなく、単にファイル形式を再利用するだけです。
次に、そのオブジェクトモデルの観点から実装された多くのライブラリがあります-WinRTインターフェイスとクラスを定義します。繰り返しますが、上記の「Windowsメタデータ」フォルダーを見て、そこに何があるかを確認してください。または、VSでオブジェクトブラウザを起動し、フレームワークセレクタで[Windows 8.0]を選択して、対象を確認します。たくさんあり、UIだけを扱っているわけではありません-Windows.Data.Json
、_Windows.Graphics.Printing
、_Windows.Networking.Sockets
などの名前空間も取得します。
次に、特にUIを処理するいくつかのライブラリを取得します。ほとんどの場合、これらはWindows.UI
またはWindows.UI.Xaml
の下のさまざまな名前空間になります。それらの多くは、WPF/Silverlight名前空間に非常によく似ています。 Windows.UI.Xaml.Controls
はSystem.Windows.Controls
とほぼ一致しています。 Windows.UI.Xaml.Documents
なども同様.
現在、.NETには、WinRTコンポーネントを.NETアセンブリであるかのように直接参照する機能があります。これは、COM相互運用とは異なります。相互運用アセンブリなどの中間成果物は必要ありません。/r
.winmdファイルだけで、メタデータ内のすべてのタイプとそのメンバーが、あたかも見えるように表示されます。 NETオブジェクト。 WinRTライブラリ自体は完全にネイティブであることに注意してください(したがって、WinRTを使用するネイティブC++プログラムはCLRをまったく必要としません)-管理対象としてすべてのものを公開する魔法はCLR自体の中にあり、かなり低レベルです。 .winmdを参照する.NETプログラムをildasmする場合、実際には外部アセンブリ参照のように見えることがわかります。型の埋め込みなどの巧妙な手品はありません。
それはまた、鈍的マッピングではありません-CLRは、可能な場合、WinRTタイプを同等のものに適合させようとします。例えばGUID、日付、URIはそれぞれSystem.Guid
、System.DateTime
、System.Uri
になります。 IIterable<T>
やIVector<T>
などのWinRTコレクションインターフェイスは、IEnumerable<T>
およびIList<T>
になります。等々。これは両方の方法で行われます。IEnumerable<T>
を実装する.NETオブジェクトがあり、それをWinRTに渡す場合、IIterable<T>
として表示されます。
最終的に、これが意味するのは、.NET Metroアプリが既存の標準.NETライブラリのサブセット、および(ネイティブ)WinRTライブラリにアクセスできることです。その一部は、特にWindows.UI
-Silverlightと非常によく似ています、APIごと。 UIを定義するXAMLがあり、データバインディング、リソース、スタイル、テンプレートなど、Silverlightと同じ基本概念を扱います。多くの場合、using
という新しい名前空間によって、Silverlightアプリを簡単に移植できます。 、およびAPIが調整されたコード内のいくつかの場所を調整します。
WinRT自体はHTMLやCSSとは何の関係もありません。また、.NETで行われる方法と同様に、そこにも公開されているという意味でのみJavaScriptとの関係があります。 .NET MetroアプリでWinRT UIライブラリを使用する場合、HTML/CSS/JSを処理する必要はありません(まあ、本当に必要なら、WebView
コントロールをホストできます...)。すべての.NETおよびSilverlightスキルは、このプログラミングモデルに非常に関連しています。
Build 基調講演から:
彼らはHTML/CSS/JavaScriptアプリとC#/ XAMLアプリの両方に共通のAPIを提供しています。 C#とXAMLが使用されますが、WPFまたはSilverlightではありません。
重要なアイデアは、デスクトップとメトロという2つの開発トラックがあることです。
重要なポイント:
アーキテクチャの変更されたバージョンがあり、正確にどこにあるのかを確実に理解するのに役立ちます。 Telerikの忍者の1人が CLR チームとチャットし、写真を修正しました:
ここで、CLRの位置を確認できます。 .NETフレームワークには2つのプロファイルがあります
1- .NET Metroプロファイル(Metroアプリケーションを処理するCLR)
2- .NETクライアントプロファイル(C#およびVB.NETアプリケーションのCLRランタイム)
これにより、より明確な画像が得られることを願っています。の記事全体を読んでください。。
Microsoftからの多くの詳細 こちら 。
Windowsランタイムは、APIメタデータ(.winmdファイル)を使用して公開されます。これは、.NETフレームワーク(Ecma-335)で使用されるのと同じ形式です。基礎となるバイナリコントラクトにより、選択した開発言語でWindowsランタイムAPIに直接簡単にアクセスできます。 WindowsランタイムAPIの形状と構造は、C#などの静的言語とJavaScriptなどの動的言語の両方で理解できます。 IntelliSenseは、JavaScript、C#、Visual Basic、およびC++で使用できます。
つまり、Windowsランタイムは、Windowsの機能を公開する新しいライブラリセットであり、JavaScript/C#/ VB/C++で利用できます。各言語は、サンキングレイヤーを経由するのではなく、理解して直接呼び出すことができるようになっています。
SilverlightとWPFは、CLRで実行されるXAMLのフレーバーです。他の機能の中でも、Windowsランタイムは、Silverlightに非常によく似たバージョンのXAMLを公開しますが、CLR経由ではなく、ネイティブな方法で公開します。 CLRからアクセスできますが、C++からもアクセスできます。