コンパイルに関して、XAML ファイルのライフサイクルを説明していただけますか?
Silverlight プロジェクトをビルドすると、ビルド プロセスで XAML ファイルはどうなりますか?
コンパイルに関して、XAML ファイルのライフサイクルを説明していただけますか?
Silverlight プロジェクトをビルドすると、ビルド プロセスで XAML ファイルはどうなりますか?
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 コントロール/ダイアログ用に生成されたデザイナー ファイルに少し似ていますが、デザイン時ではなくコンパイル時に発生します。
"/SilverlightApp1;component/MainPage.xaml"
) 。Jon Skeet (現在は削除されています) へのコメントへの回答として、次の質問は部分的に正しいです。
XAML ドキュメント全体 (すべての要素、属性など) を解析することは、WPF または SL ビルドの一部ではありませんか? 私は正しいですか?
上記の解析とは別に、検証と名前付き要素の残りの解析 (要素ツリーやテンプレートなど) は、XAML を効果的に逆シリアル化し、作成した要素のビジュアル ツリーを作成するときに実際に実行時に行われます。LoadComponent()
Silverlight プロジェクトをビルドすると、.xap ファイルが作成されます。これは基本的に、別の拡張子を持つ単なる .zip ファイルであり、AppManifest.XAML とプロジェクトが DLL ファイルに含まれています (他の依存関係の DLL:s と共に)。
dotPeek または Reflector を介して DLL を実行すると、作成した XAML ファイルが dll のリソース内に無傷であることがわかります。