ฉันพัฒนาโปรแกรม Windows Forms มาสองสามปีแล้ว ตอนนี้ฉันกำลังมองหา. NET Core (รวมถึง ASP.NET Core MVC) ฉันกำลังค้นหาเทคโนโลยีเดสก์ท็อป GUI ใหม่ ใน Visual Studio 2015 update 3 ฉันไม่เห็นตัวเลือกใด ๆ ในการสร้างแอป GUI ใน. NET Core
ฉันขาดอะไรไป?
ฉันพัฒนาโปรแกรม Windows Forms มาสองสามปีแล้ว ตอนนี้ฉันกำลังมองหา. NET Core (รวมถึง ASP.NET Core MVC) ฉันกำลังค้นหาเทคโนโลยีเดสก์ท็อป GUI ใหม่ ใน Visual Studio 2015 update 3 ฉันไม่เห็นตัวเลือกใด ๆ ในการสร้างแอป GUI ใน. NET Core
ฉันขาดอะไรไป?
คำตอบ:
คุณไม่ได้ขาดอะไรเลย Microsoft ไม่ได้ส่งวิธีที่สมเหตุสมผลในการสร้างแอปพลิเคชัน GUI โดยตรงโดยใช้. NET Core จนกระทั่ง. NET Core 3 แม้ว่าUWP (Universal Windows Platform) จะถูกสร้างขึ้นบางส่วนบน. NET Core
.NET Core 3.0 มีการรองรับ Windows Forms และ WPF แม้ว่าจะเป็น Windows เท่านั้น
.NET 6 จะรวม. NET MAUI ซึ่งจะรองรับแอปพลิเคชันเดสก์ท็อป Windows และ macOS และแอปพลิเคชันมือถือพร้อมกับแอปพลิเคชันบนเดสก์ท็อป Linux ที่ชุมชนรองรับ (ไม่ใช่ MS) .NET 5 จะรวม. NET MAUI เวอร์ชันตัวอย่าง
สำหรับตัวเลือกข้ามแพลตฟอร์มของบุคคลที่สามโปรดดูคำตอบอื่น ๆ
ขณะนี้AvaloniaUIรองรับการทำงานบน. NET Core บน Windows, OS X และ Linux แล้ว XAML การผูกและเทมเพลตการควบคุมรวมอยู่ด้วย
เช่นในการพัฒนาบน macOS ด้วย Rider:
New Solution
รายการเทมเพลตแล้ว!ตอนนี้มันเป็นไปได้ที่จะใช้ Qt, QtQuick และ QML กับ .NET หลักโดยใช้Qml.Net
มีประสิทธิภาพสูง (ไม่ใช่ " P / Invoke chatty") มีคุณลักษณะครบถ้วนและใช้งานได้กับ Linux, OS X และ Windows
ลองดูบล็อกโพสต์ของฉันเพื่อดูว่ามันเปรียบเทียบกับตัวเลือกอื่น ๆ ในปัจจุบันอย่างไร
PS: ฉันเป็นคนเขียน
ทางเลือกหนึ่งคือการใช้ Electron กับ JavaScript, HTML และ CSS สำหรับ UI และสร้างแอปพลิเคชันคอนโซล. NET Core ที่จะโฮสต์เว็บ API สำหรับตรรกะส่วนหลังด้วยตนเอง Electron จะเริ่มแอปพลิเคชันคอนโซลในพื้นหลังซึ่งจะแสดงบริการบนlocalhost: xxxxxxxx
ด้วยวิธีนี้คุณสามารถใช้ตรรกะส่วนหลังทั้งหมดโดยใช้. NET เพื่อให้สามารถเข้าถึงได้ผ่านการร้องขอ HTTP จาก JavaScript
ดูที่โพสต์นี้อธิบายวิธีสร้างแอปพลิเคชันเดสก์ท็อปข้ามแพลตฟอร์มด้วย Electron และ. NET Coreและตรวจสอบโค้ดบนGitHub GitHub
สำหรับการสร้าง UI คอนโซลตามคุณสามารถใช้gui.cs เป็นโอเพ่นซอร์ส (จากMiguel de Icazaผู้สร้างXamarin ) และทำงานบน. NET Core บน Windows, Linux และ macOS
มีส่วนประกอบดังต่อไปนี้:
ภาพหน้าจอตัวอย่าง
.NET Core 3 จะรองรับการสร้างแอปพลิเคชันเดสก์ท็อป Windows ฉันดูการสาธิตเทคโนโลยีเมื่อวานนี้ระหว่างการประชุม. NET
นี่เป็นบล็อกโพสต์เดียวที่ฉันสามารถหาได้ แต่มันแสดงให้เห็นถึงประเด็น: .NET Core 3 และการสนับสนุนสำหรับแอปพลิเคชันเดสก์ท็อป Windows
ใช่มันเป็นไปได้
.NET Core ไม่มีส่วนประกอบใด ๆ สำหรับแอปพลิเคชัน GUI ดั้งเดิมนอกกรอบ อย่างไรก็ตามมีแพ็คเกจ NuGet ที่เรียกว่าElectron.NETตามคำตอบของ Gregor Biswanger
Electronเป็นเฟรมเวิร์กที่ช่วยให้คุณสร้างแอปพลิเคชัน GUI ดั้งเดิมที่ด้านบนของ Node.js Electron.NET เป็นแพ็คเกจ NuGet ที่ให้คุณใช้ Electron และ Node.js จากภายในรหัส. NET Core ของคุณ
ข่าวดีก็คือคุณไม่จำเป็นต้องเรียนรู้ JavaScript, Electron หรือ Node.js เพื่อให้สามารถใช้แพ็คเกจ NuGet ได้ ไฟล์ JS ทำงานภายในแอปพลิเคชันของคุณ แต่จะถูกสร้างขึ้นโดยอัตโนมัติโดยกระบวนการสร้าง
สิ่งที่คุณทำคือสร้างแอป ASP.NET Core MVC ที่ค่อนข้างได้มาตรฐาน ข้อแตกต่างเพียงอย่างเดียวคือแทนที่จะทำงานในเบราว์เซอร์ แต่จะทำงานเป็นแอปที่มีหน้าต่างดั้งเดิม นอกเหนือจากโค้ดเพียงไม่กี่บรรทัดเฉพาะสำหรับแพ็คเกจ Electron.NET แล้วคุณไม่จำเป็นต้องเรียนรู้อะไรจาก ASP.NET Core MVC
หน้านี้ให้คำแนะนำเกี่ยวกับวิธีการใช้งาน นอกจากนี้ยังมีลิงก์บางส่วนไปยังที่เก็บโค้ดตัวอย่าง
tl; dr - ฉันไม่แน่ใจว่าจะเป็นไปได้ที่นักพัฒนา. NET Core จะจัดหาเฟรมเวิร์ก GUI ข้ามแพลตฟอร์ม
ฉันรู้สึกว่าคาดหวังว่าเฟรมเวิร์ก GUI ข้ามแพลตฟอร์มจะรวมอยู่ในเครื่องมืออย่างเป็นทางการ (โดยเฉพาะเวอร์ชันเก่าของเครื่องมือ - คุณพูดถึงว่าคุณกำลังใช้ Visual Studio 2015 update 3) สำหรับ. NET Core เวอร์ชันแรกนั้นเล็กน้อย ก่อนวัยอันควร.
เฟรมเวิร์ก GUI นั้นค่อนข้างหนักและขึ้นอยู่กับฮาร์ดแวร์ที่มีอยู่แล้วบนเครื่องโฮสต์ ใน Windows โดยทั่วไปจะมีตัวจัดการหน้าต่างเดียว (WM) และสภาพแวดล้อมเดสก์ท็อป (DE) ที่ใช้โดยผู้ใช้ส่วนใหญ่ แต่ในการกระจาย Linux ที่แตกต่างกันจำนวนมากซึ่งได้รับการสนับสนุนมี WM และ DE ที่เป็นไปได้จำนวนเท่าใดก็ได้ที่ผู้ใช้ส่วนใหญ่จะ อย่างใดอย่างหนึ่งจะใช้ X-Server หรือWaylandร่วมกับKDE , GNOMEหรือXfce แต่ไม่มีการติดตั้ง Linux ที่เหมือนกัน
ความจริงที่ว่าชุมชนโอเพนซอร์สไม่สามารถจัดการกับการตั้งค่า "มาตรฐาน" สำหรับ VM และ DE ได้หมายความว่านักพัฒนา. NET Core จะสร้างกรอบงาน GUI ได้ยากซึ่งจะทำงานได้กับทุกแพลตฟอร์มและการรวมกันของ DEs และ WMs
ผู้คนจำนวนมากที่นี่มีคำแนะนำที่ดี (จากการใช้ ASP.NET Core เพื่อสร้างเว็บแอปพลิเคชันและใช้เบราว์เซอร์เพื่อแสดงรายการเฟรมเวิร์กข้ามแพลตฟอร์มจำนวนมาก) หากคุณดูเฟรมเวิร์ก GUI ข้ามแพลตฟอร์มที่กล่าวถึงในรายการคุณจะเห็นว่ามันหนักแค่ไหน
อย่างไรก็ตามมีแสงสว่างที่ปลายอุโมงค์เมื่อMiguel de Icaza แสดงให้เห็นว่า Xamarin ทำงานอย่างไร้เดียงสาบน Linux และ macOS ที่. NET Confในปีนี้ (2017 หากคุณกำลังอ่านสิ่งนี้ในอนาคต) ดังนั้นจึงควรลอง เมื่อพร้อม
(แต่คุณจะต้องอัปเกรดจาก Visual Studio 2015 เป็น Visual Studio 2017 เพื่อเข้าถึงฟีเจอร์. NET Core 2.0)
ฉันกำลังทำโครงการที่อาจช่วยได้: https://github.com/gkmo/CarloSharp
แอปพลิเคชันต่อไปนี้เขียนด้วย. NET ด้วย UI ใน HTML, JavaScript และ CSS (เชิงมุม)
คุณสามารถพัฒนาเว็บแอปพลิเคชันด้วย. NET Core และ MVC และห่อหุ้มไว้ในแอป JavaScript สากลของ Windows: Progressive Web Apps บน Windows
ยังคงเป็นเว็บแอปพลิเคชัน แต่เป็นวิธีที่มีน้ำหนักเบามากในการเปลี่ยนเว็บแอปพลิเคชันให้เป็นแอปเดสก์ท็อปโดยไม่ต้องเรียนรู้กรอบงานใหม่หรือ / และพัฒนา UI ใหม่และใช้งานได้ดี
ความไม่สะดวกต่างจากElectronหรือReactXPเช่นผลที่ได้คือแอปพลิเคชัน Windows สากลไม่ใช่แอปพลิเคชันเดสก์ท็อปข้ามแพลตฟอร์ม
สำหรับกรณีพิเศษของแอปพลิเคชัน Windows Forms ที่มีอยู่ :
มีวิธี - แม้ว่าฉันจะไม่รู้ว่ามันทำงานได้ดีแค่ไหน
มันจะไปเช่นนี้
ใช้ Windows แบบฟอร์มการดำเนินงานจากโมโน
พอร์ตไปยัง. NET Core หรือ NetStandard
คอมไพล์แอปพลิเคชัน Windows Forms ของคุณกับ System.Windows.Forms ใหม่
แก้ไขสิ่งที่อาจเสียหายโดย. NET Core
อธิษฐานให้โมโนประกอบชิ้นส่วนที่คุณต้องการอย่างไร้ที่ติ
(หากไม่เป็นเช่นนั้นคุณสามารถหยุดสวดมนต์ได้ตลอดเวลาและส่งคำขอดึงโครงการ Mono พร้อมกับแก้ไข / แก้ไข / คุณลักษณะของคุณ)
นี่คือที่เก็บ CoreFX Windows Forms ของฉัน:
https://github.com/ststeiger/System.CoreFX.Forms
ใช่เป็นไปได้ที่จะพัฒนาแอปพลิเคชันข้ามแพลตฟอร์มเดสก์ท็อป (GUI) สำหรับ Windows, Linux และ macOS โดยใช้ Visual Studio Code, .NET Core, C #, GTK 3 , gtksharp และ Glade ในฐานะผู้ออกแบบ GUI
หากคุณใช้. NET Core 3.0 ขึ้นไปให้ทำตามขั้นตอนต่อไปนี้และคุณก็พร้อมใช้งาน: (ฉันจะใช้. NET Core CLIแต่คุณสามารถใช้ Visual Studio ได้ด้วย):
md MyWinFormsApp
ขั้นตอนที่ไม่บังคับcd MyWinFormsApp
ขั้นตอนที่ไม่บังคับdotnet new sln -n MyWinFormsApp
ขั้นตอนที่ไม่บังคับ แต่เป็นความคิดที่ดีdotnet new winforms -n MyWinFormsApp
ฉันขอโทษนี่ไม่ใช่ทางเลือกdotnet sln add MyWinFormsApp
ทำสิ่งนี้ถ้าคุณทำขั้นตอนที่ # 3โอเคคุณหยุดอ่านคำตอบของฉันและเริ่มเพิ่มโค้ดในMyWinFormsApp
โปรเจ็กต์ได้ แต่ถ้าคุณต้องการที่จะทำงานกับ Form Designerโปรดอ่านต่อไป
MyWinFormsApp.csproj
ไฟล์และเปลี่ยน<TargetFramework>netcoreapp3.1<TargetFramework>
เป็น<TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
(หากคุณใช้netcoreapp3.0
ไม่ต้องกังวลเปลี่ยนเป็น<TargetFrameworks>net472;netcoreapp3.0</TargetFrameworks>
)ItemGroup
<ItemGroup Condition="'$(TargetFramework)' == 'net472'">
<Compile Update="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
</ItemGroup>
หลังจากทำตามขั้นตอนเหล่านี้แล้วนี่คือสิ่งที่คุณควรจะได้รับ:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net472'">
<Compile Update="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Update="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
</ItemGroup>
</Project>
#if NETCOREAPP3_1
Application.SetHighDpiMode(HighDpiMode.SystemAware);
#endif
ตอนนี้คุณสามารถเปิดMyWinFormsApp
โครงการโดยใช้ Visual Studio 2019 ( ฉันคิดว่าคุณสามารถใช้ Visual Studio 2017 ได้เช่นกัน แต่ฉันไม่แน่ใจ ) แล้วดับเบิลคลิกForm1.cs
และคุณจะเห็นสิ่งนี้:
โอเคเปิด Toolbox ( Ctrl+ W,X ) และเริ่มเพิ่มการควบคุมลงในแอปพลิเคชันของคุณและทำให้มันสวย
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการออกแบบที่ออกแบบฟอร์ม Windows .NET หลัก
Windows Forms (และ Visual Designer) พร้อมใช้งานสำหรับ. NET Core (เป็นตัวอย่าง) ตั้งแต่ Visual Studio 2019 16.6 ค่อนข้างดีแม้ว่าบางครั้งฉันต้องเปิด Visual Studio 2019 16.7 Preview เพื่อกำจัดจุดบกพร่องที่น่ารำคาญ
ดูโพสต์บล็อกนี้: Windows Forms Designer for .NET Core Released
นอกจากนี้ Windows Forms ยังเป็นโอเพนซอร์ส: https://github.com/dotnet/winforms