اضافة لطريقة الدمج :
ملاحظة: ستتكرر كثيرا كلمة "تجميع" أو "وحدة نمطية" في هذا الموضوع, للمزيد من
عادة ما تتكون تجميعات الدوت نت من عدة أجزاء, عدد من التجميعات في مجلد التطبيق, وعدد آخر ضمن مجلد التجميعات العمومية 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