الأحد، 19 سبتمبر 2010

الأن يمكنك دمج ملفات FrameWork أو أي أسمبلي مع برنامجدك التنفيذي


بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

الكثير من الأخوة الأفاضل دائما ما يتسائلون عن كيفية إضافة ملفات الدوت نت FrameWork الي برامجهم التنفيذية؟

الأن يمكنك أن تفعل ذلك بكل سهولة فلقد اطلقت شركة مايكروسوفت في أواخر عام 2009 برنامجا يقوم بهذه الخدمة واسم هذا البرنامج هو ILMerge ويمكنكم إنزال نسخة من هذا البرنامج من اللينك التالي وهو برنامج Free


ولمن يريد مزيدا من التفاضيل عن هذه الخدمة يمكنه مراجعة اللينك التالي


وتعتبر أهم مميزات برنامج ILMerge هو امكانية دمج أي أسمبلي أو أكثر في ملف واحد فقط وبالتالي يمكنك الأن أن تدمج اي شئ مع برنامجك التنفيذي
اضافة لطريقة الدمج :
ملاحظة: ستتكرر كثيرا كلمة "تجميع" أو "وحدة نمطية" في هذا الموضوع, للمزيد من
عادة ما تتكون تجميعات الدوت نت من عدة أجزاء, عدد من التجميعات في مجلد التطبيق, وعدد آخر ضمن مجلد التجميعات العمومية Global Assembly Cache, عندما تقوم بتشغيل التطبيق فإن وقت التشغيل RunTime سيعمل على ربط تلك الأجزاء بالتطبيق بالشكل المطلوب, لكن أحياناً من الجيد أن نقوم بربط كافة أجزاء التطبيق ضمن تجميع واحد Single Assembly, على سبيل المثال قد ترغب في تسهيل عملية نشر برنامجك إن كان يحتوي على عدد لابأس به من التجميعات الضرورية لتشغيل التطبيق عند العميل, يمكنك في هذه الحالة دمج كافة مكتبات البرنامج والموارد الضرورية ضمن ملف تنفيذي واحد Single executable.

عندما تقوم بكتابة عدد مكتبات باستخدام لغة برمجة واحدة عندها يمكن بسهولة إنشاء تجميع واحدبدلا من بعثرة كل تجميع, والناتج سيكون إما مكتبة DLL منفردة أو ملف تنفيذي منفرد مع كافة التبعيات dependencies.

رمز:

في المقابل عندما تعمل على إنشاء مكتبات مخvbc /target:winexe /out:Program.exe MainProgram.vb ClassLibrary1.vb ClassLibrary2.vbتلفة باستخدام لغات الدوت نت المختلفة عندها لن تتمكن من القيام بذلك

.NET Modules

مترجمات الدوت نت .NET Compilers تمكنك من إنشاء الوحدات النمطية المدارة .NET Managed Modules تماماً مثلما تقوم بإنشاء تجميع (ولكن من دون ملف Manifest), ويمكنك بعد ذلك ربط تلك الوحدات ودمجها ضمن تجميع واحد باستخدام الأداة al.exe, وبذلك يمكنك إشاء تجميع واحد يضم عدة وحدات نمطية مصممة بلغات مختلفة. وللقيام بذلك كل ماعليك فعله هو هو ترجمة السورس كود إلى وحدة نمطية باستخدام أداة المترجم vbc.exe أو csc.exe أو كليهما معاً, ثم بعد ذلك ستقوم بدمج وربط تلك الوحدات باستخدام الأداة al.exe لتشكيل تجميع واحد, والمثال التالي يوضح كيفية القيام بهذه الخطوات:

رمز:
csc /target:module /out:ClassLibrary1.netmodule ClassLibrary1.csvbc /target:module /out:ClassLibrary2.netmodule ClassLibrary2.vbvbc /target:module /out:Program.netmodule Program.vbal /target:winexe /out:Program.exe ClassLibrary1.netmodule ClassLibrary2.netmodule Program.netmodule
ولسوء الحظ هذه الطريقة تعمل فقط إذا كانت كافة أجزاء تطيقك على شكل كود مصدري او على شكل وحدات نمطية, أما إذا كنت تستخدم في تطبيقك مكونات خارجية Third Party Components مثل أدوات ActiveX فان تتمكن من إجراء الدمج بهذه الطريقة.

Microsoft ILMerge

هذه الأداة الرائعة من Microsoft والتي قام بتطويرها Mark Barnett وهي تتيح إمكانية دمج عدة تجميعات مع بعضها مهما كانت لغة البرمجة التي صممت بها, يمكنك تحميلها من الرابط التالي:http://www.microsoft.com/DOWNLOADS/d...displaylang=en

حتى نتمكن من استخدام هذه الأداة يجب أولاً ترجمة الكود المصدري إلى ملف التنفيذي ومعه ملفات DLL المرتبطة به, تماماً كما يفعل ذلك Visual Studio, ولك الخيار إما باستخدام Visual Studio أو الأداتين vbc.exe و csc.exe.

المثال التالي سيقوم بالمهمة نيابة عن Visual Studio

رمز:
csc /target:library /out:ClassLibrary1.dll ClassLibrary1.csvbc /target:library /out:ClassLibrary2.dll ClassLibrary2.vbvbc /target:winexe /out:Program.exe /reference:ClassLibrary1.dll,ClassLibrary2.dll Program.vb
هذا المثال سيقوم بإنشاء بإنشاء الملف التنفيذي Program.exe بشكل منفصل, والوحدتين ClassLibrary1 و ClassLibrary2 أيضا بشكل منفصل.

الآن يمكنك دمج هذه الأجزاء ضمن ملف تنفيذي واحد باستخدام ILMerge , وهذا مقال على ذلك:

رمز:
ilmerge /target:winexe /out:SelfContainedProgram.exe Program.exe ClassLibrary1.dll ClassLibrary2.dll
الأمر الرائع في هذه الأداة هو إمكانية دمج مكتبات COM Wrappers (ملفات COM Interop) مع تطبيقك وذلك قبل ععملية النشر, طبعاً مع الأخذ بعين الاعتبار أنه لايمكن دمج Third Party Components (ملفات DLL أو OCX ) مع الملف التنفيذي فهذا غير ممكن.

ملاحظات : هذه الأداة تعمل فقط على Framework 2.0, 3.0, 3.5, 4.0 وهي لاتدعم MONO أو ROTOR.


أداة ILMerge-GUI هي أداة مجانية ومفتوحة المصدر تستند إلى ILMerge
يقدمها موقع CodePlex وهي تعتمد على واجهة رسومية تسهل كثيرا عملية الدمج مع إمكانية اعتماد الخيارات التي توفرها ILMege


للتحميل http://www.codeplex.com/ILMergeGUI

نقل للفائدة

تمنياتي للجيمع بالتوفيق

ليست هناك تعليقات: