هل تريد أن تعمل Compile لبرنامجك بدون الـفيجوال بيسك
الجديد في الدوت نت إنه بقى يعتمد على برامج أخرى لعمل Compile لبرنامجك.
يعني دلوقتي الفيجوال ما بقاش فيه Built-In Compiler –في رأيي إننا نسميه built-in- بقى فيه compiler خارجي للقيام بهذه المهمة.
الـ Compiler بتاع الفيجوال عبارة عن ملف صغير حجمه بالظبط عندي = 1.08 مب.
والباث بتاع الملف ده هو: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe.
طبعا من الملاحظ إن vbc اختصار لـ Visual Basic Compiler.
طب ازاي نتعامل مع الملف ده؟
الملف ده بنتعامل معاه بطريقة بسيطة جدا بتتوقف على فهمنا لمكونات مشروع الدوت نت.
يعني فهمنا لـيعني إيه Namespace يعني إيه عمل Import لـ Namespace.
يعني إيه إن الفورم مثلا بتبقى في الغالب متكونة من ثلاث ملفات: MyForm.vb و MyForm.Designer.vb و MyForm.resx.
وطبعا الملف الأول هو اللي فيه كودنا والتاني هو اللي فيه كود عمل Initialization أو بمعنى تاني ادبتاء أو خلق للـ Controls أو المكونات الموجودة في الفورم بتاعتنا.
والثالث بتاع الـ Resources الخاصة بالفورم.
مش موضوعنا ده كله.
كطريقة بدائية هنتعامل مع الـ Compiler ده عن طريق الدوس.
هنفتح شاشة موجه الأوامر Command Prompt عن طريقة Start->Run->cmd.exe مثلا.
وهنبدأ في تكوين الأمر بتاعنا علشان نعمل Compile لمشروع بدون الدوت نت.
هنكتب الأمر بتاع الـ Compiler: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe. وطبعا مش هنضغط Enter غير في الآخر خالص بعد آخر نقطة.
هنبدأ في كتابة الـ Arguments بتاعت الأمر ده وهنشرحهم أثناء كتابتهم.
1. /target:???: وللأمر ده اختياريت مشهورين winexe و library الأول ده بيتحكم في إن الناتج من عملية الـ Compiler يكون ملف exe بيشتغل على الويندوز –برنامج يعني- والتاني في إنه ينتج ملف dll مكتبة يعني.
يعني هيكون الأمر بتاعنا في مثالنا ده كده:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /target:winexe
2. /out:<file>: والأمر ده بنحدد من خلاله اسم الملف الناتج.
في مثالنا ده هيكون أمرنا:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /target:winexe /out:MyApp.exe
3. /doc:???: وده بيتحكم في هل ينتج لنا الـ Compiler برضه ملف XML فيه شوية معلومات عن الـ Assembly بتاعتنا اللي احنا هننتجها.
4. /rootnamespace:???: وده بيتحكم في اسم الـ Namespace الرئيسية اللي بتشمل كل الـ Namespace الموجودة في برنامجنا.
في مثالنا ده هيكون أمرنا:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /target:winexe /out:MyApp.exe /rootnamespace:MyNamespace
5. /optimize+: والأمر ده لو ضفناه بيخلي برنامجنا الناتج بتاعنا يبقى معمولله Optimization بمعنى إنه يكون أسرع مثلا.
6. /reference:???,???,???: والأمر ده بيتحكم في الـ References اللي عايزين نضيفها في برنامجنا وكل Reference هنكتب الباث بتاع الملف بتاعه وهنفصل بين كل reference والتاني بفاصلة Comma (,).
في مثالنا ده هيكون أمرنا:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /target:winexe /out:MyApp.exe /rootnamespace:MyNamespace /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll, C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll
7. /imports:???,???,???: والأمر ده بيتحكم في الـ Namespaces اللي عاوزين نعمللها Import وكل Namespace هنكتب اسمها وهنفصل بين كل Namespace والتانية بفاصلة Comma (,).
في مثالنا ده هيكون أمرنا:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /target:winexe /out:MyApp.exe /rootnamespace:MyNamespace /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll, C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /imports:System,System.Drawing,System.Windows.Forms
طبعا ما ينفعش نعمل Import لـ Namespace مش معمول Reference للـ Assembly بتاعتها.
ولازم ناخد بالنا من حاجتين هما إننا ما ننساش نعمل reference للـ Assemblies اللي البرنامج محتاجها وكذلك نعمل import للـ Namespaces اللي البرنامج محتاجها.
8. /Main:???: والأمر ده بيتحكم في الفورم الأساسية أو حتى الـ Module للبرنامج اللي بيظهرها أول ما بيدأ وما ننساش لما بيجي نكتب اسمها نكتب الـ Namespace بتاعها يعني التدرج بتاعها.
في مثالنا ده هيكون أمرنا:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /target:winexe /out:MyApp.exe /rootnamespace:MyNamespace /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll, C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /imports:System,System.Drawing,System.Windows.Forms /Main:MyNamespace.MyForm
9. آخر وأسهل حاجة إننا نضيف الملفات بتاعة المشروع وما ننساش لو ملف اسمه فيه مسافة نحوطه بـ "" وهنفصل بين كل ملف والتاني بمسافة.
في مثالنا ده هيكون أمرنا:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /target:winexe /out:MyApp.exe /rootnamespace:MyNamespace /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /imports:System,System.Drawing,System.Windows.Forms /Main:MyNamespace.MyForm MyForm.vb "Another Form.vb" MyForm.Designer.vb "Another Form.designer.vb"
وفيه برضه أوامر تانية زي:
10. /Debug+: علشان نخلي البرنامج في وضع Debug.
11. /Resource:<file>: علشان نحدد الملفات Resources الخاصة.
12. /win32icon:<file>: لتحديد أيكونة البرنامج.
13. RemoveIntChecks+: لو ضفناها لو مثلا عندنا متغير من نوع Byte واديناله قيمة أكثر من 255 مش هيعمل Error وده نوع من الـ Optimization.
14. /nowarn: بيلغي جميع الـ Warnings التحذيرات.
15. /warnaserror+: لو ضفناه هيخلي كل الـ Warnings تبقى Errors.
16. /OptionExplicit+: لو ضفناه بيبقى مساوي جدا لكتابة Option Explicit On في بداية كل فورم أو كلاس.
17. /OptionCompare:???: الأمر ده بياخد قيمة إما text أو binary في الغالب وبيكون مساوي ساعتها لـ Option Compare Text/Binary في بداية كل كلاس.
وطبعا علشان ما أعقدش قرائي أهم أوامر هي:
1. target.
2. reference.
3. imports.
4. main.
5. إضافة ملفات المشروع.
أما باقي الأوامر ممكن ما تكتبهاش بس كان لازم أشرحها.
وممكن نستفيد من إننا ننتج Assemblies في وضع On-The-Fly بمعنى إننا ننشئ برامج من غير الفيجوال أثناء وقت التشغيل للبرنامج.
مثلا يكون برنامجنا نضيف فيه أوامر كتابة أكواد في ملفات:
C:\Windows\Temp\Class1.tmp و Class2.tmp و Class3.tmp و Module1.tmp.
ويكون أمرنا كالآتي:
Dim cmd As String
cmd = "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /target:winexe /out:myApp.exe /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /imports:System,System.Drawing,System.Windows.Forms /Main:module1 Module1.tmp Class1.tmp Class2.tmp Class3.tmp"
System.Diagnostics.Process.Start(cmd)
وبعدين
System.Diagnostics.Process.Start("C:\Windows\Temp\myApp.exe")وعلى فكرة كل يوزر مصطب الفريم وورك على جهازه لازم vbc.exe يكون عنده.