۱۳۸۹/۰۵/۲۴

نحوه‌ي فعال سازي library caching زمانيكه يك Silverlight library را توليد كرده‌ايم


در مورد كاهش حجم فايل‌هاي XAP سيلورلايت زمانيكه از اسمبلي‌هاي كتابخانه‌هاي ديگر مانند Silverlight toolkit استفاده مي‌شود، در اين فصل بحث شده است و راه حل، استفاده از گزينه‌ي reduce XAP size by using application library caching است. به اين صورت كاربران ديگر به ازاي هر بار مشاهده‌ي سايت نيازي نخواهند داشت تا يك سري كتابخانه‌ي كمكي را كه هيچ تغييري در آن‌ها حاصل نخواهد شد، دريافت كنند و اطلاعات آن‌ها از cache مرورگر خوانده مي‌شود. اين مورد با كتابخانه‌ها و ابزارهاي كمكي توليد شده توسط مايكروسافت كار مي‌كند. اما اگر خودتان يك Silverlight library را توليد كنيد، چنين اتفاقي رخ نخواهد داد و باز هم فايل اسمبلي كتابخانه‌ي شما درون فايل XAP اصلي برنامه قرار گرفته و خبري از caching مجزاي آن نيست. چرا اينطور است؟ چكار بايد كرد؟!
علت آن بر مي‌گردد به نحوه‌ي پياده سازي library caching در VS.NET و Silverlight . براي اين منظور چند مرحله بايد طي شود تا اين قابليت براي كتابخانه‌هاي ساخت خودمان نيز فعال گردد:
الف) به كتابخانه‌ي خود بايد امضاي ديجيتال اضافه كنيد:
اينكار با استفاده از امكانات خود VS.NET بسيار ساده است. به خواص پروژه مراجعه كنيد. سپس برگه‌ي Signing را باز كرده و گزينه‌ي Sign the assembly را انتخاب كنيد (شكل زير). در قسمت choose a strong name key file ، گزينه‌ي new را انتخاب كرده و پس از وارد كردن يك نام دلخواه و گذر واژه‌اي، فايل pfx امضاي ديجيتال اسمبلي شما توليد خواهد شد. اكنون تنها كافي است يكبار ديگر برنامه را كامپايل كنيد.


ب) به يك فايل extMap.xml هم نياز است:
هنگام پياده سازي قابليت library caching ، VS.NET به دنبال فايلي به نام AssemblyFileName.extmap.xml دقيقا در كنار فايل اسمبلي مورد نظر مي‌گردد. ساختار عمومي اين فايل XML به صورت زير است:

<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<assembly>
<name>SLHelper</name>
<version>1.0.0.0</version>
<publickeytoken>f265933def965412</publickeytoken>
<relpath>SLHelper.dll</relpath>
<extension downloadUri="SLHelper.zip" />
</assembly>
</manifest>

نام، شماره نگارش، مسير قرارگيري فايل اسمبلي مورد نظر و همچنين نام نهايي آن حين جدا سازي آن از XAP برنامه بايد مشخص گردد. گزينه‌ي publickeytoken مهم‌ترين تنظيم اين فايل است و قسمت الف را به همين منظور نياز داشتيم. اين عدد را به سادگي با استفاده از برنامه‌ي reflector مي‌توان بدست آورد (شكل زير).



جهت ساده سازي قسمت (ب)، برنامه‌ي كمكي را از آدرس ذيل مي‌توانيد دريافت كنيد:
Utility: Extmap Maker

براي مطالعه بيشتر
Silverlight 3: Cached Assemblies and you can to