
بدءًا من Visual Studio 2019 Preview 4 و RC ، سنقوم بتعديل كيفية التعامل مع إصدارات C # في أدوات .NET. اقرأ المزيد أدناه <cut>.
ملخص التغييرات
أولاً ، نضيف قيمتين جديدتين لإصدار اللغة ( LangVersion ): LatestMajor و Preview . إليك كيفية تكديسها بقائمة القيم المدعومة حاليًا:
Langversion | معنى |
---|
LatestMajor | أحدث إصدار مدعوم من لغة C # الرئيسية |
معاينة | أحدث إصدار متوفر للمعاينة C # |
الأحدث | أحدث إصدار مدعوم من لغة C # (بما في ذلك الإصدار الثانوي) |
ISO-1 | C # 1.0 / 1.2 |
ISO-2 | C # 2.0 |
3 | C # 3.0 |
4 | C # 4.0 |
5 | C # 5.0 |
6 | C # 6.0 |
7 | سي # 7.0 |
7.1 | C # 7.1 |
7.2 | C # 7.2 |
7.3 | C # 7.3 |
8.0 | C # 8.0 |
عندما لا يتم تحديد LangVersion ، يتم الآن تحديد المعنى الافتراضي من خلال الإطار الهدف لمشروعك. عندما تستهدف إطار عمل معاينة يحتوي أيضًا على نسخة معاينة C # متوافقة ، يكون إصدار المعاينة هو الافتراضي. إذا لم تستهدف إطار المعاينة ، فسيتم اختيار الأحدث .
تجربة عندما يكون C # 8.0 في المعاينة
تشرح السيناريوهات التالية كيف سيتم تفسير إصدار C # الافتراضي بينما لا يزال الإصدار C # 8.0 قيد المعاينة.
استهداف معاينة netcoreapp3.0 أو معاينة netstandard2.1
إصدار اللغة الافتراضي المختار في هذا السيناريو هو المعاينة . تستند ميزات C # 8.0 التي يمكنك الوصول إليها تمامًا إلى إصدار برنامج التحويل البرمجي (وبالتالي .NET SDK) الذي تستخدمه. أثناء استخدامك للمعاينات المستقبلية ، قد تحصل على المزيد من الميزات (أو قرصها قليلاً). عندما تنشئ مشروعًا ، سوف يصدر .NET SDK تحذيرًا بأن كل هذا لا يزال قيد المعاينة.
استهداف .NET Framework
إصدار اللغة الافتراضي المختار في هذا السيناريو هو الأحدث . أي استخدام لميزة C # 8.0 هو خطأ في الترجمة. ستطالبك أدوات Visual Studio بإصلاح سريع يمكنه تغيير إصدار اللغة للمشروع أو الحل عند مواجهة أحد هذه الأخطاء. نظرًا لأن بعض الميزات تتطلب أنواعًا أساسية أو ميزات وقت تشغيل غير متوفرة في .NET Framework ، مثل "أعضاء الواجهة الافتراضية" ، فقد يستمر ظهور خطأ لتلك الميزات عند استهداف .NET Framework.
المعاينة متعددة الاستهداف netcoreapp3.0 أو معاينة netstandard2.1 و .NET Framework
بالنسبة إلى أهداف معاينة netcoreapp3.0 / netstandard2.1 ، فإن إصدار اللغة هو Preview . يتم إرسال تحذير على الإنشاء من .NET SDK. بالنسبة إلى .NET Framework الهدف ، إصدار اللغة هو الأحدث .
يتم استخدام LangVersion صريح
إذا قمت بتعيين قيمة LangVersion بشكل صريح ، فسيتم احترام ذلك وسيتم تجاهل السلوك الافتراضي المذكور مسبقًا.
تجربة عندما يكون C # 8.0 و .NET Core 3.0 من GA
في النهاية ، سيتم شحن الإصدار C # 8.0 و .NET Core 3.0 في إصدار GA-quality. إليك ما سيتم تعيين قيم LangVersion ذات الصلة إليه في ذلك الوقت:
Langversion | معنى |
---|
الأحدث | 8.0 |
LatestMajor | 8.0 |
معاينة | لم تحدد بعد |
سيتم التعامل مع المشروعات التي لا تحدد LangVersion كما لو كانت الأحدث عندما تكون C # 8.0 هي GA.
إذا أنشأت مشروعًا لمعاينة C # 8.0 تستهدف معاينة .NET Core 3.0 أو معاينة .NET Standard 2.1 ، ولم تحدد LangVersion أيضًا ، فسيكون الأمر كما لو تم اختيار Last. لن يتم اشتراكك في المعاينة تحت أي سيناريو بمجرد أن يكون C # 8.0 و .NET Core 3.0 GA.
في وقت كتابة هذا التقرير ، لم تكن هناك خطة لمعاينة C # عندما تكون C # 8.0 عبارة عن GA. في نهاية المطاف ، سوف يتم شحن المعاينة وسيكون لدينا منشور في المدونة يوضح ذلك.
الأساس المنطقي
حتى هذه النقطة ، كان إصدار C # الافتراضي المستخدم في Visual Studio مكافئًا لـ LatestMajor . لقد كان هذا مشكلة لسببين:
- يتطور C # الآن بين دورات إصدار Visual Studio ، لكن المشروعات الجديدة في Visual Studio ستظل افتراضيًا إلى إصدار قديم من C #.
- تعتبر معاينة C # 8.0 اختيارًا أفضل للمشاريع التي تستهدف معاينة .NET Core 3.0 ، ولكن لم تكن هناك طريقة لجعلها افتراضيًا دون جعلها أيضًا الافتراضية للمشروعات التي لم تكن تستهدف معاينة .NET Core 3.0.
بشكل عام ، نظرًا لأننا نطور C # ونواصل إصدار المزيد من الميزات التي تتوافق مع إصدار .NET Core في المستقبل ، فنحن نريد التأكد من أنه يمكنك استخدام هذه الميزات بسهولة تامة. يتيح لك هذا أيضًا استخدام الميزات في وقت مبكر من دورة حياة التطوير ، مما يزيد من الوقت الذي يمكن أن تؤثر فيه التعليقات القابلة للتنفيذ على الميزة على تصميمها.
الدعم والتوافق لميزات المعاينة
طريقة التفكير في الدعم مختلفة أيضًا. للسماح باستخدام ميزات معاينة C # 8.0 ضمن Visual Studio 2019 تم إصداره ، يتم تمييز اهتمامات الدعم والتوافق بالمعاينة مقابل. الميزات التي تم إصدارها:
- أي C # 7.3 وميزة أو سلوك أقل مدعوم بالكامل ومتوافق تمامًا. لا تغيير عما هو موجود اليوم.
- أي ميزة معاينة C # 8.0 غير مدعومة.
- لا يوجد أي ضمان للتوافق من معاينة C # 8.0 إلى أخرى.
باختصار ، إذا استخدمت معاينة C # 8.0 في Visual Studio 2019 ، فقد تتغير بعض الميزات والسلوك من الآن وحتى عندما يتم إصدار C # 8.0 بالكامل.
القرصنة سعيدة!