4

コンパイルに関して、XAML ファイルのライフサイクルを説明していただけますか?

Silverlight プロジェクトをビルドすると、ビルド プロセスで XAML ファイルはどうなりますか?

4

2 に答える 2

3

Jon Skeet による中間 .g.cs ファイルに関する回答 (現在は削除されていますが、その部分はコンテキストのために以下に引用されています) は部分的に正しいものでしたが、実際の質問には完全には回答していませんでした:

JS: ビルド プロセスの初期段階で、部分クラスを含む obj ディレクトリに Foo.igcs ファイルが作成され、独自の .cs ファイルと共に通常の方法でコンパイルされます。

.g.cs ファイルには、実行中に名前付き要素をクラス メンバーに接続するために必要なコード ビハインドから欠落している部分が含まれていますInitialiseComponent()。たとえば、これは基本的な MainPage.g.cs からのものです。

public void InitializeComponent() {
    ...
    System.Windows.Application.LoadComponent(this, new System.Uri("/SilverlightApp1;component/MainPage.xaml", System.UriKind.Relative));
    this.LayoutRoot = ((System.Windows.Controls.Grid)(this.FindName("LayoutRoot")));
}

これは、WinForms コントロール/ダイアログ用に生成されたデザイナー ファイルに少し似ていますが、デザイン時ではなくコンパイル時に発生します。

  • コンパイラは解析して XAML を検証し、どの名前付き要素を (部分クラスに) 生成する必要があるかを判断します。
  • XAML ファイル自体は、ビルド中にリソースとして DLL に保存されます (上記の例では、 として保存されます"/SilverlightApp1;component/MainPage.xaml") 。
  • 注: WPF の場合のみ、埋め込まれた XAML ファイルは実際には、BAML ファイルと呼ばれるメモリ効率の高いバイナリ バージョンに変換されます。

Jon Skeet (現在は削除されています) へのコメントへの回答として、次の質問は部分的に正しいです。

XAML ドキュメント全体 (すべての要素、属性など) を解析することは、WPF または SL ビルドの一部ではありませんか? 私は正しいですか?

上記の解析とは別に、検証と名前付き要素の残りの解析 (要素ツリーやテンプレートなど) は、XAML を効果的に逆シリアル化し、作成した要素のビジュアル ツリーを作成するときに実際に実行時に行われます。LoadComponent()

于 2012-06-10T18:52:03.503 に答える
0

Silverlight プロジェクトをビルドすると、.xap ファイルが作成されます。これは基本的に、別の拡張子を持つ単なる .zip ファイルであり、AppManifest.XAML とプロジェクトが DLL ファイルに含まれています (他の依存関係の DLL:s と共に)。

dotPeek または Reflector を介して DLL を実行すると、作成した XAML ファイルが dll のリソース内に無傷であることがわかります。

于 2012-06-10T18:39:29.093 に答える