انجام Migration بر روی یک اپلیکیشن Windows Forms


در واقع اپلیکیشن eShop نمایانگر یک کاتالوگ محصول است که کاربر می‌تواند عناصری را در آن جستجو و یا فیلتر کرده و به محصول های مختلف سر بزند. از نقطه نظر معماری نرم افزار این اپلیکیشن بر روی یک سرویس WCF سوار گردیده است و با یک Backend Database کار می‌کند.تصویری که در قسمت زیر مشاهده می کنید این اپلیکیشن را نشان می‌دهد:


اگر فایل .csprojمربوط به این اپلیکیشن را باز کنید چیزی شبیه به تصویر زیر مشاهده خواهید کرد:


همانطور که قبلاً نیز خدمتتان عرض کردیم پروژه‌های ایجاد شده با Net Core. کمی فشرده تر هستند و بنابراین نیاز است که در مرحله اول ساختار پروژه را به سبک مبتنی بر SDK موجود در Net Core. منتقل کنیم. به منظور انجام Migration ابتدا در Solution Explorer بر روی پروژه ویندوزفرم مورد نظر راست کلیک میکنیم و گزینه Unload Project و سپس Edit را انتخاب می کنیم. حالمی توانیم فایل .csproj را بروز رسانی کنیم. دقت کنید که در این مرحله تمام محتویات فایل .csproj را حذف می‌کنیم و کدی که در قسمت زیر مشاهده می شود را در آن قرار میدهیم:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">

<PropertyGroup>

<OutputType>WinExe</OutputType>

<TargetFramework>netcoreapp3.1</TargetFramework>

<UseWindowsForms>true</UseWindowsForms>

<GenerateAssemblyInfo>false</GenerateAssemblyInfo>

</PropertyGroup>

</Project>

بعد از انجام این تغییرات فایل مورد نظر را ذخیره کرده و پروژه را Reload کنید. این موضوع باعث می‌شود که قسمت اول از فرآیند Migration یعنی بروزرسانی کردن فایل پروژه انجام بشود و هم اکنون پروژه از Net Core. استفاده می‌کند. اگر در حال حاضر پروژه را کامپایل کنید خطاهایی را در رابطه با WCF دریافت خواهید کرد. این موضوع در تصویر زیر نشان داده شده است:


از آنجایی که کدهای مربوط به WCF Client Reference به صورت خودکار تولید می‌شوند باید آنها را دوباره

تولید کرده و این بار از Net Core. استفاده نمایید. در ادامه Reference.cs را پاک کرده و یک سرویس کلاینت جدید ایجاد کنید. به منظور انجام این کار بر روی گزینه Connected Services راست کلیک کرده و سپس گزینه Add Connected Service را شبیه به تصویرزیر انتخاب کنید:


پس از باز شدن پنجره Connected Services گزینه Microsoft WCF Web Service را شبیه به تصویر زیر انتخاب نمایید:


اگر سرویس WCF مورد نظر شما در همان Solution یکسان قرار دارد می‌توانید با استفاده از گزینه Discover و بدون نیاز به لحاظ کردن Service URL آن را پیدا کنید. این موضوع نیز در تصویر زیر نشان داده شده است:


پس از اینکه توانستید سرویس را به درستی لحاظ کنید ابزار مورد نظر شما به سادگی API Contract مربوط به سرویس را نشان می‌دهد. نام Namespace این سرویس را به eShopServiceReference شبیه به تصویر زیر تغییر بدهید:


پس از آن بر روی دکمه Finish کلیک کرده و بعد از مدتی کد تولید شده را خواهید دید. دقت کنید که سه فایل جدید تولید خواهند شد:


فایل Getting Started که در واقع یک لینک به Github است که در آن اطلاعاتی در رابطه WCF را دریافت خواهید کرد.

فایل json که پارامترهای پیکربندی متصل شدن به سرویس مورد نظر را در خود جای داده است.

فایل cs که همان کد مربوط به WCF Clientمی باشد.


تصویر زیر این سه فایل را نشان می‌دهد:


در این مرحله اگر پروژه را کامپایل کنید خطاهای بسیار زیادی را از فایل های موجود در فولدر Helpers دریافت خواهید کرد. در پروژه قبلی که با فریم ورک Net.ایجاد شده بود این فولدر حاوی فایل هایی بود که در فایل .csproj لحاظ نگردیده بودند. بر اساس سبک مبتنی بر SDK پروژه‌های Net Core. تمامی فایل های موجود دراین فولدر در روند کامپایل شدن برنامه شرکت داده می شوند. به عبارت دیگر پروژه Net Core. تلاش می‌کند که فایل های درون فولدر Helpers را کامپایل کند. از آنجایی که دیگر نیاز به فایل های موجود در این فولدر نداریم می‌توانیم به راحتی آنها را Delete کنیم. حال اگر پروژه را یک بار دیگر کامپایل و سپس اجرا کنید تصاویر مربوط به محصولات را خواهید دید. دلیل این مشکل این است که مسیر مربوط به فایلها کمی تغییر کرده اند. برای حل و فصل این مشکل یک سطح دیگر به مسیر مربوط به عکس اضافه خواهیم کرد و فایل CatalogView.cs را به روزرسانی میکنیم و به جای کد:

string image_name = Environment.CurrentDirectory + “\\..\\..\\Assets\\Images\\Catalog\\” + catalogItems.Picturefilename;

کد زیررا قرار میدهیم:

string image_name = Environment.CurrentDirectory + “\\..\\..\\..\\Assets\\Images\\Catalog\\” + catalogItems.Picturefilename;

پس از انجام این تغییرات می توانید برنامه را اجرا کنید و ببینید که به راحتی بر روی Net Core. اجرا می شود.

منبع:وبسایت پرووید