WPF Uygulaması Derleme

Windows Presentation Foundation (WPF) uygulamaları, .NET Framework yürütülebilir dosyalar (.exe), kitaplıklar (.dll) veya her iki derleme türü birleşimi olarak oluşturabilir. Bu konu başlığında WPF uygulamalarının nasıl derlemesi anlatılacak ve derleme işlemiyle ilgili önemli adımlar anlatılacaktır.

WPF Uygulaması Oluşturma

WPF uygulaması aşağıdaki yollarla derlenmiş olabilir:

  • Komut satırı. Uygulama yalnızca kod (XAML değil) ve uygulama tanım dosyası içermeli. Daha fazla bilgi için bkz. Komut Satırı Ile csc.exeVeya Komut Satırından (Visual Basic) .

  • Microsoft Build Engine (MSBuild). Koda ve XAML dosyalarına ek olarak, uygulamanın bir MSBuild dosyası içermesi gerekir. Daha fazla bilgi için bkz. "MSBuild".

  • Visual Studio. Visual Studio, WPF uygulamalarını kullanıcı arabirimi oluşturmaya MSBuild görsel tasarımcı içeren tümleşik bir geliştirme ortamıdır. Daha fazla bilgi için bkz. Visual Studio kullanarak kod yazma ve yönetme ve Visual Studio.

WPF Derleme İşlem Hattı

BIR WPF projesi yerleşik olduğunda dile özgü ve WPF'ye özgü hedeflerin birleşimi çağrılır. Bu hedefleri yürütme işlemi derleme işlem hattı olarak anılan ve önemli adımlar aşağıdaki şekilde gösterildiği gibi.

WPF derleme işlemi

Derleme Öncesi Başlatmalar

MSBuild, aşağıdakiler de dahil olmak üzere önemli araçların ve kitaplıkların konumunu belirler:

  • Aşağıdaki .NET Framework.

  • Windows SDK dizinleri.

  • WPF başvuru derlemelerinin konumu.

  • Derleme arama yollarının özelliği.

Derlemeleri aramanın MSBuild konumu, başvuru derleme dizinidir (%ProgramFiles%\Reference Assemblys\Microsoft\Framework\v3.0 \ ). Bu adım sırasında derleme işlemi çeşitli özellikleri ve öğe gruplarını da başlatarak gerekli temizleme işlemlerini gerçekleştirir.

Başvuruları Çözümleme

Derleme işlemi, uygulama projesini derlemek için gereken derlemeleri bulup bağlar. Bu mantık, görev içinde yer alan bir ResolveAssemblyReference mantıktır. Proje dosyasında olarak bildirilen tüm derlemeler, sisteme zaten yüklenmiş derlemelerde arama yolları ve meta veriler hakkında bilgilerle Reference birlikte göreve sağlanır. Görev, derlemeleri alar ve çıkış bildirimlerinde gösternm gereken çekirdek WPF derlemelerini filtrelemek için yüklü derlemenin meta verilerini kullanır. Bu, bildirimlerde gereksiz bilgilerin ClickOnce yapılır. Örneğin, PresentationFramework.dll, WPF için ve üzerinde yerleşik bir uygulamanın temsili olarak kabul edilir ve tüm WPF derlemeleri .NET Framework yüklü olan her makinede aynı konumda mevcut olduğu için, bildirimlerde tüm .NET Framework başvuru derlemelerine tüm bilgileri dahil etmek zorunda değildir.

İşaretleme Derlemesi—1 Geçişi

Bu adımda, çalışma zamanı XML ayrıştırma ve özellik değerlerini doğrulama zaman harcamaz, böylece dosyalar XAML ayrıştırıldı ve derlenmiş. Derlenmiş dosya, çalışma zamanında yüklemenin bir dosyayı yüklemeye göre çok daha hızlı olması için önceden XAML XAML belirteçleştirilmiştir.

Bu adım sırasında, derleme öğesi olan her XAML dosya için aşağıdaki etkinlikler Page uzer:

  1. Dosya, XAML işaretleme derleyicisi tarafından ayrıştırıldı.

  2. Bunun için derlenmiş bir gösterim XAML oluşturulur ve obj\Release klasörüne kopyalanır.

  3. Yeni bir kısmi sınıfın CodeDOM gösterimi oluşturulur ve obj\Release klasörüne kopyalanır.

Ayrıca, her dosya için dile özgü bir kod dosyası XAML oluşturulur. Örneğin, Visual Basic projesinde Page1.xaml sayfası için bir Page1.vb oluşturulur; C# projesinde Page1.xaml sayfası için page1.g.cs oluşturulur. Dosya adı içinde ".g", dosyanın biçimlendirme dosyasının üst düzey öğesi için kısmi bir sınıf bildirimine sahip kod (veya gibi) olduğunu Page Window belirtir. sınıfı, genellikle partial Page1.xaml.cs arka kod dosyasında başka bir yerde sınıf için başka bir bildirim olduğunu belirtmek için C# (Visual Basic Extends içinde) değiştiricisi ile bildirildi.

Kısmi sınıf uygun temel sınıftan (örneğin, Page bir sayfa için) genişletildi ve System.Windows.Markup.IComponentConnector arabirimini uygulayıyor. IComponentConnectorArabirimin, bir bileşeni başlatma ve içeriğinde öğelerde ad ve olay bağlama yöntemleri vardır. Sonuç olarak, oluşturulan kod dosyası aşağıdaki gibi bir yöntem uygulamasına sahip olur:

public void InitializeComponent() {
    if (_contentLoaded) {
        return;
    }
    _contentLoaded = true;
    System.Uri resourceLocater =
        new System.Uri(
            "window1.xaml",
            System.UriKind.RelativeOrAbsolute);
    System.Windows.Application.LoadComponent(this, resourceLocater);
}
Public Sub InitializeComponent() _

    If _contentLoaded Then
        Return
    End If

    _contentLoaded = True
    Dim resourceLocater As System.Uri = _
        New System.Uri("mainwindow.xaml", System.UriKind.Relative)

    System.Windows.Application.LoadComponent(Me, resourceLocater)

End Sub

Varsayılan olarak, işaretleme derlemesi, veri AppDomain altyapısıyla MSBuild çalışır. Bu, önemli performans artışları sağlar. Bu davranış özelliğiyle 2.500'e 500000000000000000000 AlwaysCompileMarkupFilesInSeparateDomain Bu, ayrı ' i kaldırarak tüm başvuru derlemelerini kaldırma avantajına sahip AppDomain olur.

İşaretleme Derlemesi—2'yi Geçme

İşaretleme XAML derlemesi 1 geçişi sırasında tüm sayfalar üzerinde derlanmaz. XAML yerel olarak tanımlanmış tür başvuruları (aynı projenin başka bir yerinde kodda tanımlanan türlere başvurular) olan dosyalar şu anda derlemeden muaf tutulmaktadır. Bunun nedeni, yerel olarak tanımlanan türlerin yalnızca kaynakta mevcut olması ve henüz derlenmiş olmasıdır. Bunu belirlemek için ayrıştırıcı, işaretleme dosyasındaki gibi öğeleri aramayı içeren heuristics x:Name kullanır. Böyle bir örnek bulunamazsa, işaretleme dosyasının derlemesi kod dosyaları derlenmesine kadar ertelenr ve ardından ikinci işaretleme derlemesi bu dosyaları işlemeye devam ediyor.

Dosya Sınıflandırma

Derleme işlemi, çıkış dosyalarını hangi uygulama derlemesine yerleştirileceklerine bağlı olarak farklı kaynak gruplarına koyar. Tipik bir yerelleştirilmiş olmayan uygulamada, olarak işaretlenen tüm veri Resource dosyaları ana derlemeye (yürütülebilir veya kitaplık) yerleştirilir. Projede ne zaman ayarlanırsa, derlenen tüm dosyalar ve özellikle dile özgü olarak işaretlenmiş UICulture bu kaynaklar uydu kaynak XAML derlemesine yerleştirilir. Ayrıca, tüm dilden bağımsız kaynaklar ana derlemeye yerleştirilir. Derleme işleminin bu adımlarında bu belirleme yapılır.

Proje dosyasındaki , ve derleme eylemleri, dosyanın dile özgü veya dilden bağımsız olduğunu dikte eden meta verilerle (kabul edilebilir değerler ve ) ApplicationDefinition Page Resource Localizable true false değiştirilebilir.

Çekirdek Derleme

Temel derleme adımı, kod dosyalarının derlemesini içerir. Bu, dile özgü hedef dosyalarında Microsoft.CSharp.targets ve Microsoft.VisualBasic.targets mantığıyla organize olur. Elde edilenler işaretleme derleyicisi için tek bir geçişin yeterli olduğunu belirlediyse, ana derleme oluşturulur. Ancak, projedeki bir veya daha fazla dosyanın yerel olarak tanımlanmış türlere başvuruları varsa, işaretleme derlemesi ikinci geçiş tamamlandıktan sonra son uygulama derlemeleri oluşturulacak şekilde geçici bir .dll dosyası XAML oluşturulur.

Bildirim Oluşturma

Derleme işleminin sonunda, tüm uygulama derlemeleri ve içerik dosyaları hazır olduktan sonra, ClickOnce derleme bildirimleri oluşturulur.

Dağıtım bildirim dosyası dağıtım modelini açıklar: geçerli sürüm, güncelleştirme davranışı ve yayımcı kimliği ile dijital imza. Bu bildirim, dağıtımı ele alan yöneticiler tarafından kullanılmak üzere tasarlanmıştır. Dosya uzantısı .xbap (XAML tarayıcı uygulamaları (XBAPs) için) ve yüklü uygulamalar için .application'dır. İlki proje özelliği tarafından dikte edildi ve sonuç olarak HostInBrowser bildirim uygulamayı tarayıcıda barındırılan olarak tanımlar.

Uygulama bildirimi (.exe.manifest dosyası), uygulama derlemelerini ve bağımlı kitaplıkları açıklar ve uygulama için gereken izinleri listeler. Bu dosyanın uygulama geliştiricisi tarafından yazması amaçlandı. Bir uygulamanın ClickOnce için, kullanıcı uygulamanın dağıtım bildirim dosyasını açar.

Bu bildirim dosyaları her zaman XBAP'ler için oluşturulur. Yüklü uygulamalar için, özelliği değerine sahip GenerateManifests proje dosyasında belirtilmediyse oluşturulmaz. true

XBAP'ler, tipik İnternet bölgesi uygulamalarına atanan bu izinler üzerinde ve üzerinde iki ek izine sahip WebBrowserPermission olur: ve MediaPermission . WPF derleme sistemi bu izinleri uygulama bildiriminde bildirmektedir.

Artımlı Derleme Desteği

WPF derleme sistemi artımlı derlemeler için destek sağlar. Biçimlendirme veya kodda yapılan değişiklikleri algılama konusunda oldukça akıllıdır ve yalnızca değişiklikten etkilenen yapıtları derler. Artımlı derleme mekanizması aşağıdaki dosyaları kullanır:

  • Geçerli derleyici durumunu korumak için $(AssemblyName)_MarkupCompiler.Cache dosyası.

  • Yerel olarak tanımlanan türlere başvurular içeren dosyaları önbelleğe alan $( AssemblyName )_MarkupCompiler.lref XAML dosyası.

Aşağıda, artımlı derlemeyi yöneten bir kural kümesi ve bir dizi kural ve liste ve ardından yer alan kurallar ve bu kurallara yer veılmıştır:

  • Dosya, derleme sisteminin değişiklik algılayan en küçük birimidir. Bu nedenle, bir kod dosyası için derleme sistemi bir türün değiştirdiğini veya kodun ekli olup olduğunu öğrenemz. Proje dosyaları için de aynı durum geçerli olur.

  • Artımlı derleme mekanizması, bir sayfanın bir sınıfı XAML tanımladığına veya diğer sınıfları kullandığına göre iyi bir seçenektir.

  • Girişler Reference değişirse tüm sayfaları yeniden derleme.

  • Bir kod dosyası değişirse, yerel olarak tanımlanmış tür başvurularını içeren tüm sayfaları yeniden derleme.

  • Bir dosya XAML değişirse:

    • projesinde olarak bildirilse: yerel olarak tanımlanmış tür başvuruları yoksa, bunu ve yerel başvurulara sahip tüm sayfaları yeniden XAML Page XAML XAML XAML derlemek; XAML yerel başvuruları varsa, tüm sayfaları yerel başvurularla yeniden XAML derleme.

    • projesinde XAML olarak ApplicationDefinition bildirilse: tüm sayfaları yeniden derleme (neden: her biri değişmiş olabilir XAML bir XAML Application türe başvuru içerir).

  • Proje dosyası bir kod dosyasını dosya yerine uygulama tanımı olarak XAML bildirse:

    • Proje ApplicationClassName dosyasındaki değerin değiştirip değişmediğini (yeni bir uygulama türü var mı?) kontrol edin. Öyleyse, uygulamanın tamamını yeniden derleme.

    • Aksi takdirde, tüm sayfaları XAML yerel başvurularla yeniden derleme.

  • Bir proje dosyası değişirse: önceki tüm kuralları uygulama ve yeniden derlemek için gerekenleri görme. Aşağıdaki özelliklerde yapılan değişiklikler tam bir yeniden derlemeyi tetikler: AssemblyName , IntermediateOutputPath , ve RootNamespace HostInBrowser .

Aşağıdaki yeniden derleme senaryoları mümkündür:

  • Uygulamanın tamamı yeniden derlemeye alındı.

  • Yalnızca XAML yerel olarak tanımlanmış tür başvuruları olan dosyalar yeniden derlemek için kullanılır.

  • Hiçbir şey yeniden derlemez (projede hiçbir şey değişmemişse).

Ayrıca bkz.