Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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. Komut Satırı ile csc.exeKurulumu veya Komut Satırından Kurulum (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 VisualStudio'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 Hazırlıklar
MSBuild, derlemeden önce, aşağıdakiler de dahil olmak üzere önemli araçların ve kütüphanelerin 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.
Referansları Çözümleme
Derleme işlemi, uygulama projesini derlemek için gereken derlemeleri bulur ve bağlar. Bu mantık ResolveAssemblyReference
görevindedir. 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 üzerinde ve WPF için oluşturulmuş bir uygulamanın temsilcisi olarak kabul edilebildiğinden ve tüm WPF derlemeleri .NET Framework'ün yüklü olduğu her makinede aynı konumda bulunduğundan, bildirimlere tüm .NET Framework başvuru derlemeleriyle ilgili tüm bilgilerin eklenmesine gerek yoktur.
İşaretleme Derleme—Birinci Geçiş
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, bir Visual Basic projesindeki Page1.xaml sayfası için bir Page1.g.vb oluşturulur; C# projesindeki bir Page1.xaml sayfası için bir Page1.g.cs oluşturulur. Dosya adındaki ".g" işareti, dosyanın biçimlendirme dosyasının üst düzey öğesi (veya Page
gibiWindow
) için kısmi sınıf bildirimine sahip kod oluşturulduğunu gösterir. Sınıf, C# dilinde partial
değiştiricisi (Visual Basic'te Extends
) ile bildirilir; bu da sınıfın başka bir yerde, genellikle kodun arka planındaki Page1.xaml.cs 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. Arabirim IComponentConnector, bir bileşeni başlatmak ve içeriğindeki öğelere adları ile olayları bağlamak için yöntemler içerir. 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. Özelliğiyle AlwaysCompileMarkupFilesInSeparateDomain
bu davranış değiştirilebilir. Bu, ayrı AppDomain bileşenini boşaltarak tüm referans derlemelerini boşaltma avantajına sahiptir.
İşaretleme Derlemesi—Geçiş 2
İşaretleme derlemesinin ilk 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 x:Name
gibi öğeleri aramak için 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 Localizable
ve true
) ile false
artırılabilir ve bu da dosyanın dile özgü mü yoksa dil nötr mü olduğunu belirler.
Ana 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.
Manifesto 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 (.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 GenerateManifests
belirtilmediği sürece true
oluşturulmaz.
XBAP'ler, tipik İnternet bölgesi uygulamalarına atanan izinlere ek olarak iki izin daha 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 dili veya kodda yapılan değişiklikleri algılama konusunda oldukça akıllıdır ve yalnızca değişiklikten etkilenen unsurları 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ığının veya diğer sınıfları kullandığının farkında olmalıdır.
Reference
girdileri değişirse, 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 proje içerisinde
ApplicationDefinition
olarak tanımlanırsa: tüm XAML sayfalarını yeniden derleyin (neden: her XAML sayfası değişmiş olabilecek bir Application türüne referans içerebilir).
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 bakınız
- WPF Uygulaması Dağıtma
- WPF MSBuild Kaynak
- WPF'te Paket URI'leri
- WPF Uygulama Kaynağı, İçeriği ve Veri Dosyaları
.NET Desktop feedback