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"