منذ أن بدأت العمل مع المجتمع على نقل تطبيقات سطح المكتب من .NET Framework إلى .NET Core ، لاحظت أن هناك "معسكرين": يريد ممثلو أحدهم قائمة بسيطة وقصيرة جدًا من التعليمات لنقل تطبيقاتهم إلى .NET Core ، في حين أن ممثلي شخص آخر يفضلون اتباع نهج أكثر مبدئية مع الكثير من المعلومات الأولية. بدلاً من كتابة مستند مثل "Swiss Army Knife" ، سنقوم بنشر مدونتين ، واحدة لكل "معسكر":
- هذا المنصب هو حالة بسيطة . إنه يركز على الإرشادات البسيطة والتطبيقات الصغيرة وينظر في أسهل طريقة لنقل تطبيق إلى .NET Core.
- سننشر لاحقًا منشورًا آخر للحالات الأكثر تعقيدًا . سوف يركز على التطبيقات غير التافهة ، مثل تطبيق WPF مع التبعيات على WCF وحزم واجهة المستخدم لجهة خارجية.
إذا كنت تفضل مشاهدة مقطع فيديو بدلاً من قراءته ، فإليك مقطع فيديو أفعل فيه كل ما هو موضح أدناه.
الخطوة 0 - المتطلبات الأساسية
لنقل تطبيقات سطح المكتب إلى Core ، ستحتاج إلى
.NET Core 3 و Visual Studio 2019.
الخطوة 1 - إطلاق محلل قابلية
قبل النقل ، يجب عليك التحقق من مدى توافق تطبيقك مع .NET Core. للقيام بذلك ، قم بتنزيل وتشغيل
.NET Portability Analyzer .
- في علامة التبويب الأولى ، ملخص القدرة ، إذا كانت جميع القيم الموجودة في العمود .NET Core 100٪ (يتم تمييز كل شيء باللون الأخضر) ، يكون الكود متوافقًا تمامًا ، ويمكنك الانتقال إلى الخطوة 2.
- إذا كانت لديك قيم أقل من 100٪ ، فراجع أولاً جميع المجموعات التي ليست جزءًا من التطبيق الخاص بك. تحتاج إلى التحقق منها فيما إذا كان مؤلفوها يوفرون إصدارات لـ .NET Core أو .NET Standard.
- انظر الآن إلى الجزء الآخر من التجميعات التي تأتي من التعليمات البرمجية الخاصة بك. إذا لم يتم تحديد أي تجميعات في تقرير قابلية النقل ، فانتقل إلى الخطوة 2. بمجرد القيام بذلك ، افتح علامة التبويب "تفاصيل" ، وقم بتصفية الجدول بالنقر فوق عمود التجميع والتركيز فقط على المجموعات المرتبطة بالتطبيق الخاص بك. استعرض القائمة وتعيد قراءة التعليمات البرمجية للتوقف عن استخدام واجهة برمجة التطبيقات أو استبدالها باستخدام واجهة برمجة التطبيقات مع بدائل .NET Core.

الخطوة 2 - ترحيل .csproj إلى SDK Style
في
Solution Explorer ، انقر بزر الماوس الأيمن فوق مشروعك (ليس حلاً!). هل ترى
تحرير ملف المشروع ؟ إذا كان الأمر كذلك ، فأنت تستخدم بالفعل ملف مشروع نمط SDK ، لذلك يجب عليك الانتقال إلى
الخطوة 3 . إذا لم يكن كذلك ، فقم بما يلي:
- تحقق في Solution Explorer إذا كان المشروع يحتوي على ملف package.config . إذا لم يكن الأمر كذلك ، فلن يكون هناك إجراء مطلوب ، ولكن إذا كان الأمر كذلك ، فانقر بزر الماوس الأيمن على الحزم . قم بتكوين وحدد ترحيل حزم . ثم انقر فوق موافق .
- افتح ملف المشروع بالنقر بزر الماوس الأيمن على المشروع وتحديد إلغاء تحميل المشروع . ثم انقر بزر الماوس الأيمن فوق المشروع وحدد تحرير <اسم مشروعك> .csproj .
- انسخ محتويات ملف المشروع في مكان ما ، على سبيل المثال ، إلى "المفكرة" ، بحيث يمكنك البحث عنها لاحقًا.
- احذف كل شيء من ملف المشروع المفتوح في Visual Studio (أعرف أن هذا يبدو عدوانيًا ، لكننا سنضيف فقط المحتوى الضروري من النسخة التي أنشأناها للتو في بضع خطوات). بدلاً من حذف النص فقط ، قم بلصق التعليمة البرمجية التالية.
لتطبيق على WinForms:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project>
لتطبيق WPF:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project>
- البحث عن المفكرة PackageReference . إذا لم تجد شيئًا ، فاستمر. إذا عثرت على PackageReference ، انسخ ItemGroup بالكامل الذي يحتوي على PackageReference في ملف المشروع الذي تم فتحه في Visual Studio ، أسفل الخطوط المدرجة مباشرة في الخطوة أعلاه. القيام بذلك لكل عنصر PackageReference الذي وجدته. يجب أن تبدو الكتلة المنسوخة كما يلي:
<ItemGroup> <PackageReference Include="NUnit"> <Version>3.11.0</Version> </PackageReference> </ItemGroup>
- الآن تفعل الشيء نفسه على النحو الوارد أعلاه ل ProjectReference . إذا لم تجد شيئًا ، فاستمر. إذا وجدت أي عناصر ProjectReference ، فإنها ستبدو كما يلي:
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj"> <Project>{7bce0d50-17fe-4fda-b6b7-e7960aed8ac2}</Project> <Name>WindowsFormsApp1</Name> </ProjectReference> </ItemGroup>
- يمكنك حذف الأسطر التي تحتوي على خصائص Project و Name ، نظرًا لعدم الحاجة إليها في النمط الجديد لملف المشروع. لذلك بالنسبة لكل ProjectReference الذي وجدته (إن وجد) ، انسخ فقط ItemGroup و ProjectReference .
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj" /> </ItemGroup>
- حفظ كل شيء. أغلق الملف .csproj في Visual Studio. انقر بزر الماوس الأيمن فوق المشروع في Solution Explorer وحدد Reload Project . إعادة البناء وتأكد من عدم وجود أخطاء.
نبأ عظيم ، لقد قمت فقط بتحديث ملف المشروع الخاص بك إلى نمط SDK جديد! لا يزال المشروع مستهدفًا في .NET Framework ، ولكن يمكنك الآن إعادة تكوينه على .NET Core.
الخطوة 3 - Retarget على. NET الأساسية
افتح ملف المشروع بالنقر فوقه نقرًا مزدوجًا في
Solution Explorer . ابحث عن خاصية
TargetFramework وقم بتغيير القيمة إلى
netcoreapp3.0 . يجب أن يبدو ملف مشروعك الآن كما يلي:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> ... </PropertyGroup> ... </Project>
بناء وتشغيل المشروع الخاص بك.
تهانينا ، لقد قمت بترحيلها إلى .NET Core 3!إصلاح الخلل
إذا واجهت أخطاء مثل
The type or namespace <some name> could not be found
أو
The name <some name> does not exist in the current context
وإذا تم عرض تقرير إمكانية النقل الخاص بك باللون الأخضر ، فيجب أن تعلم أنه من السهل إصلاحه ببساطة بإضافة حزمة NuGet مع المكتبة المناسبة. إذا لم تتمكن من العثور على حزمة NuGet مع المكتبة المفقودة ، فحاول الاتصال بـ
Microsoft.Windows.Compatibility . تضيف هذه الحزمة ~ 21K .NET API من .NET Framework.
العمل مع المصممين
على الرغم من أنه يمكن تحرير واجهة المستخدم للتطبيق باستخدام التعليمات البرمجية ، إلا أن المطورين يفضلون عادةً استخدام المنشئات المرئية. باستخدام .NET Core ، كان علينا تغيير بنية عمل المصممين باستخدام مشاريع .NET Core:
- إن WPF Designer في وضع المعاينة بالفعل ، ونحن نعمل على إضافة ميزات إضافية إليه.
- سيتوفر مصمم WinForms لـ .NET Core لاحقًا ، لذلك في الوقت الحالي ، يمكنك استخدام WinForms Designer لـ .NET Framework كحل بديل.
فيما يلي كيفية استخدام مُنشئ WinForms لبرنامج .NET Framework:
- انسخ ملف .csproj (على سبيل المثال ، MyProject.csproj ) ، وقم بإعطائه اسمًا مختلفًا ، على سبيل المثال ، MyProject.NetFramework.csproj ، ثم ضعه بجوار ملف المشروع الموجود.
- تأكد من إغلاق المشروع في Visual Studio ، افتح مشروع جديد MyProject.NetFramework.csproj .
في Solution Explorer ، انقر بزر الماوس الأيمن فوق المشروع وحدد " خصائص" . في علامة تبويب التطبيق (يجب فتحها افتراضيًا) ، اضبط اسم التجميع ومساحة الاسم الافتراضية على نفس القيم كما في المشروع الأصلي (أزل ".NetFramework" من الأسماء).
احفظ هذا الحل بجوار الحل الحالي.
- افتح ملف مشروع جديد وقم بتغيير TargetFramework إلى net472 .
- الآن وبعد أن تحتاج إلى استخدام مُنشئ WinForms ، قم بتحميل المشروع الخاص بك من MyProject.NetFramework.csproj ويمكنك البدء في العمل مع مُنشئ .NET Framework. عند الانتهاء من ذلك ، أغلق وفتح مشروعك باستخدام ملف مشروع .NET Core.
- هذا مجرد حل حتى يتم إنشاء مُنشئ WinForms لـ .NET Core.
لماذا التبديل إلى .NET Core؟
شاهد مقطع فيديو يتحدث فيه Scott Hunter عن جميع التحديثات الأخيرة على .NET Core 3.
الترحيل إلى .NET Core 3.0 .