Makale Özeti

Merhaba arkadaşlar, bu makalemizde Silverlight 3 Beta ile birlikte gelen Assembly Caching (Önbellekleme) özelliğini inceliyor olacağız

Makale

Silverlight 2.0 ile birlikte Silverlight uygulamaları XAP dosyalarında dağıtılmaya başlamıştı. XAP dosyalarının (aslında ZIP dosyası) içerisinde Silverlight uygulamamızda kullandığımız assemly(DLL) ’ler yer alıyordu ve bu yüzden XAP dosyalarının boyutu da büyüyordu. Silverlight 3 Beta ile birlikte Assembly Caching özelliği geldi ve Silverlight uygulamalarına Referans edilen assembly dosyaları XAP dosyası içinde değil de kullanıcının makinesine internet üzerinden(microsoft.com’dan) indirilip kullanılıyor. XAP dosyasının içinde assembly’ler yer almayacağı için XAP dosyasının da boyutu da küçülüyor. Bunun dezavantajı da var, eğer o anda internet bağlantımız yoksa Silverlight uygulamamız çalışmayacaktır

Yeni bir Silverlight uygulaması oluşturalım ve projemizi derleyip oluşan XAP dosyasını inceleyelim. (XAP dosyasını Win Zip ya da Win Rar ile açabiliriz)

Resim 1

ZAP dosyamız 290 KB görünüyor. Şimdi XAP dosyasının içindeki dosyalara bakalım.

Resim 2

Projemize referans olarak eklediğimiz Assembly(DLL)’ler XAP dosyası içerisinde yer alıyor. Boyut olarak da bir hayli büyümüş ve daha da büyüyebilir. Son olarak XAP içerisinde yer alan AppManifest.XAML dosyasını açalım ve inceleyelim.

<Deployment xmlns=http://schemas.microsoft.com/client/2007/deployment
xmlns
:x=http://schemas.microsoft.com/winfx/2006/xaml
EntryPointAssembly
="SL30AssemblyCaching" EntryPointType="SL30AssemblyCaching.App"
RuntimeVersion
="3.0.40307.0">
<Deployment.Parts>
    // Referans gösterdiğimiz Assembly’ler…
<AssemblyPart x:Name="SL30AssemblyCaching" Source="SL30AssemblyCaching.dll" />
<AssemblyPart x:Name="System.ComponentModel.DataAnnotations" Source="System.ComponentModel.DataAnnotations.dll" />
<AssemblyPart x:Name="System.ComponentModel" Source="System.ComponentModel.dll" />
<AssemblyPart x:Name="System.Data.Services.Client" Source="System.Data.Services.Client.dll" />
<AssemblyPart x:Name="System.Json" Source="System.Json.dll" />
<AssemblyPart x:Name="System.Windows.Ria" Source="System.Windows.Ria.dll" />
<AssemblyPart x:Name="System.Xml.Linq" Source="System.Xml.Linq.dll" />
</Deployment.Parts>
</
Deployment>

Silverlight 3 Beta ile gelen Assembly Caching özelliğini kullanalım. Bu özelliği kullanabilmemiz için Silverlight uygulaması üzerinde sağ tıklayarak properties’i açalım. Açılan pencerede “Reduce Xap size by caching framework assamblies” seçeneğini seçelim. (Default olarak seçili gelmiyor)

Resim 3

Şimdi projemizi tekrar derleyelim ve XAP dosyasını tekrar inceleyelim.

Resim 4

Dosya boyutu 63 KB’a düşmüş, XAP Dosyasını açalım ve içindeki dosyalara bakalım.

Resim 5

Son olarak XAP içindeki AppManifest.XAML dosyasına da açıp bakalım, içeriğinin değiştiğini göreceğiz.

<Deployment xmlns=http://schemas.microsoft.com/client/2007/deployment
xmlns
:x=http://schemas.microsoft.com/winfx/2006/xaml
EntryPointAssembly
="SL30AssemblyCaching" EntryPointType="SL30AssemblyCaching.App"
RuntimeVersion
="3.0.40307.0">
<Deployment.Parts>
<AssemblyPart x:Name="SL30AssemblyCaching" Source="SL30AssemblyCaching.dll" />
<AssemblyPart x:Name="System.Windows.Ria" Source="System.Windows.Ria.dll" />
</Deployment.Parts>
<Deployment.ExternalParts>
// Referans gösterdiğimiz assembly’ler uygulama browser da çalıştığı anda indirilecek.
<ExtensionPart Source="http://go.microsoft.com/fwlink/?LinkID=142565" />
<ExtensionPart Source="http://go.microsoft.com/fwlink/?LinkID=141727" />
<ExtensionPart Source="http://go.microsoft.com/fwlink/?LinkId=142566" />
<ExtensionPart Source="http://go.microsoft.com/fwlink/?LinkId=142567" />
<ExtensionPart Source="http://go.microsoft.com/fwlink/?LinkId=142576" />
</Deployment.ExternalParts>
</
Deployment>

XAP içinde yer alan assembly’ler artık burada yer almıyor. Assembly yerine indirileceği linkler yer alıyor. Silverlight uygulaması browser da çalıştığında Silverlight uygulaması bu linkleri kullanılarak ilgili assembly dosyalarını kullanıcının makinesine microsoft.com’dan indirecek.

Silverlight uygulması derlenirken bu linkleri C:\program files\microsoft sdks\silverlight\v3.0\libraries\client klasöründeki *.extmap.xml dosyalarından alıyor. Eğer burada ilgili dosya yoksa XAP içerisine assembly'nin kendisini atıyor.

<?xml version="1.0"?>
<
manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<
assembly>
<
name>System.Windows.Controls.Data.DataForm</name>
<
version>2.0.5.0</version>
<
publickeytoken>31bf3856ad364e35</publickeytoken>
<
relpath>System.Windows.Controls.Data.DataForm.dll</relpath>
<
extension downloadUri="http://go.microsoft.com/fwlink/?LinkID=142573" />
</
assembly>
</
manifest>

Bu makalenin de sonuna geldik başka bir makale de görüşmek üzere. Silverlight ile kalın ;)

Sem GÖKSU
www.semgoksu.com  | www.yazilimgunlugu.com 
sem.goksu@yazilimgunlugu.com 

Kaynaklar
msdn.com
silverlight.net