عملية تجميع ملفات .cs إلى .dll باستخدام أمر csc
في كثير من الأحيان، نحتاج إلى تجميع ملف .cs بشكل منفصل في ملف .dll، وتكون العملية كما يلي:
افتح نافذة الأوامر->أدخل cmd في وحدة التحكم->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322
انتقل إلى الدليل حيث تم تثبيت vs.net -> قم بتنفيذ أمر csc csc /target:library File.cs -> قم بإنشاء ملف .dll بالاسم المقابل في الدليل (الشرط المسبق: وضع ملف .cs في C: دليل WINDOWS Microsoft.NETFrameworkv1.1.4322)
هناك العديد من الطرق لاستخدام الأمر csc، يرجى الرجوع إلى ما يلي
ترجمة File.cs لإنتاج File.exe
يقوم Csc File.cs بتجميع File.cs لإنشاء File.dll
csc /target:library File.cs قم بتجميع File.cs وإنشاء My.exe
csc /out:My.exe File.cs يجمع كافة ملفات C# في الدليل الحالي باستخدام التحسين وتحديد رموز DEBUG. الإخراج هو File2.exe
csc /define:DEBUG /optimize /out:File2.exe *.cs يجمع كافة ملفات C# في الدليل الحالي لإنشاء إصدار تصحيح من File2.dll. لا تعرض أي شعارات أو تحذيرات
csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs قم بتجميع كافة ملفات C# في الدليل الحالي إلى Something.xyz (DLL)
csc /target:library /out:Something.xyz *.cs ترجمة File.cs لإنشاء File.dll
csc /target:library File.cs هو الأمر الأكثر استخدامًا في الواقع، يمكن كتابته ببساطة كـ csc /t:library File.cs. هناك طريقة أخرى لكتابته وهي csc /out:mycodebehind.dll /t:library mycodebehind.cs، يمكنك تحديد اسم ملف الإخراج بنفسك.
csc /out:mycodebehind.dll /t:library mycodebehind.cs mycodebehind2.cs، وتتمثل وظيفة ذلك في تثبيت ملفين cs في ملف .dll واحد
مثال (مأخوذ من الإنترنت)
1. مكتبة الارتباط الديناميكي
ما هي مكتبة الارتباط الديناميكي؟ يجب أن تكون الأحرف الثلاثة DLL مألوفة بالنسبة لك، وهي اختصار لمكتبة الارتباط الديناميكي (DLL) وهي ملف قابل للتنفيذ وهي مكتبة وظائف مشتركة. يوفر الارتباط الديناميكي طريقة لعملية استدعاء الوظائف التي لا تشكل جزءًا من التعليمات البرمجية القابلة للتنفيذ الخاصة بها. يوجد الكود القابل للتنفيذ للوظيفة في ملف DLL الذي يحتوي على وظيفة واحدة أو أكثر تم تجميعها وربطها وتخزينها بشكل منفصل عن العملية التي تستخدمها. تساعد ملفات DLL أيضًا في مشاركة البيانات والموارد. يمكن لتطبيقات متعددة الوصول إلى محتويات نسخة واحدة من ملف DLL الموجود في الذاكرة في وقت واحد.
مثل معظم المبرمجين، لا بد أنك استخدمت ملفات DLL بشكل متكرر. هل شعرت يومًا أن هذا يجلب لك أخطاء جيدة في البرمجة والترميز؟ اليوم أريد أن أناقش معك موضوعًا: كيفية إنشاء مكتبة الارتباط الديناميكي (DLL) واستدعاءها في لغة C#، في الواقع، DLL تسمح بذلك يمكنني تنظيم تطبيقاتنا وكتابتها بشكل أكثر مرونة، باعتباري مصمم برامج، يمكنني تحقيق تأثير عالي لإعادة استخدام التعليمات البرمجية بناءً على ذلك. اسمحوا لي أن أقدم لكم كيفية إنشاء DLL واستدعاءه في C#.
2. العمل التحضيري
نحتاج إلى تقديم مقدمة موجزة عما سنفعله بعد ذلك. في هذه المقالة، سنستخدم لغة C# لإنشاء مكتبة ارتباط ديناميكية تسمى MyDLL.DLL. في ملف مكتبة الارتباط الديناميكي هذا، سنقدم وظيفتين تبادل قيم معلمتين. هناك وظيفة أخرى وهي إيجاد القاسم المشترك الأكبر لمعلمتين. ثم قم بإنشاء تطبيق لاستخدام ملف DLL هذا. تشغيل وإخراج النتائج.
3. إنشاء مكتبة الارتباط الحيوي (DLL).
لنقم بإنشاء ملفات التعليمات البرمجية الثلاثة التالية في C#:
1. MySwap.cs
}
باستخدام النظام؛
مساحة الاسم MyMethods
{
فئة عامة SwapClass
{
مبادلة منطقية ثابتة عامة (ref long i,ref long j)
{
أنا = أنا+ي؛
ي = ي;
أنا = إي؛
عودة صحيحة؛
}
}
}
2. ماي ماكس سي دي.cs
باستخدام النظام؛
مساحة الاسم MyMethods
{
الطبقة العامة MaxCDClass
{
MaxCD طويل ثابت عام (long i، long j)
{
طويلة أ، ب، درجة الحرارة؛
إذا (ط> ي)
{
أ = أنا؛
ب = ي؛
}
آخر
{
ب = ط؛
أ = ي؛
}
درجة الحرارة = أ٪ ب؛
بينما (درجة الحرارة! = 0)
{
أ = ب؛
ب = درجة الحرارة؛
درجة الحرارة = أ٪ ب؛
}
العودة ب؛
}
}
}
تجدر الإشارة إلى أنه عندما نقوم بإنشاء هذين الملفين، يمكننا استخدام Visual Studio.NET أو برامج تحرير النصوص الأخرى، حتى برنامج Notepad. على الرغم من أن هذين الملفين ليسا في نفس الملف، إلا أنهما ينتميان إلى نفس مساحة الاسم، مما يجعل من السهل علينا استخدام هاتين الطريقتين في المستقبل. بالطبع، يمكن أيضًا أن تنتمي إلى مساحات أسماء مختلفة، وهو أمر جيد تمامًا، لكننا نحتاج فقط إلى الإشارة إلى مساحتي أسماء مختلفتين عندما نطبقهما، لذلك يوصي المؤلف بأنه من الأفضل كتابتهما تحت مساحة اسم واحدة.
المهمة التالية هي تحويل هذين الملفين cs إلى ملفات DLL التي نحتاجها. الطريقة هي كما يلي: في نظام التشغيل المثبت عليه Microsoft.NET Framework، يمكننا العثور على دليل Microsoft.NET في الدليل الذي يوجد به Windows. يتم توفير مترجم C# ضمن هذا الدليل. قم بتشغيل CSC.EXE: csc /target:library /out:MyDLL.DLL MySwap.cs MyMaxCD.cs. بعد الانتهاء، يمكنك العثور على ملف MyDLL.DLL الذي قمنا بإنشائه للتو ضمن هذا الدليل. يخبر خيار المترجم /target:library المترجم بإخراج ملفات DLL بدلاً من ملفات EXE. يحدد خيار برنامج التحويل البرمجي /out متبوعًا باسم الملف اسم ملف DLL. إذا لم يكن /out متبوعًا باسم ملف، فسيستخدم المترجم الملف الأول (MySwap.cs) كاسم ملف DLL. الملف الذي تم إنشاؤه هو ملف MySwap.DLL.
حسنًا! لقد اكتملت مهمتنا المتمثلة في إنشاء ملف مكتبة الارتباط الديناميكي، والآن حان الوقت للاستمتاع بثمار عملنا. وفيما يلي كيفية استخدام ملف مكتبة الارتباط الديناميكي الذي أنشأناه. 4. استخدام DLL نحن ببساطة نكتب برنامجًا صغيرًا لاختبار ما إذا كانت الطريقتان اللتان كتبناهما للتو صحيحة، حسنًا، اتبعني:
MyClient.cs
باستخدام النظام؛
باستخدام MyMethods؛ // هنا نشير إلى مساحة الاسم المحددة للتو إذا كتبنا الملفين الآن في مساحتي اسم مختلفتين
فئة MyClient
{
الفراغ العام الثابت الرئيسي (سلسلة [] الحجج)
{
إذا (args.Length! = 2)
{
Console.WriteLine("الاستخدام: MyClient <num1> <num2>");
يعود؛
}
long num1 = long.Parse(args[0]);
long num2 = long.Parse(args[1]);
SwapClass.Swap(ref num1,ref num2);
// لاحظ أن توجيه الاستخدام الموجود في بداية الملف يسمح لك باستخدام أسماء فئات غير مؤهلة للإشارة إلى أساليب DLL في وقت الترجمة
Console.WriteLine("نتيجة المبادلة هي num1 = {0} و num2 ={1}",num1, num2);
long maxcd = MaxCDClass.MaxCD(num1,num2);
Console.WriteLine("الحد الأقصى لـ {0} و{1} هو {2}"،num1, num2, maxcd);
}
}
لإنشاء MyClient.exe القابل للتنفيذ، استخدم سطر الأوامر التالي:
csc /out:MyClient.exe /reference:MyDLL.DLL MyClient.cs
يخبر خيار المترجم /out المترجم بإخراج ملف EXE ويحدد اسم ملف الإخراج (MyClient.exe). يحدد خيار المترجم /reference ملف DLL الذي يشير إليه البرنامج.
5. التنفيذ
لتشغيل البرنامج أدخل اسم ملف EXE متبوعاً برقمين، على سبيل المثال: MyClient 123 456
6. الإخراج
نتيجة المبادلة هي num1 = 456 و num2 = 123
الحد الأقصى للقرص المضغوط 456 و123 هو 3
7. ملخص
تتمتع الروابط الديناميكية بالمزايا التالية:
1. توفير الذاكرة وتقليل عمليات المبادلة. يمكن للعديد من العمليات استخدام ملف DLL في وقت واحد، ومشاركة نسخة من ملف DLL في الذاكرة. بدلاً من ذلك، بالنسبة لكل تطبيق تم إنشاؤه باستخدام مكتبة مرتبطة بشكل ثابت، يجب على Windows تحميل نسخة من رمز المكتبة في الذاكرة.
2. توفير مساحة القرص. يمكن للعديد من التطبيقات مشاركة نسخة من ملف DLL الموجود على القرص. وبدلاً من ذلك، فإن كل تطبيق تم إنشاؤه باستخدام مكتبة مرتبطة بشكل ثابت يحتوي على رمز المكتبة المرتبط بصورته القابلة للتنفيذ كنسخة منفصلة. 3. من الأسهل الترقية إلى DLL. عندما تتغير الوظائف في DLL، لا تحتاج التطبيقات التي تستخدمها إلى إعادة ترجمتها أو إعادة ربطها طالما أن معلمات الوظيفة وقيم الإرجاع لا تتغير. في المقابل، يتطلب رمز الكائن المرتبط بشكل ثابت إعادة ربط التطبيق عندما تتغير الوظائف.
4. تقديم دعم ما بعد البيع. على سبيل المثال، يمكن تعديل DLL لبرنامج تشغيل جهاز العرض لدعم أجهزة العرض غير المتوفرة عند شحن التطبيق في الأصل.
5. دعم البرامج متعددة اللغات. يمكن للبرامج المكتوبة بلغات برمجة مختلفة استدعاء نفس وظيفة DLL طالما أن البرنامج يتبع اصطلاح استدعاء الوظيفة. يجب أن تكون البرامج ووظائف DLL متوافقة بالترتيب الذي تتوقع فيه الوظيفة أن يتم دفع وسيطاتها إلى المكدس، سواء كانت الوظيفة أو التطبيق مسؤولاً عن مسح المكدس، وما إذا تم تمرير أي وسيطات في السجلات.
6. يوفر آلية لتوسيع فئات مكتبة MFC. يمكنك اشتقاق فئات من فئات MFC الموجودة ووضعها في مكتبات الارتباط الحيوي (DLL) الخاصة بملحق MFC لتستخدمها تطبيقات MFC.
7. تسهيل إنشاء الإصدارات الدولية. من خلال وضع الموارد في ملف DLL، يصبح إنشاء إصدارات دولية من تطبيقك أسهل بكثير. يمكنك وضع السلاسل الخاصة بكل إصدار لغة من التطبيق الخاص بك في ملف مورد DLL منفصل، وجعل إصدارات اللغات المختلفة تقوم بتحميل الموارد المناسبة.
أحد العيوب المحتملة لاستخدام DLL هو أن التطبيق غير مستقل؛ فهو يعتمد على وجود وحدة نمطية DLL منفصلة.