تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقدمة تعريفية بـ ASP.Net - الجزء الخامس--ِASP.Net Compilation
#1
كاتب الموضوع : Ahmed Moosa


ASP.Net Compilation

مقدمة

أهلاً بكم فى الجزء الخامس من هذة السلسلة , حيث ذكرنا فى الجزء الرابع كيف ان المستخدم يقوم بكتابة عنوان الموقع الذى يريده فى شريط عنوان المتصفح , والذى يقوم بدوره بإرسال طلب بهذا الموقع إلى الخادم , فيتلقى الخادم هذا الطلب على شكل عنوان URL , فيقوم بفحصه, ليحدد الملف المطلوب , ومن ثم تسليمه إلى الـ Handler المسئول عن معالجة هذا الملف . وما يجعلك واثقاً من أنه يوجد توافق ما بين الملفات والـHandlers المعدة لمعالجتها , هو , أن كل ملف أو قد نقول إمتداد ملف تم ربطه بمعالج خاص به من خلال ملفات الإعدادت , ونقصد ملف configuration , سواء كانت هذة الإعدادات تم تعريفها مسبقاً (مبنياً)داخل ASP.Net ,ونجدها فى ملف Machine.Config , او إعدادات , قمت انت كمطور بإعدادها , ونجدها فى ملف Web.config .إذاً , هناك ربط بين الصفحة والمعالج . وعلى هذا , يدور حديثنا اليوم إن شاء الله , حول بداية تحديد المعالج ومن ثم إجراء جولة عميقة والله المستعان داخل إنشاء Instance من المعالج , ولاشك أن هناك الكثير من أنواعها , ولكن سيدور حديثنا حول صفحات ASP.Net .

ملحوظة :-

يوجد ملف Machine.Config فى هذا المسار

WINDOWS\Microsoft.NET\Framework\[Version]\Config\

او يمكنك الوصول إلى هذا المسار برمجياً من خلال الكود التالى : HttpRuntime.MachineConfigurationDirectory;

المحتويات:-

كل شئ هنا هو Object .

صفحة ASPX وقت التشغيل

ASP.Net Execution Model ؟

ماهى Temporary ASP.Net Files ؟

ماهى ASP.Net Pre-Compilation ؟



كل شئ هنا هو Object .

حين نتحدث عن صفحة ASPX نجدها متمثلة ً فى أجزاء عدة , أكواد HTML ,CSS,JavaScript,C#/vb ,وبالطبع ادوات ASPX والتى تعتبر فى مظهرها مشابهة لأكواد HTML ومطابقة فى جوهرها إلى أكواد XML . وسنرى إن شاء الله حقيقة هذة الأودات بعد قليل . ولكن كما رأيت تتركب الصفحة من أكواد للغات وتنقيات مختلفة . فإذا قمنا بالتقسيم بناءاً على تبعية التنفيذ سواء كان لجهاز الخادم او لجهاز المستخدم ! كيف سيكون التقسيم ؟


سنجد ان HTML,CSS,JavaScript كلها تتبع جهاز المستخدم , وترسل كما هى إلى المتصفح , والتى يتولى ترجمتها سواء إلى عناصر رسومية تتشكل بها الصفحة والناتجة عن HTML , او تلك التى تعطى المزيد من التنسيقات الجذابة كألوان وحجم خط أو سمك او عرض او إرتفاع أو غير ذلك من التنسيقات الناتجة عن CSS , واخيراً ردود الفعل السريعة وربما البسيطة , على الرغم من أن كلمة بسيطة لا تواكب تحديثات اليوم التى أجريت علىJavaScript , تلك التحديثات التى نشأت وترعرعت حتى أصبحت تنال إعجاب الكثيرين وهى Jquery .

ملحوظة :-

JQuery ما هى إلا مكتبة أكواد تمت صنعها بإستخدام JavaScript لتقدم طريقة مبسطة للتعامل مع أكواد JavaScript وشعارها هو " اكتب القليل وافعل الكثير " , نعم , يمكنك كتابة كلمتين أو أكثر لتفعل الكثير من الأمور والتى فى السابق كنت تحتاج أن تكتب السطور لتنجز نفس المهمة .والذى زادها جمالاً وروعة هو تعاملها مع الخادم بطريقة سلسلة.وقد ورد ذكرها فى سلسلة درورس "الإتصال بدوال Server-Side من خلال Client-Side “ .

يستقبل المتصفح هذة الأكواد فى شكل نصوص عادية , ليتولى معالجتها , كلاً على طريقته , وننوه على أن المتصفح لا يفهم غير اكواد HTML فقط كلغة عرض . فكيف بأكواد أدوات aspx والتى تعد أداوت Server ؟ ….... هذا ما ستعرفه بنهاية هذا الجزء إن شاء الله .

نأتى إلى دور الخادم فى هذة اللعبة , وهو الدور الأهم لاشك , حيث تظهر هنا ما هية صفحة ASPX وما السر وراء أدواتها .

أريدك أن تركز جيداً فيما سنقول , الصفحة ما هى إلا Object من Class وكذلك الأدوات , فكل أداة تحمل الخاصية runat يتم إنشاء Instance من الــClass التابع لها هذة الإداة . وحتى اكون أكثر وضوحاً سأضرب لك مثلاُ :-

أداة مثل أداة Button حين نريد منك ان تقوم بإنشاء واحدة منها, ماذا تفعل ؟ , سواء كان ردك "إننى اقوم بكتابة كود الأداة بيدى " أو كان "إننى أقوم بسحب الأداة من شريط الأدوات واقوم بإلقائها على الصفحة " ,سواء كان هذا او ذاك , فى الحقيقة أنت تقوم بإنشاء Instance من Class , أى أن , فعلك هذا مشابة لكتابة هذا السطر التالى :- Button button1 = new Button . وهذا ما يقوم به الخادم أثناء وقت التنفيذ بدلاً منك . فإليك الحقيقة كاملة فى الفقرة التالية .

صفحة ASPX وقت التشغيل

تخيل أن لدينا صفحة تحت مسمى Default.aspx يقوم على خدمتها ملف يسمى Code-behind تحت إسم Default.aspx.cs , بها بعض الأدوات وليكن بها Button وlabel وأدوات اخرى . قام المستخدم بطلب هذة الصفحة من الخادم , فهل تعلم ما هى آلية التنفيذ . دعنا نأخذ الأمر فى المجمل العام ثم نتطرق إلى التفصيل :-

فى العام تكون الخطوات على النحو التالى :-
  • تمرر الصفحة إلى Parser يقوم بالتدقيق الإملائى أو النحوى للتحقق من ان الصفحة خالية من الأخطاء النحوية .
  • ثم تمرر إلى Compiler والذى يقوم بتحويلها إلى ملفDLL فى شكل ملف بلغة MSIL .
  • ثم يضع ملف DLL والذى يعد (MSIL Code) داخل Assembly Cache.
  • ليقوم الـRuntime بجلب هذا الـ DLL وتنفيذه وتكتمل العملية ويعطى المخرجات .

وهنا سؤال , هل هذا الأمر يحدث كل مرة نطلب فيها الصفحة ؟ ,الإجابة لا ,......... تحدث هذة العملية فى أول مرة يتم طلب الصفحة فيها فقط , وبعد ذلك لا يتم تكرار العملية , بل يذهب مباشرة ً إلى ملف DLL , المخزن فى الـ Cache , ويأتى بالصفحة المراد العمل معها . إلا إذا !!! …............ إلا إذا ماذا ؟.......... إلا إذا حدث تغير فى الصفحة أو الكود الخاص بالصفحة , وهنا نقصد تركيبة الصفحة ,أى قام المبرمج بالتعديل فى الـ Source Code الخاص بالصفحة , فيذهب تلقائياً إلى إجراء العملية من بدايتها , وذلك لإن هناك تغير طرأ على الصفحة . هذا فى المجمل العام , ولكن على ماذا يحتوى هذا الملف ونقصد الـ DLL ؟

هذا السؤال يقودنا إلى التفصيل , والذى جئنا من أجله صوب هذة النقطة, فلنرجع نذكرك بالصفحة Default.aspx وملف الكود المصاحب لها , وهذا هو ما يحتويه ملف DLL , ولكن بطريقة مختلفة عن التى تعرفها .

يصل إلى الخادم طلب بالصفحة التى تحمل العنوان Default.aspx فيتم تحويلها إلى Class تسمى Default_aspx وهذا هو المعالج الذى سيتولى معالجة الصفحة !!!!! ….............. كيف هذا ؟ …..... فى بداية الأمر يتم إنشاء Namespace يسمى ASP , وهو الذى يشكل الإطار الخاص بلمفات المشروع (الموقع), وبداخله يتم إنشاء Class لكل صفحة داخل المشروع , تم الإتفاق على تسمية هذة الـ Class بطريقة موحدة لدى الجميع , وهى على هذا النحو : إسم الصفحة _ إسم الإمتداد , أى ان صفحة كمثال Default.aspx ستكون Default_aspx , على الرغم من وجود طريقة لتغير هذا الإسم , وهى الخاصية ClassName والتى نجدها فى Page Directive , وليكن كمثال , إعطائها الإسم "Main” , وعليه , فبدلاً من تسمية الصفحة بـ ASP.Default_aspx ستكون ASP.Main , ومن هذا , فقد قمنا بتحديد اسم الـ Class التى سيتم إنشائها أثناء وقت التشغيل على انه “Main ” ,مع احتفاظ الصفحة بإسمها وهو Default.aspx .

بداخل هذة الـ Class نجد أنه تم إنشاء Instance من كل اداة داخل الصفحة تحمل runat , بالطريقة التى سبق ذكرها فى أداة Button ,سيكون الأمر مماثل مع بقية الأدوات. وليس الأدوات فحسب بل هناك دوال وأحداث , منها المعروف لدى الكثير, ومنها الجديد بالطبع .

ملحوظة :-

يجب وجود الخاصية runat مع كل أداة ستتعامل مع الخادم ,ونجد ان القيمة الوحيدة لهذة الخاصية هى Server , وعليه, فعند الحاجة إلى تحويل أداوات Html إلى ادوات Server , فما عليك إلا وضع هذة الخاصية ضمن تعريف الأداة.

والسؤال هنا , ما هو مصير ملف الكود Code-behind ؟ …..... كما ذكرنا إنه يتم إنشاء Class تحت اسمDefault_aspx , فإن هذة الـ Class ترث من ملف الكود Code-behind . وإليك جزء من التعريف الفعلى بهذا الملف :-


بالطبع , الملف مازال له بقية , تسبقه وتليه , ولكن أردت ان اوضح لك الصورة أنه تم إنشاءClass بإسم uploadfiles_aspx التى فى واقع االأمر هى صفحة بإسم ProfileTest.aspx ترث من ملف Code-behind متمثلاً فى Class باسم Uploafiles . ونجد أيضاً بهذة الـ Class مجموعة من الدوال ,الهدف منها بناء عناصر الصفحة , فنجد أن لكل أداة دالة تقوم بإنشاء هذة الأداة , مثال , لو ان لديك اداة Button1 فى الصفحة , فستجد دالة بإسم @__BuildControlButton1 , وكذلك تجد دالة لإنشاء Form ووضع باقى الأدوات به تحت إسم @__BuildControlform1() , وفى النهاية تجد دالة تجمع الكل فى تسلسل شجرى باسم @__BuildControlTree .وهى دالة Void او (Sub فى vb.net ) . على عكس الدوال السابقة , فنجد ان الدالة BuildControlButton1 تعود بـ Object من نوع button وكذلك BuildControlForm1 تعود بـ Object من نوع Form . يتولى إعطاء امر التنفيذ لهذة الدوال , دالة تسمى FrameworkInitialize , فهى المسئولة عن بناء الصفحة ,من خلال الدوال السابقة .وهى أول ما ياخذ أمر التنفيذ .

وحتى تتضح الصور أكثر فأكثر , إليك جزء من هذا الملف لتقلى نظرة على الدوال التى نتحدث عنها فى الصورة التالية :



يتكرر الأمر مع كل صفحة لديك ضمن ملفات موقعك .وليس هذا فحسب …....... , هناك العديد من الملفات المساعدة , اى أن هناك مجموعةClasses يتم إنشائها للمساعدة . كالتى فى App_Code و كملفات Code-behind وغيرها .

تنشأ هذة الـمجموعة من الـ Classes فى الشكل العادى الذى نعرفه , أى بلغة C# ونجد معها ملفات الـ Dll , ولعلك تتساءل , كيف يقوم بإنشاء الأداة داخل الدوال السابقة , أو بالأحرى أين أجد هذة الملفات فى الأساس ؟

حسناً , الإجابة , توجد هذة الملفات فى مجلد خاص تم إعداده للإحتفاظ بما يسمى Pre-Compilation Files وهى الملفات التى نتحدث عنها الإن ,وهو مجلد Temporary ASP.Net Files , والموجود بمكان تثبيتك لبرنامج Visual Studio , أى ضمن ملفات النظام . والذى يمكن أن تصل إليه من خلال المسار التالى :-

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temp orary ASP.NET Files

يمتلئ هذا المجلد , بمجلدات آخرى , تخص مشاريعك التى تعمل عليها ,فستجد لكل مشروع لديك مجلد خاص بنفس إسم المشروع دون زيادة أو نقصان .

ملحوظة :

يقوم البرنامج بالتخزين للملفات فى هذا المجلد , إذا كان المستخدم للبرنامج "Administator ”. وغير ذلك فإنه يقوم بالتخزين فى المجلد المعروف Temp . وسواء هذا أو ذاك , فإنه ,يمكنك الوصول إلى هذا المجلد من خلال الكود بإستخدام الخاصية التابعة لـ HttpRuntime Class على النحو التالى :- HttpRuntime.CodegenDir

على الرغم من انه يمكنك تغير مكان حفظ هذة الملفات , عبر تحديد مسار مختلف فى الخاصية tempDirectory الخاصة بالعنصر Compilation داخل Web.config . ولكن هذا الأمر يعود إليك .

يجدر بنا الآن الإتجاه إلى الملف وتفصيل ما به .

Temporary ASP.Net Files

الترجمة لهذا الاسم , هى ملفات ASP.Net المؤقته , يحتوى هذا المجلد على مجلدين بأسماء عشوائية , وتحتوى على الملفات التى تنشأ أثناء وقت التنفيذ , أى بجرد إنشائك لمشروع موقع , ومن ثم عملRun لإحدى الصفحات ,ليقوم بدوره بتوليد مجلد لهذا الشأن ,به ملفات سنتعرض لذكرها الآن , وهى :-

ملفات يسبقها الإسم APP_Web , مثال :- App_Web_dpk5r4ef.dll

هذا الملف , هو ملف Assembly , وسنجد به الأكواد التى تخص كامل صفحات المجلد الواحد داخل الموقع , حيث يتم تجميع صفحات كل مجلد على حده , داخل ملف dll , وحتى يتمكن الـ Runtime من التفرقة بين المجلدات , يقوم بتحديد رقم لكل مجلد ,كالرقم الذى تراه فى هذا الملف : App_Web_dpk5r4ef.dll .

ملحوظة :-

يمكنك تصفح هذا الملف عبر أداة IL Disassembler , فما هو إلا ملف معد بلغة MSIL كما تعلم , وتجد هذة الأداة ضمن محتويات اداوت Visual Studio , داخل قائمة Start >> Program بالطبع .

محتويات هذا الملف هى الـ Namespaces و الـ Classes التى تحدثنا عنها سابقاً , ونأخذ مثال صفحة ما موجودة داخل الموقع, نجدها تاخذ هذا الأسم :App_Web_dpk5r4ef.7.cs , لاحظ أنها بإمتداد cs أنها Csharp . أى يمكن رؤية الأكواد التى بها , وبالطبع انت قد رأيتها من قبل فى بداية الحديث عن تلك الملفات .

ملحوظة :-

على الرغم من انه , تشكل صفحات المجلد الواحد ملف Dll مستقل بذاته , يحتوى على classes تتشكل بها صفحات هذا المجلد , إلا انه يمكن ان تشكل الصفحة الواحدة ملف Dll خاص بها , أى ,سيكون هناك ملف dll لكل صفحة .وهذا ليس بأمر كبير , ولكن هذا حسب الرغبة , وتقوم بذلك الخاصية Batch عند إعطائها القيمة false فى عنصر compilation فى ملف Web.config .



يتبع ملف App_Web_dpk5r4ef.7.cs نمطاً معيناً فى التسمية وهو : App_Web_[Folder- Hash].[inedx-Zero].cs , حيث تدل App_Web على أن هذا ملف يخص صفحات الموقع , و Folder Hash هو رقم يخص المجلد الموجود به الصفحات , وindex-Zero هو الرقم الذى يفرق بين الصفحات وبعضها .ووظيفة هذا الملف تتمثل فى إنشاء class تضم الأدوات المدرجة داخل صفحة ASPX وهى نفس إسم Code-Behind Class , ولعلك تتسأءل عن كيفية تسمية إثنين من Classes بنفس الإسم , دون حدوث اى إعتراض من الـCompiler , تنحصر الإجابة فى تعريف كلاً منهما بإستخدام الكلمة المحجوزة Partail , فدورها هو السماح بتجزئة Class إلى اكثر من ملف . مع الحفاظ على مشاركة عناصر الـ Class داخل هذة الملفات , لذلك تجد أسماء الأدوات التى قمت بتعريفها فى صفحة ASPX موجود ومتاحة داخل ملف code-behind , مما يمكنك من التعديل او القراءة منها او الكتابة إليها . وقد نفصل فيها فيما بعد إن شاء الله. إذاً , فهذا الملف يحتوى على namespace بإسم ASP وclass تخص الـصفحة و كذلك الـ Class الجديدة التى يتم إنشائها كمثال , Page_aspx , و فيما بعد يتم إنتاج ملف Dll يتولى عملية التجميع.

قد تجد ان هناك يحمل الكلمة Delete فى آخره , مثال , App_Web_tisu4w4e.dll.delete , ويشير هذا الملف إلى ملف كان يستخدم من قبل , ولكن تم التعديل فى أحد محتوياته , فتم إنشاء غيره , وإعطائه اللاحقة delete , للإستعداد لحذفه , عند إعادة تشغيل التطبيق .



ملحوظة:-

يعاد تشغيل التطبيق,عن التعديل فى أحد الملفات الهامة مثال, Web.Config أو Global.asax , او عند إستدعاء هذا الأمر برمجياً من خلال الكود بإستخدام الدالة HttpRuntime.UnloadAppDomain

ملحوظة :-

يتم وضع كل تطبيق خاص بـ ASP.Net داخل ما يسمى AppDomain واحد فقط , أى أن , كل تطبيق لدية AppDomain واحد مميز عن البقية , والفائدة من ذلك , هو توفير العزلة (Isolation ) للتطبيق عن بقية التطبيق على الخادم .



وصلنا إلى نقطة أن الملفات ذات الإمتداد cs فى هذا المجلد , توضع فى ملف واحد dll ليتم تجميع صفحات المجلد الواحد بداخله , ليقوم بدوره بالرد على طلبات الخادم التى تصل إليه , وإخراج محتوى للمستخدم يتم إرساله للمتصفح . وهنــــا سؤال , كيف يجمع بين هذة الملفات للصفحة الواحدة , وكيف يفرق بين تلك الصفحات , وماذا حدث تغيير فى احد الملفات التابعة لصفحة واحدة , كالتعديل فى مظهر الصفحة من زيادة أو نقصان اداوت , أو التغيير فى الكود الخاص بالصفحة أو تغيير فى صفحة الـ Master وغير ذلك من الملفات التى تتشكل منها الصفحة ؟

الإجابة على هذة الأسئلة , تأتى عند سؤالك عن ملف ينتهى باللاحقة .compiled كما ترى فى هذة المجلد الموقت مثال هذا الملف , default.aspx.cdcab7d2.compiled , فما حقيقة هذا الملف ؟

تسمى هذة الملفات بإسم Preservation Files , اى ملفات الوقاية , حيث يوجد لكل صفحة داخل الموقع ملف مستقل بذاته , وهو عبارة عن ملف xml , ,يمكنك ان تلقى نظرة عله من هنا :-


وبه يتم تحديد الـ Class المرتبطة بها هذة الصفحة متمثلة فى الخاصية Type, وكذلك ملف الـ Assembly الموجود به هذة الـ Class متمثلاً فى الخاصية Assembly , ومسار الصفحة متمثلاً فى الخاصية VirtualPath , ورقم يحدد حالة الملفات التى لها تبعية بهذة الصفحة والمتمثلة فى الخاصية FileHash وتلك الملفات التابعة تجدها داخل عنصر filedepsوللكشف عن حدوث تغييرات فيها , ورقم أخر يراقب حدوث تغيرات فى الصفحة نفسها , متمثلاُ فى الخاصية Hash .

ونجد ان هذة الملفات تتبع نمطاً معينا فى التسمية على هذا النحو :-

[page].aspx.[folder-Hash].Compiled

ملفات يسبقها App_Code

ومن إسمها ياتى دورها , ويدل الإسم على أن هذة الملفات هى ملفات الأكواد التى توضع بداخل مجلد App_Code .

وبالطبع هناك ملف ينتهى بـ .Compiled كمثال , App_Code.compiled , والذى سبق ذكره من قبل , كذلك سيكون هناك ملف dll يجمع اكواد هذا المجلد بداخله كمثال : App_Code.zxopytkk.dll.

كذلك ملفات يسبقها App_Theme , وأخرى App_GlobalResources وغيرها من مجلدات المشروع الإساسية .وينطبق عليهم نفس الشئ كسابقيهم .

لعل من أبرز ما ننوه عنه هنا ان هذة الملفات تنتج فقط عند حدوث طلب لاحدهم , اى انه يتولد ملف للصفحة عند طلبها , وكذلك ملفات App_Theme عند إستخدامها , هذا لا يتعارض مع وجودها ضمن ملفات الموقع , ولكن تنتج ملفات Compilation عند إستخدام احد الصفحات لـملفات Themes . وهكذا الحال مع Resources.

ونذكر أيضاً أن هذة العملية ,حيث انها تحدث مع أول طلب للصفحة , فإنها تاخذ بعض الوقت , مما يعطى إنطباع بإن هناك بطئ فى تشغيل الموقع , والسبب يعود إلى أن هذة العملية تحدث عند الطلب فقط,ولا تتكرر فى المرات المتتالية .

لذلك , هناك ما يسمى Pre-Compilation , لإداء هذة المهمة على جهازك الخاص , ومن ثم رفعها على الخادم , وكل ما تحدثنا عنه حتى الإن من إنشاء هذة الملفات داخل هذا المجلد المؤقت Temporary ASP.Net Files , تعد نوعاُ من أنواع الـ Pre-Compilation , وتسمى In-place .

و النوع الآخر , وهو Pre-Compilation For Deployment .أى إجراء هذة العملية من أجل النشر , أى نشر الموقع على الخادم .

فسواءً كان هذا أو ذاك , يوجد اداة واحدة مسئولة عن إتمام هذة العملية , وهىaspnet_Compiler . والأمر جد بسيط , فما يتوجب علينا فعله هو, إعطاء هذة الأداة مكان الموقع المراد إنتاج الملفات له , والمكان المقصود الذى يتوجب حفظ الملفات المنتجة به . وتاتى على هذا النحو :-

aspnet_compiler -p “YourSitePath” -v / “TargetPath”

فنجد أن الـP تشير إلى Physical path ,ونجد ان v تشير إلى Virual Path .

ملحوظة :-

يمكن تصفح هذة الأداة من خلال وصولك إليها فى هذا المسار :-

C:\Windows\Microsoft.NET\Framework\[version]

لكن ستجد امراً غريباً , فى الحقيقة هو ليس غريباً بدرجة كبيرة , حيث ستجد أن الصفحات بالفعل تم إنشاء آخرى مشابهة لها فى الإسم ولكن ليس فى المحتوى , أى أنك ستجد صفحة بإسم Default.aspx ولكن محتواها عبارة عن سطر واحد هو كالتالى :-

This is a marker file generated by the precompilation tool, and should not be deleted!


ما الذى حدث ؟ …................ ما حدث هو انه , أخذ المحتوى ووضعه فى مجلد Bin ضمن محتويات ملف Dll وملفات أخرى كالتى رأيتها من قبل مثال ملفات compiledو App_Web.... ,وغيرهما .ولكن لم يعد هناك ملفات ذات إمتداد cs , حتى تسمح لك بالتعديل ,وبعد هذة الخطوة يمكنك أن تنشر ملفاتك على الخادم , ليراها الجميع , ولكن تبقى عقبة التعديل والتحديث فيما بعد .حيث انك لا تملك التعديل فى أى من ملفات aspx ولا Code-behind .

يوجد حل لهذة العقبة ,ولكن ليس حلاً كاملاً , فتقدم هذة الأداة "aspnet_compiler” , الأمر "updateable " , والذى يشير إليه الحرف u , فعند إستخدامه ,يقوم بنسخ الملفات ذات الإمتداد aspx,ascx,master,ashx كما هى إلى المجلد الذى قمت بتحديده , حتى يمكنك تحديثه فيما بعد , أى يمكنك إضافة أو حذف اداوت من هذة الصفحات . ولن تحتاج إلى إعادة نشر ملفات الأكواد مثال Code-behind , لإنها بالفعل متواجدة من قبل , وغير مسموح لك بالتعديل فيها , لإنه قد تم إنتاجها فى صورة dll .,إذاً , فيمكنك فقط التعديل فى aspx ولكن لا يمكنك التعديل فى Code-behind , ومع طلب الصفحة بعد التعديل يقوم الـcompiler بتحديث ملف dll ليشمل التحديثات .

ومن أجل هذا المقصد نستخدم التالى :-

aspnet_compiler -u -p “YourSitePath” -v / “TargetPath”

والملخص هنا :- يمكنك عمل Pre-Compilation لتحسين الأداء عند تصفح الموقع للمرة الأولى "فقط". وكذلك يمكن إستخدام الأمر u والذى يشير إلى "Updateable” , للحفاظ على إمكانية تحديث ملفاتك بعد عملية النشر .

نهاية الدرس

رأينا كيف ان كل شئ خاص بـ ASP.net يتم تحويله إثناء وقت التشغيل إلى Object , ورأينا كيف يتم عمل Compilation ,وتصفحنا معاً مجلد Temporary ASP.Net Files , وتعرفنا على بعض الملفات التى يمكن أن توجد بداخله , ومؤخراً , تعرفنا كيف نقوم هذة العملية من أجل النشر .ورأينا كيف يمكن إضافة إمكانية التحديث ضمن أوامر اداة aspnet_compiler .


فى الأجزاء القادمة , سنتعرف إن شاء الله , على مما تكون صفحة aspx بدايةً من على الخادم , مروراً , بعملية Rendering , إلى نصل إلى حدوث PostBack وما السر ورائه , وأخيراً عرض المخرجات على المتصفح .

والسلام عليكم .
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سلسلة تعليمية] مقدمة عن تقنية ASP.NET ahmadczar1981 0 1,067 19-09-23, 02:24 PM
آخر رد: ahmadczar1981
  الجزء الثانى - إستدعاء دالة Server-Side من خلال Client-Side RaggiTech 0 2,541 15-10-12, 11:18 AM
آخر رد: RaggiTech
  الجزء الأول- إستدعاء دالة Server-Side بإستخدام Client-Side RaggiTech 0 2,572 15-10-12, 11:16 AM
آخر رد: RaggiTech
  مقدمة تعريفية بـ ASP.Net- الجزء السادس - Page Class RaggiTech 0 2,119 15-10-12, 10:43 AM
آخر رد: RaggiTech
  مقدمة تعريفيه بـ ASP.Net - الجزء الرابع-- Global.asax-Modules-Handlers RaggiTech 0 2,415 15-10-12, 10:39 AM
آخر رد: RaggiTech
  مقدمة تعريفيه بـ ASP.Net - الجزء الثالث-HttpContext -HttpApplication RaggiTech 0 2,300 15-10-12, 10:36 AM
آخر رد: RaggiTech
  مقدمة تعريفيه بـ ASP.Net - الجزء الثانى - ASP.Net Patterns RaggiTech 0 2,371 15-10-12, 10:34 AM
آخر رد: RaggiTech
  مقدمة تعريفية بـ ASP.Net - الجزء الأول RaggiTech 0 2,209 15-10-12, 10:30 AM
آخر رد: RaggiTech
  مقدمة إلى Web Services RaggiTech 0 2,717 14-10-12, 03:17 PM
آخر رد: RaggiTech
  عمل Web Service خاصة بك من خلال .net - الجزء الثاني RaggiTech 0 2,554 14-10-12, 03:14 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم