ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ElectronNET.Core 全新架构解读:从 CLI 到 MSBuild、控制台支持与 Dotnet-First 调试范式

ElectronNET.Core 全新架构解读:从 CLI 到 MSBuild、控制台支持与 Dotnet-First 调试范式 桌面应用跨平台【免费下载链接】Electron.NET:electron: Build cross platform desktop apps with ASP.NET Core (Razor Pages, MVC, Blazor).项目地址https://gitcode.com/gh_mirrors/el/Electron.NET点击查看免费下载本文以仓库 docs/Core/Whats-New.md 为骨架系统拆解 ElectronNET.Core 这一代大版本的核心变革构建系统彻底摆脱 CLI 依赖、移除 ASP.NET 强依赖以支持纯控制台应用、以 Dotnet-First 为核心的进程生命周期反转以及由此带来的全新调试与跨平台开发体验。阅读完本文你将掌握新包架构的选型方法、-unpackeddotnet/-unpackedelectron/-dotnetpacked四种启动模式的适用场景与命令、从旧版electron.manifest.json平滑迁移的完整步骤并能结合源码理解八种启动场景背后的进程编排原理。一次彻底的重构Whats New in ElectronNET.CoreElectronNET.Core 不是一次常规的版本升级而是对 Electron.NET 底层架构的整体现代化它解决了多年积累的痛点同时保持了完整的 API 兼容性。它的核心思路可以用一句话概括——让 .NET 开发者用自己熟悉的方式Visual Studio、MSBuild、Hot Reload去构建和调试跨平台桌面应用而不是被 Electron 的 Node.js 工具链牵着走。围绕这一思路这一代版本在四个维度发生了根本性变化构建系统从复杂的 CLI 工具 JSON 配置文件全面转向 MSBuild 项目系统宿主类型不再强制要求 ASP.NET纯 .NET 控制台应用即可构建 Electron 桌面程序进程模型由Electron 先启动并托管 .NET反转为.NET 先启动并托管 ElectronDotnet-First调试体验支持 WSL 跨平台调试、Hot Reload、标准 .NET 输出目录结构bin\net8.0\win-x64。构建系统全面重构从 CLI 复杂化到 MSBuild 简化告别 electronize CLI 与 electron.manifest.json旧版 Electron.NET 依赖一个独立的命令行工具electronize.exe来执行初始化、启动、打包等操作并依靠electron.manifest.json文件声明打包配置。这种模式存在两个明显问题开发流程割裂开发者需要记忆并管理一组 CLI 命令而不是在 IDE 中完成一切配置错误多JSON 文件的手工维护极易引入拼写错误、格式错误和平台相关配置错误。ElectronNET.Core 彻底移除了这套 CLI 依赖。所有配置现在都收敛为MSBuild 项目属性可以直接在 Visual Studio 的项目设计器Project Designer中可视化编辑。好处是双重的开发体验与 .NET 主流程完全一致同时整类由手工 JSON 配置引发的错误在源头被消除。模块化的三包架构新包架构体现了清晰的关注点分离原则分为三个 NuGet 包包名职责适用场景ElectronNET.Core主包包含构建逻辑MSBuild targets/tasks、项目系统扩展、运行时进程编排并自动生成electron-builder.json与package.json主应用项目启动项目、需要完整 Electron.NET 功能或构建期配置的项目ElectronNET.Core.Api纯 API 定义完整的 Electron API 封装无任何构建期依赖提供 TypeScript 风格的类型提示类库项目、仅需 API 访问而无须构建集成的多项目解决方案ElectronNET.Core.AspNetASP.NET 专用运行时组件UseElectron()扩展方法、WebHost 集成、Hot Reload 支持ASP.NET Core 项目MVC / Razor Pages / Blazor依赖关系是单向且收敛的ElectronNET.Core.AspNet → ElectronNET.Core.Api、ElectronNET.Core → ElectronNET.Core.Api而ElectronNET.Core.Api本身零依赖。详细说明见 docs/RelInfo/Package-Description.md。典型引用组合单项目ASP.NETItemGroup PackageReference IncludeElectronNET.Core Version1.0.0 / PackageReference IncludeElectronNET.Core.AspNet Version1.0.0 / /ItemGroup单项目控制台ItemGroup PackageReference IncludeElectronNET.Core Version1.0.0 / /ItemGroup多项目解决方案ASP.NET 启动项目 类库!-- 启动项目 -- ItemGroup PackageReference IncludeElectronNET.Core Version1.0.0 / PackageReference IncludeElectronNET.Core.AspNet Version1.0.0 / /ItemGroup !-- 类库项目 -- ItemGroup PackageReference IncludeElectronNET.Core.Api Version1.0.0 / /ItemGroup多项目解决方案控制台启动项目 类库则去掉ElectronNET.Core.AspNet启动项目只引用ElectronNET.Core。这种模块化设计让项目按需引入既能支撑最简单的控制台应用也能平滑扩展到复杂的 Web 应用。突破 ASP.NET 限制纯控制台应用支持为什么这是一个关键转折旧版 Electron.NET 将 ASP.NET Core 作为硬性前置依赖这意味着想要使用 Electron.NET 就必须引入一整套 Web 托管栈——即使应用只需要一个简单的窗口和一个静态页面。ElectronNET.Core 移除了这一强制要求纯 .NET 控制台应用OutputTypeExe即可构建 Electron 桌面应用。这一改动显著拓宽了适用场景控制台应用支持多种内容来源文件系统 HTML/JS直接从文件系统提供静态 Web 内容远程服务器集成连接已有的 Web 服务器或 API轻量架构不需要 ASP.NET 时可以完全避免其运行时开销简化部署以最小依赖完成打包与分发。控制台应用最小可运行示例以仓库 docs/GettingStarted/Console-App.md 的完整示例为基础一个最小可运行的控制台 Electron 应用如下。第一步创建项目并安装包dotnet new console -n MyElectronApp cd MyElectronApp dotnet add package ElectronNET.Core注意ElectronNET.Core.Api会作为ElectronNET.Core的依赖自动引入无需手动添加。第二步配置 .csprojPropertyGroup OutputTypeExe/OutputType TargetFrameworknet10.0/TargetFramework RuntimeIdentifierwin-x64/RuntimeIdentifier /PropertyGroup ItemGroup PackageReference IncludeElectronNET.Core Version0.6.0 / /ItemGroup警告OutputType属性至关重要它是获得 WSL 调试能力的前提。ASP.NET 项目默认不包含该项从 ASP.NET 迁移到控制台应用时务必补上。第三步实现 Program.csusing System; using System.Threading.Tasks; using ElectronNET.API.Entities; namespace MyElectronApp; public class Program { public static async Task Main(string[] args) { var runtimeController ElectronNetRuntime.RuntimeController; try { // 启动 Electron 运行时 await runtimeController.Start(); await runtimeController.WaitReadyTask; // 初始化 Electron 应用 await InitializeApp(); // 等待关闭信号 await runtimeController.WaitStoppedTask.ConfigureAwait(false); } catch (Exception ex) { Console.WriteLine($Error: {ex.Message}); await runtimeController.Stop().ConfigureAwait(false); await runtimeController.WaitStoppedTask.WaitAsync(TimeSpan.FromSeconds(2)).ConfigureAwait(false); } } private static async Task InitializeApp() { // 创建主窗口 var browserWindow await Electron.WindowManager.CreateWindowAsync( new BrowserWindowOptions { Show false, WebPreferences new WebPreferences { // 使用 file:// 协议加载本地页面时需要这两项 WebSecurity false, AllowRunningInsecureContent true, NodeIntegration false, ContextIsolation true } }); // 加载内容本地文件系统或远程 URL await browserWindow.WebContents.LoadURLAsync(https://example.com); // 页面就绪后再显示窗口 browserWindow.OnReadyToShow () browserWindow.Show(); } }文件系统内容与远程内容加载本地文件方式在项目根目录创建wwwroot/index.htmlvar fileInfo new FileInfo(Environment.ProcessPath); var exeFolder fileInfo.DirectoryName; var htmlPath Path.Combine(exeFolder, wwwroot/index.html); var url new Uri(htmlPath, UriKind.Absolute); await browserWindow.WebContents.LoadFileAsync(url.ToString());远程内容方式await browserWindow.WebContents.LoadURLAsync(https://your-server.com/app);这两种方式分别对应离线自包含与连接现有服务两类典型场景。在 src/ElectronNET.API/Runtime/Data/DotnetAppType.cs 中可以看到运行时对应用类型的枚举定义——ConsoleApp与AspNetCoreApp两种DotnetAppType并存正是控制台与 ASP.NET 双轨支持的直接证据。革命性的开发体验调试体验重构Dotnet-First 与 Hot Reload新的 Dotnet-First 启动模式让开发者可以直接调试 .NET 代码完整使用熟悉的调试工具和 Hot Reload编辑并继续能力不再需要附加到进程或绕行各种受限的调试场景。开发工作流与标准 .NET 开发模式完全对齐。在 src/ElectronNET.API/Runtime/Data/StartupMethod.cs 的枚举注释中UnpackedDotnetFirst被明确描述为用于就地调试 .NET 进程的全新超快启动方式支持 Hot Reload编辑并继续甚至在 WSL 上也能从 Visual Studio 内直接进行。这是对调试体验重构最直接的源码级佐证。从 Windows 直接构建和调试 Linux 应用WSL 集成这一代版本最具突破性的能力之一是通过 WSL 集成在 Windows 的 Visual Studio 中直接构建并调试 Linux 应用在 Windows 上直接构建 Linux 包实时调试 Linux 应用行为无需切换上下文即可验证跨平台功能有把握地部署到 Linux 目标。这打破了 Windows 开发环境与 Linux 部署目标之间的传统壁垒。一等公民的 Runtime IdentifierRIDRID 选择成为项目配置的一等公民开发者可以显式指定目标平台与架构。构建系统会自动按标准 .NET 约定组织输出目录——bin\net8.0\win-x64——取代旧版含义模糊的bin\Desktop布局使多目标构建干净、可预测。架构现代化进程生命周期反转从 Electron-First 到 Dotnet-First旧架构中 Electron 先启动、再拉起并管理 .NET 进程。ElectronNET.Core 将这一关系反转.NET 应用先启动将 Electron 作为子进程运行。由此获得更完善的进程生命周期管理更可靠的应用终止行为更强的错误处理与恢复能力Web 关注点与原生关注点更清晰的分离。源码层面src/ElectronNET.API/Runtime/StartupManager.cs 的DetectAppTypeAndStartup()通过两个检测器组合判定启动方式LaunchOrderDetector.CheckIsLaunchedByDotNet()判断本次由 .NET 还是 Electron 发起UnpackagedDetector.CheckIsUnpackaged()判断是解包模式还是打包模式。两者组合即可得出四种StartupMethod随后由CreateRuntimeController()StartupManager.cs选择对应的运行时控制器Dotnet-First 场景 →RuntimeControllerDotNetFirst由 src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs 实现创建ElectronProcessActive主动拉起 Electron 子进程等待其就绪后再建立SocketBridgeService完成双向通信Electron-First 场景 →RuntimeControllerElectronFirst由 src/ElectronNET.API/Runtime/Controllers/RuntimeControllerElectronFirst.cs 实现通过命令行传入的electronPID参数创建ElectronProcessPassive被动监控进程状态并直接建立 Socket 桥。两种控制器共享LifetimeServiceBase的状态机Starting → Started → Ready → Stopped确保运行时未就绪时无法访问 Socket等约束见 RuntimeControllerBase.cs。八种启动场景打包/解包2 种× 控制台/ASP.NET2 种× Dotnet-First/Electron-First2 种组合出8 种启动场景。Electron-First 启动方式仍然保留可用。完整流程见 docs/Using/Startup-Methods.md解包 Electron-First开发调试 Electron 主进程与 Node.js 代码。命令-unpackedelectron。流程Electron 先启动 → 拉起 .NET 进程 → .NET 回连 Electron → Electron 掌控运行。解包 Dotnet-First开发以 Hot Reload 调试 ASP.NET/C# 代码。命令-unpackeddotnet。流程.NET 先启动 → 拉起 Electron 进程 → Electron 回连 .NET → .NET 掌控运行。打包 Dotnet-First生产.NET 掌控生命周期的部署应用。命令-dotnetpacked。流程.NET 可执行文件先启动 → 从打包文件中拉起 Electron → Electron 从 app.asar 或解包文件加载 → .NET 维持进程控制。打包 Electron-First生产传统 Electron 行为。无需特殊参数。流程Electron 可执行文件先启动 → 从打包文件拉起 .NET → .NET 在 Electron 进程上下文中运行 → Electron 维持 UI 控制。命令行的四个标志-unpackedelectron、-unpackeddotnet、-dotnetpacked、无标志分别对应上述四种模式8 种场景则是在此基础上再加入应用类型Console/ASP.NET的维度。命令行参数的传递与解析Dotnet-First 模式启动 Electron 时会通过命令行把通信所需的参数传给子进程。ElectronNetRuntime.cs 定义了这些参数名常量electronPort默认端口 8000、electronHostSocket 桥监听的回环地址、electronPID、electronAuthToken。StartupManager.cs 的CollectProcessData()会解析这些参数并输出Use Electron Port: ...、Use Auth Token: ...等诊断信息方便开发者排查启动链路。解包开发模式新的解包运行模式直接用常规 .NET 构建产物配合未打包的 Electron 配置运行。它充分利用 .NET 对托管代码与原生代码的增量构建能力显著缩短重建时间改善了开发反馈闭环。更强的技术底座TypeScript 集成与 ElectronHostHook 兼容TypeScript 编译已全面集成到 ASP.NET 工具链中在不同开发环境下构建行为一致。新工具链使用现代 TypeScript 版本并配备 ESLint 配置消除了以往自定义 ElectronHostHook 实现时的兼容性问题。启动画面的处理也得到改进自动路径解析消除了常见配置陷阱同时与既有 ElectronHostHook 代码保持完全向后兼容。仓库中的宿主示例可参考 src/ElectronNET.Host/ElectronHostHook/index.ts 与 src/ElectronNET.WebApp/ElectronHostHook/index.ts。性能优化通过消除不必要的依赖减小了包体积通过智能增量编译提升了构建性能通过优化的构建与启动流程缩短了启动时间。无缝迁移路径向后兼容是设计目标尽管改动巨大ElectronNET.Core 对既有应用保持完整的 API 兼容性。模块化包结构允许渐进式采纳既有的 ElectronHostHook 实现无需修改即可继续工作。清晰的升级步骤官方迁移路径详见 docs/Core/Migration-Guide.md更新包引用为新结构dotnet remove package ElectronNET.API dotnet add package ElectronNET.Core dotnet add package ElectronNET.Core.AspNet # ASP.NET 项目才需要注意ElectronNET.Core.Api已作为ElectronNET.Core的依赖自动包含。删除旧的 manifest 文件。首次构建或 NuGet restore 时会自动在项目的Properties目录生成electron-builder.json。若已有electron.manifest.json打开生成的electron-builder.json→ 定位旧文件中的build段 → 将build段内容不是build键本身复制到新文件 → 用 Visual Studio 项目设计器通过 UI 配置 → 删除旧electron.manifest.json。也可手动编辑例如{ linux: { target: [tar.xz] }, win: { target: [ { target: nsis, arch: x64 } ] }, nsis: { oneClick: true, perMachine: false } }通过 Visual Studio 配置项目属性RID、OutputType、环境等。按自己的节奏采纳新调试工作流。更新启动代码新版UseElectron()增加了回调参数该回调会在正确的时机执行以初始化 Electron UI。现代 ASP.NET CoreWebApplicationusing ElectronNET.API; using ElectronNET.API.Entities; public static void Main(string[] args) { var builder WebApplication.CreateBuilder(args); builder.UseElectron(args, ElectronAppReady); var app builder.Build(); app.Run(); } public static async Task ElectronAppReady() { var browserWindow await Electron.WindowManager.CreateWindowAsync( new BrowserWindowOptions { Show false }); browserWindow.OnReadyToShow () browserWindow.Show(); }传统 ASP.NET CoreIWebHostBuilderusing ElectronNET.API; using ElectronNET.API.Entities; public static void Main(string[] args) { WebHost.CreateDefaultBuilder(args) .UseElectron(args, ElectronAppReady) .UseStartupStartup() .Build() .Run(); } public static async Task ElectronAppReady() { var browserWindow await Electron.WindowManager.CreateWindowAsync( new BrowserWindowOptions { Show false }); browserWindow.OnReadyToShow () browserWindow.Show(); }开发工具与调试设置旧版的watch功能已不再支持取而代之的是带 Hot Reload 的 ASP.NET-First 调试。launchSettings.json 中的新调试配置示例ASP.NET-First 调试推荐Dotnet-First{ ASP.Net (unpackaged): { commandName: Project, commandLineArgs: -unpackeddotnet } }Electron-First 调试调试 Node.js 侧{ Electron (unpackaged): { commandName: Executable, executablePath: node, commandLineArgs: node_modules/electron/cli.js main.js -unpackedelectron } }详细调试流程见 docs/Using/Debugging.md。迁移前请确认已安装 Node.js 22.x 与 .NET 8.0系统要求详见 docs/GettingStarted/System-Requirements.md。常见迁移问题速查构建错误确认 Node.js 22.x 已安装并在 PATH 中必要时清理 NuGet 缓存运行时错误——缺少electron-builder.json触发重新构建或手动 NuGet restore进程无法终止改用 Dotnet-First 启动模式以获得更可靠的清理逻辑。展望解除枷锁后的可能性这次现代化消除了长期制约 Electron.NET 演进的技术债。灵活选版的 Electron、集成的构建系统与跨平台能力为以下方向打下基础更频繁的更新与功能迭代更活跃的社区贡献更完善的工具链与 IDE 集成更广的平台支持。版本独立移除对固定 Electron 版本的刚性耦合后开发者可以按需选择最合适的 Electron 版本构建期校验保证兼容性。这鼓励社区反馈并能更快采纳 Electron 新特性。结语ElectronNET.Core 不只是新增功能而是对 .NET Electron 开发方式的整体再想象消除摩擦点、解除 ASP.NET 强制依赖以支持控制台应用、改善调试体验、实现真正的跨平台开发。它把 Electron.NET 从一个难以上手的框架转变为构建跨平台桌面应用的现代化高效平台为跨平台 .NET 开发的持续演进奠定了坚实基础。赞分享桌面应用跨平台【免费下载链接】Electron.NET:electron: Build cross platform desktop apps with ASP.NET Core (Razor Pages, MVC, Blazor).项目地址https://gitcode.com/gh_mirrors/el/Electron.NET点击查看免费下载相关推荐EasyWeChat 3.0 升级解读全新架构、更低耦合与更友好的调试支持EasyWeChat 3.0 升级解读全新架构、更低耦合与更友好的调试支持 导读 docs/src/3.x/releases.md 是 EasyWeChat后端即时通讯终极OBS直播卡顿解决方案从现象到本质的深度优化指南终极OBS直播卡顿解决方案从现象到本质的深度优化指南 你是否曾经在直播最精彩的时刻遭遇画面卡顿、音频断断续续的尴尬局面作为一款功能强大的开源直播软件OBS音视频直播屏幕录制桌面应用视频Continue CLIcn架构设计规范全解读从开发哲学到权限、模式与协议实现Continue CLI cn 架构设计规范全解读从开发哲学到权限、模式与协议实现 本篇文章围绕 Continue CLI cn 的官方开发规范 sp人工智能AI Agent代码智能体开发工具工具调用RAG上一篇Yuzu模拟器终极性能优化从新手到专家的完整配置指南下一篇fflip 最佳实践Node.js 特性开关的 7 个安全使用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表