ARTICLE DETAIL

资讯详情

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

Electron.NET 迁移指南:从旧版升级到 ElectronNET.Core 的完整实战手册

Electron.NET 迁移指南:从旧版升级到 ElectronNET.Core 的完整实战手册 桌面应用跨平台【免费下载链接】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/Migration-Guide.md 为骨架系统讲解从旧版 Electron.NETElectronNET.APIelectron.manifest.json CLI 工具迁移到新一代ElectronNET.Core的完整路径涉及 NuGet 包结构替换、electron-builder.json自动配置、UseElectron()回调式启动改造、调试/打包流程升级以及常见问题排查。读完本文你将能够独立完成一次生产级迁移并掌握迁移后“.NET 优先”进程架构下的开发、调试与跨平台发布技能。迁移前准备环境与项目盘点迁移本身并不复杂但新旧两代框架在构建系统、运行时架构和工具链上存在根本差异因此务必先做好三件事备份你的项目——迁移过程中会删除旧的electron.manifest.json、替换 NuGet 包并改写Program.cs一个可回退的工作备份是底线保障。更新开发工具——安装 Node.js 22.x 与 .NET 8.0。记录当前环境——确认你当前的 Electron 与 ASP.NET 版本便于迁移后对照验证行为是否一致。按照 System Requirements 的说明新框架要求的环境基线是项目要求.NET SDK.NET 8.0 或更高版本Node.js22.xElectronNET.Core 明确要求 22.x务必升级IDEVisual Studio 2022推荐或其他 .NET IDE支持的操作系统Windows 10/11x64、ARM64、macOS 11Intel、Apple Silicon、Linuxglibc 2.31 的大多数发行版Node.js 的安装与升级可参考以下方式Windows从官方安装包安装后运行node --version确认输出为v22.x.x。Linux推荐使用 Node Version ManagerNVMcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash source ~/.bashrc nvm install 22 nvm use 22如果你计划在 Windows 上为 Linux 目标做开发调试还需要安装 WSL2并在 WSL 内也安装 Node.js 22.xLTS。Visual Studio 在 WSL 上调试时会自动安装 .NET其他场景则需要你在 WSL 中手动安装匹配的 .NET SDK。Step 1更新 NuGet 包旧版项目引用的是ElectronNET.API单一包。迁移的第一步是先卸载旧包dotnet remove package ElectronNET.API然后安装新架构下的包dotnet add package ElectronNET.Core dotnet add package ElectronNET.Core.AspNet # 仅 ASP.NET 项目需要注意ElectronNET.Core会自动把 API 包作为依赖引入无需单独引用。完整的包结构说明见 Package Description。理解新包结构一个包拆成三个新架构把“构建集成”与“API 定义”彻底分离拆分为三个职责单一的包ElectronNET.Core主包包含 MSBuild 目标与任务、Visual Studio 项目系统集成设计器、运行时进程生命周期编排、自动生成electron-builder.json与package.json的能力。用于启动项目、需要完整 Electron.NET 功能的项目。ElectronNET.Core.ApiAPI 包纯粹的 Electron API 封装与类型定义不含任何构建依赖跨 Windows/macOS/Linux 平台。适用于类库项目、仅需 API 访问而不需要构建集成的场景以及多项目解决方案中除启动项目以外的其他项目。ElectronNET.Core.AspNetASP.NET 集成包提供UseElectron()扩展方法、WebHost 集成、Hot Reload 支持等 ASP.NET 专用运行时组件。适用于基于 MVC、Razor Pages 或 Blazor 的 ASP.NET Core 项目。依赖链清晰且无环ElectronNET.Core→ElectronNET.Core.ApiElectronNET.Core.AspNet→ElectronNET.Core.ApiElectronNET.Core.Api本身没有任何依赖。按项目形态选择引用方式单项目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启动项目引用ElectronNET.CoreElectronNET.Core.AspNet其余类库项目只引用ElectronNET.Core.Api从而避免非启动项目被带入整套构建逻辑。从源码看控制台应用是 ElectronNET.Core 新引入的一等公民——ElectronNET.API/Runtime/StartupManager.cs会根据AssemblyMetadata中的IsAspNet标记判断DotnetAppType是 ASP.NET 应用还是普通 .NET 应用非 ASP.NET 应用直接创建对应的运行时控制器。这意味着迁移后你甚至可以脱离 ASP.NET仅用最简单的dotnet new console项目承载 Electron 桌面应用。Step 2配置项目设置从 manifest 到 electron-builder.json自动生成的配置ElectronNET.Core会在首次构建或 NuGet restore 时自动在你的项目Properties文件夹中生成electron-builder.json。对基础场景而言无需任何手工配置。这与旧版“手工维护 JSON CLI 参数”的模式有本质区别配置错误被整体消灭同时移除了对独立 CLI 工具electronize.exe的依赖。迁移旧的 electron.manifest.json如果你有旧版遗留的electron.manifest.json按如下步骤迁移打开项目生成的Properties/electron-builder.json在旧electron.manifest.json中找到build节点把build 节点的内容注意不是build这个键本身复制到新的electron-builder.json中使用 Visual Studio 项目设计器通过 UI 配置 Electron 设置删除旧的electron.manifest.json文件。手工配置 electron-builder.json如果你偏好手工编辑也可以在Properties/electron-builder.json中直接写配置示例{ linux: { target: [tar.xz] }, win: { target: [ { target: nsis, arch: x64 } ] }, nsis: { oneClick: true, perMachine: false } }含义说明linux.targetLinux 平台产物格式如tar.xz也可配AppImage、deb、rpm等win.targetWindows 平台产物格式这里是 NSIS 安装器且指定x64架构nsis.oneClick/nsis.perMachineNSIS 安装器的“一键安装”模式与“是否按每台机器安装”。更完整的 electron-builder 选项可查阅对应工具的官方文档。修改启动Launch设置ElectronNET.Core不再依赖独立的 CLI 工具来启动应用而是通过 Visual Studio 的启动配置文件Properties/launchSettings.json选择ASP.NET-first.NET 优先或Electron-firstElectron 优先两种调试/启动方式。具体配置方法见 Debugging 与 Startup Methods。值得注意的是新框架支持8 种启动场景覆盖“打包/未打包 × 控制台/ASP.NET × dotnet-first/electron-first”的全部组合。框架在运行时通过 StartupManager 自动检测并选择是否由 .NET 启动LaunchOrderDetector.CheckIsLaunchedByDotNet()是否处于未打包状态UnpackagedDetector.CheckIsUnpackaged()两个布尔量组合出UnpackedDotnetFirst、PackagedDotnetFirst、UnpackedElectronFirst、PackagedElectronFirst四种启动方式枚举定义见 StartupMethod.cs。与旧版“Electron 永远先启动”不同新架构默认推荐.NET 优先由 .NET 作为父进程管理 Electron 子进程的生命周期带来更可靠的退出清理与错误恢复。Step 3更新启动代码UseElectron() 回调改造旧版UseElectron(args)不带回调窗口创建时机不好控制。新版要求在UseElectron(args, onAppReadyCallback)中传入回调——该回调会在 Electron 就绪的正确时机执行用于初始化你的 Electron UI。现代 ASP.NET CoreWebApplication / 最小宿主模型using 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 CoreIWebHostBuilder Startup 类using 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(); }回调的四种重载与源码佐证从 WebApplicationBuilderExtensions.cs 与 WebHostBuilderExtensions.cs 的源码可以看到UseElectron的第二个参数提供了四种异步回调签名你可以按需选用回调签名用途FuncTask无参数最简单的窗口初始化场景上文示例即此形式Funcstring[], Task需要访问传递给 Electron 的进程参数processArgsFuncIServiceProvider, Task需要从 DI 容器解析服务后再初始化窗口FuncIServiceProvider, string[], Task同时需要 DI 服务与进程参数在 WebHost 模型下回调会被包装为AppReadyCallbackResolver注册为单例见WebHostBuilderExtensions的ConfigureServices分支并在 ASP.NET 生命周期适配器AspNetLifetimeAdapter的驱动下于正确的时机触发。在回调中加载指定 URL读取真实端口如果你希望在回调中跳转到具体页面可以从静态类ElectronNetRuntime读取 ASP.NET 实际监听的端口源码见 ElectronNetRuntime.csawait browserWindow.WebContents .LoadURLAsync($http://localhost:{ElectronNetRuntime.AspNetWebPort}/mypage.html);ElectronNetRuntime同时暴露了AspNetWebPort默认 Web 端口为 8001、ElectronSocketPort默认 Socket 桥接端口为 8000以及ElectronAuthToken、StartupMethod等运行时信息供你在回调与业务代码中做条件化处理。依赖注入ElectronNET 的 API 模块也可以注册进 ASP.NET 的 DI 容器所有 Electron 模块均以单例形式注册using ElectronNET.API; public void ConfigureServices(IServiceCollection services) { services.AddElectron(); }Step 4更新开发工具与运行环境迁移后请对照 System Requirements 核验开发环境.NET 8.0 或更高Node.js 22.x 且确保其位于 PATH 中Visual Studio 2022推荐如需在 Windows 上构建/调试 Linux 应用安装并配置 WSL2同时在 WSL 内安装 Node.js 22.x 与匹配的 .NET SDK。Step 5更新调试设置从 watch 到原生调试旧 watch 功能已被移除旧版依赖的watch特性在新框架中不再支持取而代之的是ASP.NET-first 调试 Hot Reload旧方式手动附加进程、刷新缓慢新方式原生 Visual Studio 调试 Hot Reload启动速度显著提升收益更快的开发循环、更好的调试体验。三种调试模式与 launchSettings.jsonElectronNET.Core通过Properties/launchSettings.json配置三种调试模式详见 Debugging1. ASP.NET-first 调试推荐——直接调试 .NET 代码支持完整断点、Hot Reload 与编辑并继续Edit-and-Continue{ profiles: { ASP.Net (unpackaged): { commandName: Project, environmentVariables: { ASPNETCORE_ENVIRONMENT: Development }, applicationUrl: http://localhost:8001/ } } }2. Electron-first 调试——用于需要检查原生 Electron API / Node.js 代码的场景{ profiles: { Electron (unpackaged): { commandName: Executable, executablePath: node, commandLineArgs: node_modules/electron/cli.js main.js -unpackedelectron, workingDirectory: $(TargetDir).electron, environmentVariables: { ASPNETCORE_ENVIRONMENT: Development } } } }3. WSL 跨平台调试——在 Windows 上直接调试 Linux 构建产物{ profiles: { WSL: { commandName: WSL2, launchUrl: http://localhost:8001/, environmentVariables: { ASPNETCORE_ENVIRONMENT: Development, ASPNETCORE_URLS: http://localhost:8001/ }, distributionName: } } }三者可以合并进同一个launchSettings.json按需选择启动配置。命令行启动标志与启动方法速查结合 Startup Methods迁移后你会遇到四个关键命令行标志标志含义典型命令-unpackedelectron未打包 Electron 优先调试 Electron/Node.jsnode node_modules/electron/cli.js main.js -unpackedelectron-unpackeddotnet未打包 .NET 优先调试 C# Hot Reloaddotnet run -unpackeddotnet-dotnetpacked打包 .NET 优先生产推荐MyApp.exe -dotnetpacked无标志打包 Electron 优先传统行为默认MyApp.exe切换 Runtime Identifier在 Windows 与 WSL/Linux 调试之间切换时需要调整 Runtime Identifier在 Visual Studio 中右键项目 →Properties→ 调整 Runtime Identifier直接编辑.csproj!-- For Windows debugging -- RuntimeIdentifierwin-x64/RuntimeIdentifier !-- For WSL/Linux debugging -- RuntimeIdentifierlinux-x64/RuntimeIdentifier新框架的输出目录也遵循标准 .NET 约定如bin\net8.0\win-x64取代了旧版含义模糊的bin\Desktop布局多目标构建清晰可预测。验证迁移构建、调试与打包测试完成上述五个步骤后按以下顺序验证迁移成果构建项目——确认无编译错误用新的 ASP.NET-first 方式测试调试——断点、Hot Reload、编辑并继续验证打包——确认新配置下可产出可分发的 Electron 包检查跨平台构建——若面向多平台确认各目标Windows/Linux/macOS均可产出。打包方面的要点详见 Package BuildingASP.NET 应用使用文件夹发布 SelfContainedtrue控制台应用使用文件夹发布 SelfContainedfalse发布过程会自动安装 npm 依赖并运行 electron-builder在 Windows 上发布 Linux 配置时ElectronNET 会自动借助 WSL 完成平台相关步骤macOS 构建不能在 Windows 上进行需要符号链接Windows 不支持需在 Linux 或 macOS 上完成。常见迁移问题排查构建错误Node.js 版本问题确认 Node.js 22.x 已安装且在 PATH 中包冲突必要时清理 NuGet 缓存如dotnet nuget locals all --clear。运行时错误缺少 electron-builder.json触发一次重建或手动 NuGet restore让 MSBuild 自动生成该文件进程无法终止改用 .NET-first 启动模式-unpackeddotnet/-dotnetpacked由 .NET 管理 Electron 子进程生命周期清理更彻底。从 StartupManager.cs 的源码看运行时通过命令行参数electronPort、electronHost、electronPID、electronAuthToken与 Electron 进程交换握手信息因此排查启动类问题时也可以关注这些参数是否被正确传递。高级迁移主题速览对于复杂项目Advanced Migration Topics 提供了三类进阶指导自定义 ASP.NET 端口旧版在electron.manifest.json中指定 WebPort 的方式已废弃ASP.NET-first 启动模式下该时机不成立改为通过 MSBuild 元数据注入ItemGroup AssemblyMetadata IncludeAspNetHttpPort Value4000 / /ItemGroup对应的解析逻辑可在StartupManager.GatherBuildInfo()中看到它读取入口程序集上的AssemblyMetadataAttribute将AspNetHttpPort解析为ElectronNetRuntime.AspNetWebPort。自定义 ElectronHostHook仅当你在项目中使用自定义 ElectronHostHook 实现时才需要处理。如果你未改动过该代码、也未使用其演示功能Excel 与 ZIP可以直接从项目中移除ElectronHostHook文件夹。否则需要升级package.json中的types/node^22.18、typescript^5.9.3、socket.io^4.8.1并在项目文件中引入Microsoft.TypeScript.MSBuild及相应的TypeScriptModuleKind/TypeScriptUseNodeJS/TypeScriptTSConfig属性。多项目解决方案类库项目只装ElectronNET.Core.Api启动项目装ElectronNET.CoreASP.NET 项目再加ElectronNET.Core.AspNet配置通过项目引用或共享文件传递。迁移收益总结迁移到ElectronNET.Core带来的核心收益对照 Whats New✅配置简化——告别 CLI 工具与手工 JSON一切走 Visual Studio 项目系统✅调试体验升级——原生 Visual Studio 调试 Hot Reload无需手动附加进程✅现代架构——.NET-first 进程生命周期Electron 作为子进程由 .NET 管理退出清理更可靠✅跨平台就绪——可在 Windows 上直接构建并调试 Linux 应用WSL 集成✅面向未来——不再与固定 Electron 版本强耦合可灵活选择 Electron 版本构建期做兼容性校验✅更广的适用面——移除 ASP.NET 硬性依赖控制台应用也能承载 Electron 桌面应用支持文件系统 HTML/JS、远程服务器等多种内容源。下一步Whats New——ElectronNET.Core 全部新特性总览Advanced Migration Topics——复杂场景与边界情况处理Getting Started / ASP.NET——迁移后的新开发工作流Debugging——三种调试模式的详细配置Startup Methods——8 种启动场景的进程流程详解Package Building——面向多平台的分发包构建。赞分享桌面应用跨平台【免费下载链接】Electron.NET:electron: Build cross platform desktop apps with ASP.NET Core (Razor Pages, MVC, Blazor).项目地址https://gitcode.com/gh_mirrors/el/Electron.NET点击查看免费下载相关推荐Electron.NET 迁移终极指南从旧版本无缝升级到Electron.NET CoreElectron.NET 迁移终极指南从旧版本无缝升级到Electron.NET Core Electron.NET Core 是 Electron.NET桌面应用跨平台NextExplorer移动端体验响应式设计与触屏操作指南NextExplorer移动端体验响应式设计与触屏操作指南 NextExplorer作为一款基于Web的文件资源管理器凭借其出色的响应式设计和优化的触屏交互Jedi版本迁移手册从旧版本平滑升级到最新版本的完整指南Jedi版本迁移手册从旧版本平滑升级到最新版本的完整指南 Jedi是Python生态中广受欢迎的 自动补全、静态分析和代码重构库 为众多IDE和编辑器提供强开发工具上一篇GitHub汉化插件终极指南7步实现界面全中文化效率飙升50%下一篇GitHub汉化全攻略3步打造无障碍开发环境创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表