随着最近.NET Core 3的正式发布,我认为我会尝试一个有趣的小实验。我喜欢使用Electron来创建基于Web的桌面应用程序。我想了解有关Blazor(ASP.NET系列的最新成员)的更多信息。在这篇文章中,我将向您确切演示如何在15分钟内开始使用Blazor和Electron!

先决条件

  • .NET Core 3.0 SDK

  • Node.js with npm

确保同时安装 .NET Core SDKNode.js(您可以使用 dotnet--versionnode--version检查版本)。我们需要.NET Core 3.0,因为我们将使用dotnet new搭建Blazor应用程序。我们还需要Electron.NET的.NET Core 3.0,该库允许Electron和.NET集成。Node.js用于下载,配置实际的Electron实例并与之集成。

设定

安装程序需要一些简单的步骤。尽管大多数步骤只是命令,但是有2个文件需要手动编辑。设置完项目后,只需要一个命令就可以启动它!

命令

mkdir blazor-electron-demo

cd blazor-electron-demo

dotnet new blazorserver --no-https

dotnet add package ElectronNET.API

dotnet new tool-manifest

dotnet tool install ElectronNET.CLI

dotnet electronize init

相当多的命令块,但是它们都很简单,不需要任何用户交互。让我们细分每个命令的作用:

mkdir blazor-electron-democd blazor-electron-demo 为我们的项目创建一个文件夹,并将其设置为当前工作目录。确保将其更改为您首选的项目名称!
dotnetnewblazorserver--no-https 使用脚手架模板创建了一个新的服务器端Blazor应用程序,不使用HTTPs。
dotnet addpackageElectronNET.API 安装NuGet程序包,该程序包将Electron支持添加到ASP.NET应用程序。
dotnetnewtool-manifest 增加了对本地安装的“ dotnet”工具的支持。
dotnet tool installElectronNET.CLI 在项目本地安装所需的 ElectronNET.CLI。
dotnet electronize init 设置Electron.NET清单并更新启动配置文件。

所有命令应按顺序执行,并且一次执行一个。一旦它们全部完成,您仅需更改两个文件即可运行该应用程序!

文件修改

为了使ASP.NET应用程序(在本例中为Blazor应用程序)与Electron集成,我们需要对 Program.csStartup.cs进行修改。在 Program.cs中:

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.Hosting;

using Microsoft.Extensions.Logging;

using ElectronNET.API; // ADD THIS!

namespace blazor_electron_demo

{

public class Program

{

public static void Main(string[] args)

{

CreateHostBuilder(args).Build().Run();

}

public static IHostBuilder CreateHostBuilder(string[] args) =>

Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder =>

{

webBuilder.UseStartup<Startup>()

.UseElectron(args); // ADD THIS!

});

}

}

Startup.cs中:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Builder;

using Microsoft.AspNetCore.Components;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.DependencyInjection;

using Microsoft.Extensions.Hosting;

using blazor_electron_demo.Data;

using ElectronNET.API; // ADD THIS!

namespace blazor_electron_demo

{

public class Startup

{

public Startup(IConfiguration configuration)

{

Configuration = configuration;

}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)

{

services.AddRazorPages();

services.AddServerSideBlazor();

services.AddSingleton<WeatherForecastService>();

}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

{

if (env.IsDevelopment()) {

app.UseDeveloperExceptionPage();

} else {

app.UseExceptionHandler("/Error");

}

app.UseStaticFiles();

app.UseRouting();

app.UseEndpoints(endpoints =>

{

endpoints.MapBlazorHub();

endpoints.MapFallbackToPage("/_Host");

});

// ADD THIS!

Task.Run(async () => await Electron.WindowManager.CreateWindowAsync());

}

}

}

随着这两个文件的更新,我们现在可以在Electron内运行我们的应用程序了!

使用

运行

我们的应用程序可以两种不同的方式运行。通过命令行或通过Visual Studio的“运行”对话框(通过在使用dotnet electroize init的安装过程中添加的启动配置文件)进行。

dotnet electronize start

Blazor在桌面应用程序中运行

调试

运行后,您可以从Visual Studio的“调试”>“附加到进程...”中附加调试器,并按项目名称进行过滤。运行.NET应用程序时,断点将完全按预期工作。您甚至可以调试Razor文件中的代码!唯一的缺点是,当您需要进行更改时,必须停止应用程序,编辑更改并重新启动它。我们稍后再讨论。

发布

感谢Electron.NET,我们可以通过一个命令将应用程序发布到特定于平台的安装程序中!

dotnet electronize build /target win

# OR

dotnet electronize build /target osx

# OR

dotnet electronize build /target linux

Windows Note: 我确实遇到了一个例外 Thegiven key'target'wasnotpresentinthe dictionary.mingw64提示符下运行命令时。使用本机 cmdpowershell提示符再次尝试命令。

此命令将在./bin/desktop文件夹下创建一个新的安装程序。在内部,您将找到适合您平台的安装程序!

样例代码

我创建了一个GitHub存储库,展示了我们刚刚进行的所有更改。如果遇到问题,请使用它作为资源,或者在Twitter上与我联系!

注意事项

虽然这两种技术的结合很有趣,但确实有其缺点。从开发人员工作流问题到API不匹配,这些问题可能很烦人,但对于使用Blazor和Electron而言,它们决不是交易障碍。

开发人员工作流程

最严重的问题是迭代开发过程缓慢。此时,开发人员的工作流程包括启动应用程序,手动附加调试器,测试应用程序,然后停止应用程序进行更改并最终重新启动周期。如果没有更改后的热重载功能,这将大大增加开发难度。Electron.NET的维护者建议在浏览器中开发该应用程序以完成大部分任务,并且仅切换到electronic进行定期测试。

Electron API/Interop

Electron.NET很年轻,但是功能全面。创建从C#和.NET到JavaScript&Node.js / Electron的功能桥梁并非易事。但是您很有可能会发现未实现的方法或事件。请记住,Electron.NET是人们在业余时间创建的免费库。每个功能可能都不存在,但这就是开源的光芒所在。如果您在API或功能中发现了一个漏洞,需要进行一些工作,那么请分叉该项目并尝试自己找到修复程序。大多数时候,构建软件是协作的成果,帮助解决问题而不是仅仅等待解决问题会非常有意义。

总结

我们创建了一个全新的Blazor项目,借助Electron.NET增加了对Electron的支持,并创建了一个准备发布的安装程序!尽管在使用开发堆栈进行这种尖端构建时确实存在一些警告,但绝对没有阻止您使用Blazor构建不可思议的桌面应用程序的警告。在像您这样的开发人员的帮助下,Electron.NET将继续改进!

特别向Rob Horner和John Sedlak表示感谢,感谢他帮助编辑本文!谢谢罗伯和约翰!

与往常一样,如果您喜欢这篇文章,请在Twitter上告诉我!如果您有任何问题或不了解某些内容,也请告诉我!我非常感谢您的反馈!

所有受限制的应用程序包_【译】使用Blazor构建桌面应用相关推荐

  1. 所有受限制的应用程序包_您需要了解的有关Mac的Apple新款M1芯片的所有信息

    苹果硅M1芯片 苹果公司首先在WWDC上详细说明了其将Mac系列产品从英特尔转移回英特尔的计划.Mac自2006年以来一直使用Intel处理器,但是向Apple Silicon的过渡意味着Mac将使用 ...

  2. 【译】使用Blazor构建桌面应用

    随着最近.NET Core 3的正式发布,我认为我会尝试一个有趣的小实验.我喜欢使用Electron来创建基于Web的桌面应用程序.我想了解有关Blazor(ASP.NET系列的最新成员)的更多信息. ...

  3. core razor是什么_什么是Blazor和什么是Razor Components?

    core razor是什么 I've blogged a little about Blazor, showing examples like Compiling C# to WASM with Mo ...

  4. 烽火HG680-MC_晨星MSO9385芯片_安卓9.0-当贝桌面-免拆卡刷固件包

    烽火HG680-MC_晨星MSO9385芯片_安卓9.0-当贝桌面-免拆卡刷固件包 特点: 1.适用于对应型号的电视盒子刷机: 2.开放原厂固件屏蔽的市场安装和u盘安装apk: 3.修改dns,三网通 ...

  5. 烽火HG680-MY/MC-通用-晨星MSO9385芯片_安卓9.0-当贝桌面卡刷固件包

    烽火HG680-MY/MC-通用-晨星MSO9385芯片_安卓9.0-当贝桌面卡刷固件包 特点: 1.适用于对应型号的电视盒子刷机: 2.开放原厂固件屏蔽的市场安装和u盘安装apk: 3.修改dns, ...

  6. javapanel根据内部组件_[译]避免在unmounted组件上调用setState

    [译]避免在unmounted组件上调用setState 原文 : https://www.robinwieruch.de/react-warning-cant-call-setstate-on-an ...

  7. python步态识别算法_译 | GaitSet:将步态作为序列的交叉视角步态识别(一)

    本文是复旦大学发表于 AAAI 2019 的工作,截至目前CASIA-B正确率最高的网络. 英文粘贴原文,google参与翻译但人工为主,有不对的地方欢迎评论 ,部分为本人理解添加,非原文内容. 译 ...

  8. python人机交互界面设计_[译]学习IPython进行交互式计算和数据可视化(五)

    第四章:交互式绘图接口 本章我们将展示Python的绘图功能以及如何在IPython中交互式地使用它们. NumPy为处理大量的多维数组结构的数据提供了高效的方法.但是看行行列列的数字总不如直接看曲线 ...

  9. ue4 离线渲染_[译]Real Shading in Unreal Engine 4(UE4中的真实渲染)(2)

    利用假期接着把剩下的部分搞完吧,其实,纯粹的翻译应该还是比较简单的,但是,为了更好地理解,我一般都会多找一些资料来进行互相印证.在上面一部分Shader Model的改变过程中,我主要是参考了一些PB ...

最新文章

  1. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题
  2. 训练深度神经网络的时候需要注意的一些小技巧
  3. HDU Problem - 6396 Swordsman(优先队列,模拟)
  4. php类精确验证身份证号码
  5. !!超级筹码理论总结
  6. 硬件服务器processor是什么,服务器硬件检测(采用mcelog)
  7. 压缩JS方法:uglifyjs
  8. [HDU1754]I Hate It线段树裸题
  9. 用css实现了一个精致的纵向导航菜单
  10. c++ PP第十一章最后一题
  11. 【C语言】c语言基础知识梳理(超全)
  12. 用PPT制作简易红蓝底一寸照
  13. (C语言之复习demo_10-自我复习使用-可供参考)_if 的四种句型深入解析,附带集合文氏图详解
  14. mysql 导入工具 php_MySQL数据导入导出方法与工具介绍_PHP教程
  15. 包装类-Wrapper
  16. 浅析时间序列用户生命周期的聚类方法
  17. 考研面试常问问题汇总(包含答案)
  18. Qt应用程序图标设置任务栏图标设置
  19. SLAM论文速递【SLAM—— DynaSLAM II:紧耦合多目标跟踪与SLAM—4.19(2)
  20. 基于Python的结构力学位移法编程求解

热门文章

  1. oracle变量绑定代码,Oracle 绑定变量
  2. 基于mui框架读取nfc数据_基于NFC的数据采集软件系统的设计与实现
  3. matlab parfor不能用,matlab中parfor函数
  4. java redis 存session_JavaWeb: Redis存储Session方案
  5. ElasticSearch重启策略
  6. 定时器注入spring
  7. 这100道Python面试题,你会几道?
  8. 如何在windows系统上安装Tensorflow Object Detection API?
  9. pppoe错误代码 linux,PPPOE常见故障代码及分析
  10. 从零开始数据科学与机器学习算法-人工神经网络与反向传播-09