C#想要實現Electron那樣混合桌面程序可以用以下幾個庫.
本文使用EdgeSharp
開始
EdgeSharp可以直接使用HTML,
也可以配合Blazor、Razor 、SolidJs、Svelte、React、Vue、Angular等前端框架。
直接調用系統中Edge瀏覽器所配套的 WebView2,
無需像Electron那樣打包整個瀏覽器內核,打包后的文件非常小。
更多強大的功能可以查看官方示例,本文只使用了最簡單的HTML
EdgeSharp.Samples/angular-react-vue
創建一個Winform程序
創建后,刪除其他文件,只保留 Program.cs
Nuget安裝相關依賴
<PackageReference Include="EdgeSharp.Core" Version="0.9.0" /> <PackageReference Include="EdgeSharp.WinForms" Version="0.9.0" />
將下面代碼放入Program.cs中
using System.ComponentModel; using System.Windows.Forms; using EdgeSharp.Core; using EdgeSharp.Core.Configuration; using EdgeSharp.Core.Defaults; using EdgeSharp.Core.Infrastructure; using EdgeSharp.WinForms; using HelloEdgeSharp.Controller; using Microsoft.Extensions.DependencyInjection; namespace HelloEdgeSharp { internal static class Program { [STAThread] static void Main() { try { Application.SetHighDpiMode(System.Windows.Forms.HighDpiMode.SystemAware); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var appBuilder = new AppBuilder<Startup>(); ServiceLocator.Bootstrap(appBuilder); var bowserForm = (BrowserForm)ServiceLocator.Current.GetInstance<IBrowserWindow>(); Application.Run(bowserForm); appBuilder?.Stop(); } catch (Exception e) { MessageBox.Show(e.Message); } } } public class Startup : WinFormsStartup { public override void ConfigureServices(IServiceCollection services) { base.ConfigureServices(services); services.AddSingleton<IConfiguration, SampleConfig>(); services.AddSingleton<IBrowserWindow, SampleBrowserForm>(); // 注入 控制器 RegisterActionControllerAssembly(services, typeof(HelloController).Assembly); } public override void Initialize(IServiceProvider serviceProvider) { base.Initialize(serviceProvider); } } internal class SampleConfig : Configuration { public SampleConfig() : base() { // 攔截 api 並導航到 Controller (用RegisterActionControllerAssembly注冊控制器) UrlSchemes.Add(new("http", "api", null, UrlSchemeType.ResourceRequest)); // 靜態文件資源 攔截 導航到 wwwroot UrlSchemes.Add(new("http", "app", "wwwroot", UrlSchemeType.HostToFolder)); // 設置 首頁地址 StartUrl = "http://app/index.html";