مادة:مواضيع متقدمة في إطار دوت نت

عودة للموسوعة

مادة:مواضيع متقدمة في إطار دوت نت

Advance Topics in .NET Framework Programming-part 1 : Assemblies

الجزء الأول: المُجّمعات

مقدمة

يُعتبر موضوع المجمعات (Assemblies ) من المواضيع المتقدمة في إطار عمل دوت نت NET Framework والتي على أساسها تم بناء مخطات النت كافةً, لذلك من الضروري فهم المجمعات بداية لفهم آلية تطبيق البرنامج في .NET وكيف يعمل مترجم C# ,VB.NET,F#,… لأنه في النهاية جميع مترجمات لغات .NET تولد نفس الشيفرة الوسيطة MSIL وما هي بنية الملف التطبيقي EXE الذي يولده لنا مترجم .NET , ثم سنتحدث عن بنية ملف DLL وما هي أوجه التشابه بينه EXE ثم سنتعهد على ماهية المجمعة وبنيتها الداخلية بشيء من التفصيل .

تعريف المجمعات

تُعرّف المجمعة على أنها برنامج نت تطبيقي (أوجزء من برنامج تطبيقي) على هيئة وحدة واحدة, تستخدم المجمعات لتحزيم البرامج المكتوبة بلغة C# أوVB.NET أوأي لغة .NET جديدة لتصبح قابلة للتطبيق وللنقل من لغة إلى أخرى تحت منصة ال .NET (مثلاً يمكن لمبرمج حتى يقوم بعملة على C# ثم يحوله إلى مجمعة DLL)) ليستخدمها مبرمج أخر يعمل على VB.NET أوC++.NET وبذلك لن نحتاج إلى إعادة تطبيق الكود في جميع مرة نحتاجه ).

عند بناء برنامج بلغة .NET سيتولد ملف EXE (طبعاً لا نقصد أنه موجه لنظام التشغيل Windows وحسب إنما هوبرنامج محمول Portable ليعمل على أنظمة مختلفة أي أنه لا يحوي شيفرة محلية خاصة ب windows إنما شيفرة MSIL ومعلومات أخرى والدليل على ذلك هوأنه عند تشغيل برنامج .NET على نظام Windows لا يحوي مخطات ال .NET فأنه سيفشل في تطبيق التطبيق مع حتى Windows يُشغل ملفات تطبيقية! ) وعند بناء مخطة أصناف Class Library سيتولد ملف DLL يمثل مجمعة أيضاً (المجمعة هي ملف EXE أوDLL).

-لنتذكر الآن كيف من الممكن أن يتم تطبيق تطبيق مكتوب بلغة .NET

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

المكونات

المكون هوتعبير عن برنامج فرعي أوجزء من برنامج يحوي شيفرة تطبيقية وليس شيفرة مصدرية مما يعني حتى بإمكان البرامج الأخرى حتى تستخدمه دون الحاجة إلى لإعادة ترجمة الشيفرة المصدرية ودون الحاجة لفهم الشيفرة المصدرية الخاصة بالمجمعة مما يوفر نوعاً من الأمن .

مزايا المكونات

من أبرز مزايا المكونات:

  1. إعادة استخدام البرامج الفرعية في برامج عديدة (في حال قمت ببناء مكبة خاصة بك وأردت حتى تعطيها لصديقك دون حتى يعهد ما هي الخوارزميات المتبعة في كتابة الكود الخاص بك تقدر حتى تعطيه ملف DLL بدلا من ال Source Code).
  2. المجمعة التي قمت ببنائها تقدر حتى تقوم ببيعها ويمكنك حتى تسقطها ب اسم فريد

لتكون وحيدة على مستوى العالم ولحفظ حقوقك من السرقة أوالاستخدام غير المشروع .

نبذة تاريخية عن المُجمّعات

- في هذه الفقرة ما يهمنا ليس هوالتاريخ بحد ذاته ولكن ما يهمنا هوالمشاكل التي كانت تعاني منها الشركات في السابق بسبب صعوبة التعامل مع المكونات وسأقدم مثالا عن COM : - COM (Component Object Model) : هوأول مكون حقيقي قدمته شركة Microsoft مشاكل COM تتلخص في :

  1. صعوبة تفهم وبرمجة COM فهماً حتى المصدر الرئيسي لمكونات COM هولغة C++ بااستخدام مخطة ATL .
  2. تثبيت مكونات COM قاسي جداً ويحتاج إلى معلومات موجودة في مسجل النظام وإزالة تثبيت المكون بحاجة إلى جهد كبير أيضاً .
  3. مشكلة تحديث المكونات حيث لا تستطيع التطبيقات التمييز بين ملفات DLL لها نفس الإصدار وهذا يؤدي إلى أخفاق أحد البرامج عن العمل وهذه المشكلة كانت تعهد ب "جحيم DLL " , ولكن مع .NET تم تجاوز هذه المشاكل بتعريف مقياس حديث للمكونات في .NET


ذاتية الوصف Self Description

  • إن ما يميز مجمعات .NET عن غيرها هوذاتية الوصف ونقصد بهذا حتى جميع المعلومات المتعلقة بالمجمعة موجودة ضمنها , وهذا يعني حتى البرنامج أوالنظام الذي سيستخدم المجمعة ليس بحاجة للحصول على أي معلومات من خارج المجمعة من مسجل النظام أومن أي مكان أخر لأن هذه المعلومات موجودة ضمن المجمعة (عند بناء DLL في C++ WIN32 جميع ملف DLL يأتي معه ملف LIB وهوفهرس للتوابع والإجراءات الموجودة بالمخطة ولكن مع .NET تم تجاوز هذه المشكلة ) .
  • تتعدى مسألة ذاتية الوصف أسماء المناهج (Methods) والكائنات وأنواع البارمترات فالمجمعات تتضمن معلومات عن إصدارات الكائنات كأن نقول مثلاً(Shapes 1.0 يليها Shapes 1.1 ثم Shapes 2.0 ) وهذا يجعل عملية تثبيت مكونات .NET أسهل بكثير من السابق , حتى حتى عملية تحديث المكونات ليست إلا مجرد نسخ ملفات DLL إلى القرص الصلب فقط!.

مجمعات .NET ومخطة أصناف .NET FrameWork

  1. طبعاً ومن البديهي إذا أي برنامج مكتوب ب C# ,VB مثلاً حتماً يفترض أن يستخدم مخطة من مخطات ال .NET , فنحن حدثا استدعينا Method من فضاء الأسماء system فأن محرك زمن التطبيق المشهجر (CLR) سيضمن تحميل المجمعة وفهم التابع الذي قمت باستنادىئه من المخطة التي قمت بتحميلها (في أي namespace وفي أي Class هذا ال method ) وذلك من خلال البيانات الوصفية MetaData(وهذه الفكرة التي نهدف إلى إيصالها من خلال الدروس القادمة) ومن خلال البيانات الوصفية يمكنه فهم المجمعات التي يمكن قمت باستخدامها مثلاً: لنفرض أنك قمت ببناء مجمعة(ملف EXE يمثل برنامجك) واستخدمت المخطة (أوالمجمعة ) System.Drawing.dll عندئذٍ سيقوم ال CLR بقراءة البيانات الوصفية الموجودة في برنامجك(الذي يمثل مجمعة) لفهم فيما إذا كان التطبيق يحتاج إلى مجمعات أخرى وبالتالي يمكن لتطبيق سهل جداً يستحدم تعليمة using واحدة حتى يستخدم عدة مجمعات مختلفة .
  • ملاحظة : إذا تعليمة using لا تقوم بإضافة مرجع للمجمعة وإنما تؤشر إلى فضاء أسماء (namespace) موجود ضمن المجمعة.
  • ولإضافة مرجع إلى مجمعة من قائمة Project نختار Add reference ثم نحدد المجمعة التي نريدها .


التداخل بين لغات البرمجة

قبل البداية أود حتى أطرح السؤال التالي : لما تقوم Microsoft بإنشاء لغات برمجة جديدة مع أنها جميعاً تترجم إلى Managed Code؟ في الحقيقة يوجد أكثر من سبب:

  1. إن الكثير من المبرمجين حساسين جداً للغة التي يبرمجون بها فكل منهم يحب syntax خاص للغة معتاد عليه ولا ننسى الدور الترويجي لجذب جميع المبرمجين للعمل على .NET حيث يمكن لمبرمجي C++ ,C# ,VB ,Delphi وحتى يوجد محاولات لتحقيق التوافقية بين ال .NET وال JAVA وبالتالي يمكن أنتاج منتج بواسطة فريق عمل وكل إنسان يعمل على لغة مختلفة عن الأخرى وبالتالي نكون قد أنتجنا المنتج بواسطة عدة لغات برمجة .


  • الآن سنتحدث عن بعض المزايا الأساسية التي يوفرها .NET Framework التي تمكننا من التداخل بين لغات البرمجة:
  1. محرك زمن التطبيق المشهجر (CLR) والذي يدير تطبيق جميع مجمعات .NET بغض النظر عن اللغة التي خطت بها (CLR مثل ال JVM تماماً بال JAVA)
  2. لغة MSIL (لغة Microsoft المتوسطة) والتي تنتجها جميع مترجمات لغات .NET
  3. مواضفات اللغة المشهجرة CLS حيث يمكن للمكونات المكتوبة بلغة C# مثلاً حتى تستخدم في VB مع إمكانية الوراثة الكاملة بين الأصناف .


بنية المجمعات

تحوي المجمعة على شيفرة تطبيقية للبرنامج أومخطة الأصناف التي أُنشئت منها بالإضافة إلى بيانات وصفية "MetaData" إذا البيانات الوصفية هي بيانات عن المجمعة بحد ذاتها وليست جزءاً من المجمعة ,يكون لمجمعة .NET الشكل التالي:

- تحوي جميع مجمعة على بيان (manifest) يصف محتوى المجمعة يسمى أيضا (ِAssembley MetaData) باعتبار حتى هذا البيان يصف المجمعة ومحتواها , وما هي الوحدات التي تحويها وما هي المجمعات التي تستخدمها ...الخ. سنتحدث عن بيان المجمعة لاحقاً والجدير بالذكر حتى مكونات COM ليس لها بيان كهذا مبيت فيها .

-يستخدم CLR هذ البيان في مجمعة البرنامج عند تطبيقه وذلك لاستعادة المراجع للمجمعات الأخرى كما هومكتوب في بيان المجمعة كاستعادة المخطة System.Console التي تحتوي المنهج writeline() في تطبيقات Console مثلاً .

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

-يمكن فصل المجمعة إلى عدة ملفات ولكن عادة تكون ملف وحيد.


إنشاء المجمعات

1-ننشئ مشروع حديث من النوع Class Library ثم نضيف Add new Item ثم نختار ملف cs إذا كنا نعمل C# وvbإذا كنا نعمل VB.net الأن لدينا Class فارغ ضمن namespace .

2- يمكن حتى تحوي المجمعة أكثر من namespace مثلاً: System.Data تحوي أكثر من namespace مثل System.Data.OLeDB وSystem.Data.SqlClientوفي جميع namespace يمكن حتى نضع Classes وdelegates وEnum وأي بنى معطيات أخرى ثم نقوم ببناء المشروع (Shift+f6= build) فينتج لدينا ملف dll يمثل المجمعة يمكن حتى يعطيه لأي إنسان ليقوم بعمل Add Reference ليستعمله في أي لغة تحت منصة ال .NET

استعراض محتويات المجمعة

يمكن إستعراض محتويات المجمعة (ملف dll أوملف EXE ) من خلال أداة تسمى ILDASM , تسمح هذه الأداة باستعراض محتويات المجمعة (شيفرة MSIL وال MetaData الخاصة بالمجمعة) في الحقيقة غالباً وخلال تطوير التطبيقات لن نحتاج لاستخدام هذه الأداة – فقط للإطلاع-) الأداة موجودة في المسار التالي C:\programfiles\microsoft.net \frameworkSDK\bin ويمكن تشغيلها من ال Commad line الخاص بال visual studio حصراً لأن المتحول البيئي Path قد تم إعداده بشكل تلقائي عند تشغيله ,لذلك نخط:

ildasm<

بيان المجمعة Mainfest

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

صفات المجمعة

بالإضافة إلى المراجع (References) التي يحويها بيان المجمعة فأنه يحوي أيضاً معلومات تخص المجمعة نفسها أيضاً تسمى هذه المعلومات بصفات المجمعة.

الملف Assemblyinfo.cs

قد يتساءل أحدنا ما هي وظيفة الملف Assemblyinfo.cs الذي يتولد مع جميع تطبيق يتم إنشاءه بواسطة Visual Studio يستخدم هذا الملف لضبط صفات المجمعة في بيانها (سنتحدث عن الصفات في الدرس القادم فلا تقلقوا !) تتضمن هذه الصفات اسم المجمعة وإصداراها أمور أخرى سنتحدث عنها في دروس قادمة .. لنلق نظرة على هذا الملف :

<pre>
using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;

 // General Information about an assembly is controlled through the following 
 // set of attributes. Change these attribute values to modify the information
// associated with an assembly.
 [assembly: AssemblyTitle("Training")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("Training")]
 [assembly: AssemblyCopyright("Copyright ©  2010")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]


<pre>
 // Setting ComVisible to false makes the types in this assembly not visible 
 // to COM components.  If you need to access a type in this assembly from 
 // COM, set the ComVisible attribute to true on that type.
 [assembly: ComVisible(false)]
<pre>

 // The following GUID is for the ID of the typelib if this project is exposed to COM
 [assembly: Guid("4baac969-4d1b-45c0-a680-b1fd6477cf66")]
<pre>
 // Version information for an assembly consists of the following four values:
 //
 //      Major Version
 //      Minor Version 
 //      Build Number
 //      Revision
 //
 // You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")] 
 [assembly: AssemblyVersion("1.0.0.0")]
 
 [assembly: AssemblyFileVersion("1.0.0.0")]


كل تعليمة موضوعة ضمن الأقواس المربعة "[]" مثل [assembly:AssemblyVersion("1.0.0.0")] تمثل صفة Attribute -سنتحدث عن الصفات في تفهم لاحق – يكفي حتى نفهم الآن حتى جميع تعليمة من هذه التعليمات تقوم بإعداد خاصية من خصائص المجمعة وتشيرالحدثةassembly في بداية جميع تعليمة حتى الصفة موجهة للمجمعة نفسها وليس لأي صف class أومنهج method كما سنرى في تفهم لاحق . يوفر visual studio هذا الملف كنطقب جاهز يمكن ملأه بالقيم التي تريدها لمجمعتك ويمكن استعراض هذه الصفات من خلال الأداة ildasm من خلال القسم manifest (بيان المجمعة)

أرقام الإصدارات

كلنا قد تحدثنا سابقاً حتى لكل مجمعة اسم ورقم إصدار ومعلومات أخرى وهي كلها متوفرة على شكل Attributes -هذه المعلومات لا تهمنا نحن كمطورين للبرامج وإنما طالما إصدار منتج وقمنا بترقية وتحديث مجمعاتنا سواء كانت dl l أوEXE فأننا نقوم بتوقيع المجمعة ب اسم فريد لضمان حقوق شركتك من السرقة وللسماح للبرامج من التأكد من حتى هذه المجمعة مسقطة (موضوع أمني بحت). للإصدار في مجمعة .NET أربعة أرقام هي : 1-إصدار رئيسي (Major Version ) 2-إصدار ثانوي (Minor Version) 3-رقم البناء (Build Number) 4-رقم الطبعة (Revision)

-الجزء الأول والثاني مثلاً : المجمعة Shape 1.0 الإصدار الرئيسي هو1 والإصدار الثانوي هو0 , الجزءان الأخيران يشكلان تفصيلاً أكبر فرقم البناء يشير إلى رقم بناء المجمعة وهورقم فريد يتغير مع جميع عملية بناء للمجمعة , أما رقم الطبعة فهورقم يستخدم مع ترقيعات المجمعة وهذا يعني حتى المجمعة هي تماماً كإصداراتها السابقة فيما عدا الجديدة تمثل تسليماً لخطأ واحد فقط .

التوافقية بين الإصدارات

يتفحص ال CLR أرقام الإصدارات عند تحميل المجمعات ويتحقق من التوافقية بين إصداراتها ولا تحدث عملية التحقق هذه إلا مع المجمعات المشهجرة-الفقرة التالية -وهي المجمعات التي يتشارك عليها أكثر من تطبيق في آن واحد.

بالعودة إلى بيان المجمعة كنا قد رأينا أنه يحوي رقم إصدار المجمعة بالإضافة إلى مراجع لمجمعات خارجية التي تستخدمها , وعند تطبيق هذه المجمعة (لنفرض أنها ملف EXE يمثل تطبيق يستخدم مجمعات من نوع ملفات dll) عندئذٍ سيقوم CLR بمقارنة رقم إصدارة المجمعة الخارجية (التي يستعملها ملف ال EXE والذي يمثل التطبيق) الموجود في بيان المجمعة (مجمعة تطبيقنا) مع رقم إصدارة المجمعة الخارجية (ملف ال DLL) في بيانها وذللك للتأكد من التوافقية بين الإصدارات.

إذا كان للمجمعة رقم إصدار رئيسي أوثانوي مختلف عندئذٍ يوجد عدم توافق وبالتالي لن ُتحمّل المجمعة .مثلاً : إذا كان التطبيق يستخدم مخطة الأصناف Shape1.1 فأنه لن يعمل مع مخطة الأصناف Shape1.0 أوShape1.2.

المجمعات الخاصة والمشهجرة

المجمعات الخاصة

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

المجمعات المشهجرة

هي مجمعات متوفرة للاستخدام من قبل جميع البرامج على الجهاز فالبرنامج ليس بحاجة لفهم مكان المجمعة لأن جميع المجمعات مخزنة في مجلد .NET خاص يسمى ذاكرة المجمعات العامةGlobal Assembly Cache))أو اختصاراً GACيمثل المسار التالي C:\Windows\assembly , لأن هذه المجمعات متوفرة على مستوى النظام ككل فأن CLR يقوم بعدد منعمليات التفحص على المجمعات المشهجرة للتأكد من إمكانية استخدامها من قبل البرامج التي تطلب ذلك .


الأمن والاسم المركز Security and Strong name

يجب حتى توفر المجمعة إثباتاً أنها لم تستبدل بمجمعة أخرى لها نفس الاسم والإصدار أوقد تم تعديلها بطريقة ما عن طريق الفيروسات مثلاً , يتم ذلك عبر التحقق من حتى المجمعة المشهجرة مسقطة بمفتاح مشفر قبل تحميلها في GAC , لا يساعد هذا المفتاح على حماية المجمعة من الطفيليات كالفيروسات وحسب وإنما يمنع تضارب المجمعات الناتج عن تشابه أسماء وأرقام إصداراتها , ويسمى هذا الهجريب المؤلف من اسم المجمعة وإصداراتها ومفتاحها(العام والخاص) بالاسم المركز(ٍStrong name).

إنشاء المجمعات المشهجرة

لكي نتمكن من إنشاء مجمعة مشهجرة باسم ُمركّز ,علينا توليد زوج من المفاتيح العام والخاص وذلك للتعهد على المجمعة من خلاله عند استخدامها .تًستخدم أنظمة المفاتيح المشفرة المفاتيح العامة والخاصة مفتاحاً خاصاً معروفاً من قبل مرسل الرسالة المشفرة فقط ,أما المفتاح العام فهومتوفر للعالم ككل ,يستخدم CLR هذه المفاتيح للتأكد من تطابقها (المفتاح الموجود في بيان المجمعة (التطبيق)) يجب حتى يطابق المفتاح الموجود في بيان المجمعة المشهجرة التي يستخدمها التطبيق . يمكن توليد اسم مركز عن طريق سطر الأوامر الخاص ب Visual Studio وذلك باختيار Command Window من قائمة Other Windows من القائمة View نخط الأمر التالي : Sn –k keyfile.snk سيؤدي هذا الأمر لإنشاء ملف المفتاح keyfile.snk ولتسجيل (توقيع ) المجمعة بهذا المفتاح فأننا سنعدل الصفة(Attribute) AssemblyKeyfile في أخر جزء من الملف Assemblyinfo.cs لمشروعك كما يلي : [assembly:AssemblyKeyFile("keyfile.snk ")] // يمكننا إضافة مسار المفتاح أيضاً

عادةًقد يكون ملف المفتاح موجود في المجلد debug أوrelease

ملاحظة : يمكننا حتى نضع التعليمة السابقة في الملف المصدري للمجمعة طالما عدم وجود ملف Assemblyinfo.cs كما يلي :


using System.Reflection
using System.Runtime.CompilerServices
using System.Runtime.InteropServices

[assembly:AssemblyKeyFile("keyfile.snk ")] // يمكننا إضافة مسار المفتاح أيضاً

الآن نعيد بناء المجمعة (shift+f6) فنحصل على المطلوب –مجمعة مسقطة –وإذا تفحصنا بيان المجمعة سنجد المفتاح العام الذي تم توليده ووضعه الآن سنقوم بنسخ ملف ال dll الذي نتج لدينا إلى GAC وبذلك نحصل على المطلوب .

ملاحظة : أحياناً نشغل برنامج مثلاً يعتمد على مخطات (مجمعات) عندها يقوم CLR بالبحث عن المجمعة في المجلد المحلي للبرنامج أولاً فإذا لم يجدها فأنه يبحث عنها في GAC في إذا لم يجدها (بيضرب Exception لمستوى نظام التشغيل).


قراءات يُنصح به

  • كتاب Wrox.Press-Professional.C.Sharp.3rd.Edition-2004) مرجع ممتاز جداً جداً (chapter 13: Assemblies)
  • C Sharp COM+ Programming 2001 للمحرر: Derek Beyer هذا الكتاب أكثر من ممتاز- وهوتخصصي جداً .
تاريخ النشر: 2020-06-04 09:20:55
التصنيفات: صفحات بها أخطاء في تعليم الصيغة, مشروع أكاديمية المعرفة

مقالات أخرى من الموسوعة

سحابة الكلمات المفتاحية، مما يبحث عنه الزوار في كشاف:

آخر الأخبار حول العالم

مرصد الأزهر يدين سخرية مجلة «شارل ابدو» من كارثة زلزال تركيا 

المصدر: بوابة أخبار اليوم - مصر التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:22
مستوى الصحة: 53% الأهمية: 68%

الحكومة توافق على عدد من القرارات.. منها 100 مشروع

المصدر: صوت الأمة - مصر التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:21:16
مستوى الصحة: 53% الأهمية: 64%

الحكومة “تتنحى والدولة تتدخل” لمواجهة المضاربين وارتفاع الأسعار

المصدر: الأيام 24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:37
مستوى الصحة: 62% الأهمية: 79%

«الأزهر للفتوى»: تاريخ مصر مليء ببطولات تعزز روح الوطنية والانتماء

المصدر: بوابة أخبار اليوم - مصر التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:27
مستوى الصحة: 46% الأهمية: 69%

الحكومة تصدر 12 قرارًا خلال اجتماع مجلس الوزراء اليوم

المصدر: بوابة أخبار اليوم - مصر التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:16
مستوى الصحة: 51% الأهمية: 61%

تفاصيل حصيلة الرصد الوبائي بالمغرب

المصدر: الأيام 24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:29
مستوى الصحة: 69% الأهمية: 71%

نشرة إنذارية: الأمطار القوية تتهاطل من جديد

المصدر: الأيام 24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:42
مستوى الصحة: 65% الأهمية: 77%

نقابة الفلاحين تقرع جرس الإنذار: المغرب فقد ثلث قطيع الأبقار

المصدر: الأيام 24 - المغرب التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:33
مستوى الصحة: 73% الأهمية: 84%

أرقام قياسية تنتظر الأهلى حال الفوز على ريال مدريد اليوم

المصدر: صوت الأمة - مصر التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:21:11
مستوى الصحة: 49% الأهمية: 69%

هزة ارتدادية جديدة تضرب مدينة أنطاكيا التركية - أخبار العالم

المصدر: الوطن - مصر التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:41
مستوى الصحة: 60% الأهمية: 51%

اختبار إلكتروني لطلاب من إندونسيا للالتحاق بالأزهر الشريف 

المصدر: بوابة أخبار اليوم - مصر التصنيف: سياسة
تاريخ الخبر: 2023-02-08 18:20:19
مستوى الصحة: 47% الأهمية: 68%

تحميل تطبيق المنصة العربية