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

الخطوة 2 - الترحيل إلى نمط SDK .csproj
في Solution Explorer ، انقر بزر الماوس الأيمن على مشروعك (وليس على الحل!). هل ترى تحرير ملف المشروع ؟ إذا قمت بذلك ، فأنت تستخدم بالفعل ملف مشروع SDK ، لذا يجب عليك الانتقال إلى الخطوة 3 . إذا لم يكن كذلك ، فقم بما يلي.
- تحقق في Solution Explorer إذا كان مشروعك يحتوي على ملف
packages.config
. إذا لم تقم بذلك ، فلن تكون هناك حاجة إلى أي إجراء ، إذا قمت بذلك ، انقر بزر الماوس الأيمن على packages.config
. قم بتكوين واختر Migrate package.config to PackageReference . ثم انقر فوق موافق . - افتح ملف المشروع الخاص بك عن طريق النقر بزر الماوس الأيمن على المشروع واختر إلغاء تحميل المشروع . ثم انقر بزر الماوس الأيمن على المشروع واختر تحرير <اسم مشروعك> .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
، فإنها ستبدو ProjectReference
.
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj"> <Project>{7bce0d50-17fe-4fda-b6b7-e7960aed8ac2}</Project> <Name>WindowsFormsApp1</Name> </ProjectReference> </ItemGroup>
- يمكنك إزالة الأسطر التي تحتوي على خصائص
<Project>
و <Name>
، نظرًا لعدم الحاجة إليها في نمط ملف المشروع الجديد. لذلك بالنسبة لكل ProjectReference
الذي وجدته (إن وجد) ، انسخ ItemGroup
و ItemGroup
فقط مثل هذا.
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj" /> </ItemGroup>
حفظ كل شيء. أغلق الملف .csproj في Visual Studio. انقر بزر الماوس الأيمن على مشروعك في Solution Explorer وحدد Reload Project . إعادة البناء وتأكد من عدم وجود أخطاء.
نبأ عظيم ، لقد قمت فقط بتحديث ملف المشروع الخاص بك إلى نمط SDK الجديد! لا يزال المشروع يستهدف .NET Framework ، ولكن الآن ستتمكن من إعادة توجيهه إلى .NET Core.
الخطوة 3 - إعادة توجيه إلى .NET Core
افتح ملف المشروع بالنقر المزدوج على مشروعك في 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 APIs .NET من .NET Framework.
العمل مع المصممين
على الرغم من أنه من الممكن تحرير واجهة المستخدم الخاصة بالتطبيق الخاص بك عن طريق التعليمات البرمجية ، إلا أن المطورين يفضلون عادة استخدام المصممين المرئيين. باستخدام .NET Core ، كان علينا البحث عن الطريقة التي يعمل بها المصممون مع مشاريع .NET Core:
- مصمم WPF قيد المعاينة بالفعل ونعمل على إضافة المزيد من الوظائف إليه.
- سيكون مصمم WinForms لـ .NET Core متاحًا لاحقًا ، وفي الوقت نفسه ، يمكنك استخدام مصمم .NET Framework WinForms كحل بديل.
فيما يلي كيفية استخدام مصمم .NET Framework WinForms:
- انسخ ملف .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 الأساسية
تحقق من الفيديو حيث نتحدث مع Scott Hunter عن جميع الأشياء الجديدة التي تأتي مع .NET Core 3 Porting إلى .NET Core 3.0 .