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ünün birleşimi olarak oluşturulabilir. Bu konu başlığında WPF uygulamalarının nasıl derlendiği açıklanır ve derleme işlemindeki temel adımlar açıklanır.
WPF Uygulaması Oluşturma
WPF uygulaması aşağıdaki yollarla derlenebilir:
Komut satırı. Uygulama yalnızca kod (XAML olmadan) ve bir uygulama tanım dosyası içermelidir. Daha fazla bilgi için bkz. csc.exe ile Komut Satırı Oluşturma veya Komut Satırından Derleme (Visual Basic).
Microsoft Build Engine (MSBuild). Kod ve XAML dosyalarına ek olarak, uygulamanın bir MSBuild proje dosyası içermesi gerekir. Daha fazla bilgi için bkz. "MSBuild".
Visual Studio. Visual Studio, MSBuild ile WPF uygulamalarını derleyen ve kullanıcı arabirimi oluşturmak için bir 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'da XAML tasarlama.
WPF Derleme İşlem Hattı
WPF projesi oluşturulduğunda, dile özgü ve WPF'ye özgü hedeflerin birleşimi çağrılır. Bu hedefleri yürütme işlemine derleme işlem hattı adı verilir ve temel adımlar aşağıdaki şekilde gösterilmiştir.
Derleme Öncesi Başlatmalar
Derlemeden önce, MSBuild aşağıdakiler de dahil olmak üzere önemli araçların ve kitaplıkların konumunu belirler:
The .NET Framework.
Windows SDK dizinleri.
WPF başvuru derlemelerinin konumu.
Derleme arama yollarının özelliği.
MSBuild'in derlemeler için arama yaptığı ilk konum başvuru derleme dizinidir (%ProgramFiles%\Reference Assemblies\Microsoft\Framework\v3.0\). Bu adım sırasında, derleme işlemi ayrıca çeşitli özellikleri ve öğe gruplarını başlatır ve gerekli temizleme çalışmalarını gerçekleştirir.
Başvuruları Çözümleme
Derleme işlemi, uygulama projesini derlemek için gereken derlemeleri bulur ve bağlar. Bu mantık görevde yer ResolveAssemblyReference
alır. Proje dosyasında olarak Reference
bildirilen tüm derlemeler, sistemde zaten yüklü olan derlemelerdeki arama yolları ve meta veriler hakkındaki bilgilerle birlikte göreve sağlanır. Görev derlemeleri arar ve yüklü derlemenin meta verilerini kullanarak çıkış bildirimlerinde görünmemesi gereken çekirdek WPF derlemelerini filtreler. Bu, ClickOnce bildirimlerinde yedekli bilgileri önlemek için yapılır. Örneğin PresentationFramework.dll, WPF için oluşturulmuş bir uygulamanın temsilcisi olarak kabul edilebildiğinden ve .NET Framework'ün yüklü olduğu her makinede tüm WPF derlemeleri aynı konumda bulunduğundan, bildirimlere tüm .NET Framework başvuru derlemeleriyle ilgili tüm bilgilerin eklenmesine gerek yoktur.
İşaretlemeyi Derleme—1'i Geç
Bu adımda, çalışma zamanının XML ayrıştırma ve özellik değerlerini doğrulamaya zaman harcamaması için XAML dosyaları ayrıştırılır ve derlenir. Derlenen XAML dosyası önceden belirteç haline getirildiğinden, çalışma zamanında yükleme işlemi XAML dosyasını yüklemekten çok daha hızlı olmalıdır.
Bu adım sırasında, derleme Page
öğesi olan her XAML dosyası için aşağıdaki etkinlikler gerçekleşir:
XAML dosyası, işaretleme derleyicisi tarafından ayrıştırılır.
Bu XAML için derlenmiş bir gösterim oluşturulur ve obj\Release klasörüne kopyalanır.
Yeni bir kısmi sınıfın CodeDOM gösterimi oluşturulur ve obj\Release klasörüne kopyalanır.
Ayrıca, her XAML dosyası için dile özgü bir kod dosyası oluşturulur. Örneğin, Visual Basic projesindeki bir Page1.xaml sayfası için page1.g.vb oluşturulur; C# projesindeki bir Page1.xaml sayfası için page1.g.cs oluşturulur. Dosya adındaki ".g" işareti, dosyanın biçimlendirme dosyasının üst düzey öğesi (veya Window
gibiPage
) için kısmi sınıf bildirimine sahip kod oluşturulduğunu gösterir. Sınıfı C# içinde değiştiriciExtends
(Visual Basic'te) ile partial
bildirilir ve sınıfın başka bir yerde, genellikle Page1.xaml.cs arka planındaki kod dosyasında başka bir bildirimi olduğunu belirtir.
Kısmi sınıf, uygun temel sınıftan (örneğin Page bir sayfa için) genişletir ve arabirimini System.Windows.Markup.IComponentConnector uygular. Arabirimin IComponentConnector bir bileşeni başlatma ve içeriğindeki öğelere ad ve olay bağlama yöntemleri vardır. Sonuç olarak, oluşturulan kod dosyasının aşağıdaki gibi bir yöntem uygulaması vardır:
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 MSBuild altyapısıyla aynı AppDomain şekilde çalışır. Bu, önemli performans kazançları sağlar. Bu davranış özelliğiyle AlwaysCompileMarkupFilesInSeparateDomain
değiştirilebilir. Bu, ayrı AppDomainöğesini kaldırarak tüm başvuru derlemelerini kaldırma avantajına sahiptir.
İşaretlemeyi Derleme—Geçiş 2
İşaretlemeyi derlemenin 1. geçişinde tüm XAML sayfaları derlenmez. Yerel olarak tanımlanmış tür başvuruları (aynı projenin başka bir yerindeki kodda tanımlanan türlere başvurular) sahip XAML dosyaları şu anda derlemeden muaftır. Bunun nedeni, yerel olarak tanımlanan türlerin yalnızca kaynakta mevcut olması ve henüz derlenmemiş olmasıdır. Bunu belirlemek için ayrıştırıcı, işaretleme dosyasındaki gibi x:Name
öğeleri aramayı içeren buluşsal yöntemler kullanır. Böyle bir örnek bulunduğunda, bu işaretleme dosyasının derlemesi kod dosyaları derlenene kadar ertelenmiş olur ve ardından ikinci işaretleme derlemesi bu dosyaları işler.
Dosya Sınıflandırma
Derleme işlemi, çıkış dosyalarını yerleştirilecekleri uygulama derlemesine göre farklı kaynak gruplarına yerleştirir. Tipik bir konumlanmamış uygulamada, olarak Resource
işaretlenen tüm veri dosyaları ana derlemeye (yürütülebilir dosya veya kitaplık) yerleştirilir. UICulture
Projede ayarlandığında, derlenmiş tüm XAML dosyaları ve özellikle dile özgü olarak işaretlenen kaynaklar uydu kaynak derlemesine yerleştirilir. Ayrıca, tüm dilden bağımsız kaynaklar ana derlemeye yerleştirilir. Derleme işleminin bu adımında bu belirleme yapılır.
ApplicationDefinition
Proje dosyasındaki , Page
ve Resource
derleme eylemleri meta veriler (kabul edilebilir değerler true
ve false
) ile Localizable
artırılabilir ve bu da dosyanın dile özgü mü yoksa dil nötr mü olduğunu belirler.
Çekirdek Derleme
Çekirdek derleme adımı kod dosyalarının derlenmesini içerir. Bu, Microsoft.CSharp.targets ve Microsoft.VisualBasic.targets dillerine özgü hedef dosyalarındaki mantık tarafından düzenlenmektedir. Buluşsal yöntemler, işaretleme derleyicisinin tek bir geçişinin yeterli olduğunu belirlediyse, ana derleme oluşturulur. Ancak, projedeki bir veya daha fazla XAML dosyasında yerel olarak tanımlanmış türlere başvurular varsa, işaretleme derlemesinin ikinci geçişi tamamlandıktan sonra son uygulama derlemelerinin oluşturulabilmesi için geçici bir .dll dosyası oluşturulur.
Bildirim Oluşturma
Derleme işleminin sonunda, tüm uygulama derlemeleri ve içerik dosyaları hazır olduktan sonra, uygulama için ClickOnce 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 ve dijital imza. Bu bildirim, dağıtımı işleyen yöneticiler tarafından yazılması amaçlanmıştır. Dosya uzantısı .xbap (XAML tarayıcı uygulamaları (XBAP)) ve yüklü uygulamalar için .application'dır. İlki proje özelliği tarafından HostInBrowser
dikte edilir ve sonuç olarak bildirim, uygulamayı tarayıcı tarafından barındırılan olarak tanımlar.
Uygulama bildirimi (bir .exe.manifest dosyası), uygulama derlemelerini ve bağımlı kitaplıkları açıklar ve uygulamanın gerektirdiği izinleri listeler. Bu dosyanın uygulama geliştiricisi tarafından yazılması amaçlanmıştır. Bir ClickOnce uygulamasını başlatmak için bir 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 proje dosyasında değeriyle true
belirtilmediği sürece GenerateManifests
oluşturulmaz.
XBAP'ler, tipik İnternet bölgesi uygulamalarına atanan bu izinler üzerinde ve üzerinde iki ek izin alır: WebBrowserPermission ve MediaPermission. WPF derleme sistemi, uygulama bildiriminde bu izinleri bildirir.
Artımlı Derleme Desteği
WPF derleme sistemi artımlı derlemeler için destek sağlar. İşaretleme 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ımlanmış türlere başvurular içeren XAML dosyalarını önbelleğe almak için $(AssemblyName)_MarkupCompiler.lref dosyası.
Artımlı derlemeyi yöneten bir kural kümesi aşağıdadır:
Dosya, derleme sisteminin değişikliği algıladığı en küçük birimdir. Bu nedenle, bir kod dosyası için derleme sistemi bir türün değiştirilip değiştirilmediğini veya kodun eklenip eklenmediğini belirleyemez. Aynı durum proje dosyaları için de geçerlidir.
Artımlı derleme mekanizması, bir XAML sayfasının bir sınıfı tanımladığı veya diğer sınıfları kullandığından uyumlu olmalıdır.
Girdiler değişirse
Reference
, tüm sayfaları yeniden derleyin.Bir kod dosyası değişirse, tüm sayfaları yerel olarak tanımlanmış tür başvuruları ile yeniden derleyin.
XAML dosyası değişirse:
XAML projede olarak
Page
bildirilirse: XAML'nin yerel olarak tanımlanmış tür başvuruları yoksa, XAML'nin yanı sıra yerel başvurulara sahip tüm XAML sayfalarını yeniden derleyin; XAML'de yerel başvurular varsa, tüm XAML sayfalarını yerel başvurularla yeniden derleyin.XAML projede olarak
ApplicationDefinition
bildirilirse: tüm XAML sayfalarını yeniden derleyin (neden: her XAML'nin değişmiş olabilecek bir Application türe başvurusu vardır).
Proje dosyası bir kod dosyasını XAML dosyası yerine uygulama tanımı olarak bildirirse:
Proje dosyasındaki değerin
ApplicationClassName
değişip değişmediğini denetleyin (yeni bir uygulama türü var mı?). Öyleyse, uygulamanın tamamını yeniden derleyin.Aksi takdirde, tüm XAML sayfalarını yerel başvurularla yeniden derle.
Proje dosyası değişirse: Önceki tüm kuralları uygulayın ve yeniden derlenmesi gerekenleri görün. Aşağıdaki özelliklerde yapılan değişiklikler tam bir yeniden derlemeyi tetikler:
AssemblyName
,IntermediateOutputPath
,RootNamespace
veHostInBrowser
.
Aşağıdaki yeniden derleme senaryoları mümkündür:
Uygulamanın tamamı yeniden derlenmiştir.
Yalnızca yerel olarak tanımlanmış tür başvuruları olan XAML dosyaları yeniden derlenir.
Hiçbir şey yeniden derlenmez (projedeki hiçbir şey değişmediyse).
Ayrıca bkz.
.NET Desktop feedback