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

640?wx_fmt=gif

随着最近.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-demo
cd 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

640?wx_fmt=png

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上告诉我!如果您有任何问题或不了解某些内容,也请告诉我!我非常感谢您的反馈!

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAP的学习和应用

前言:用CAP有一段时间了,这里简单记录一下,这么好用的东西,小伙伴们赶紧上车吧一.CAP使用场景?平时工作中经常使用到MQ,如(kafka,rabbitmq...),用来简单的发布/订阅,经常会遇到以下几个问题常用方案,把SQL放前面,MQ放后面,MQ执行失败了,我们把整个SQL进行回滚,这种方案在单应用…

[功能发布]Excel催化剂地图可视化功能正式发布,欢迎使用!

地图可视化功能开发完成已过去1个多月&#xff0c;文章的阅读量与初定传播目标相差甚远。但因着热爱分享的缘故&#xff0c;在阅读量未及预期时&#xff0c;仍然破例对其功能进行发布。若真正喜爱Excel催化剂所开发的地图可视化&#xff0c;可通过完成小任务来获取使用资格。再…

WebAssembly生态将完善网络安全性

近日 Mozilla、Fastly、Intel 与 Red Hat 宣布成立联合组织 Bytecode Alliance&#xff08;字节码联盟&#xff09;&#xff0c;该联盟旨在通过协作实施标准和提出新标准&#xff0c;以完善 WebAssembly 在浏览器之外的生态。WebAssembly 也叫 Wasm&#xff0c;它是为基于栈的虚…

我们终于可以把 bug 留给子孙后代了

“ 阅读本文大概需要 4 分钟。 ”今天在聊项目之前&#xff0c;我们先来聊一下历史。中学时候拿到的第一本历史书&#xff0c;上面是从智人的起源讲起的&#xff0c;他轻轻掠过尧舜禹&#xff0c;秦始皇统一六国&#xff0c;千古一相李斯。他喊二川溶溶&#xff0c;流入宫墙。五…

30分钟无坑部署K8S单Master集群

Jesse导读&#xff1a;11月9号&#xff0c;我在中国.NET开发者峰会&#xff08;.NET Conf China 2019)上分享了之前ASP.NET Core和Kubernetes做微服务的经验&#xff0c;在10号的时候又联合张善友、陈计节两位大佬一起做了一个6个小时的动手实践&#xff0c;得到了非常好的反馈…

亲自实践Blazor构建桌面应用程序

首先是安装.NET Core 3.0 与Node.js.Net Core 版本为&#xff1a;3.0.100Node.js安装版本为&#xff1a;v12.13.0用到的8个命令mkdir blazor-electron-democd blazor-electron-demodotnet new blazorserver --no-httpsdotnet add package ElectronNET.APIdotnet new tool-manif…

行云万里,转型未来 | 行云创新受邀参加2019中国.NET开发者峰会

2019 年 11 月 9 日&#xff0c;中国 .NET 开发者峰会&#xff08;.NET Conf China 2019&#xff09;在上海拉开帷幕&#xff0c;这是中国 .NET 社区的年度盛会。行云创新受邀参加了此次峰会&#xff0c;为当前最热门的科技专题带来了精彩的演讲&#xff0c;与全国的 .NET 开发…

西安活动 | 云时代,享未来 .NET 线下沙龙

活动介绍:在云时代到来的今天&#xff0c;越来越多的应用已经依赖于云而构建&#xff0c;这正得益于云给软件开发带来的低成本&#xff0c;易扩展&#xff0c;可重用的便捷之处。.NET Core平台就是为云而诞生的&#xff0c;毫无疑问它是构建云应用的首要之选。已经磨练5年时间&…

.NET手撸绘制TypeScript类图——下篇

.NET手撸绘制TypeScript类图——下篇在上篇的文章中&#xff0c;我们介绍了如何使用 .NET解析 TypeScript&#xff0c;这篇将介绍如何使用代码将类图渲染出来。类型定义渲染不出意外&#xff0c;我们继续使用 FlysEngine。虽然文字排版没做过&#xff0c;但不试试怎么知道好不好…

China .NET Conf 2019-.NET技术架构下的混沌工程实践

这个月的8号、9号&#xff0c;个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会&#xff0c;同时分享了技术专题《.NET技术架构下的混沌工程实践》&#xff0c;给广大的.NET开发小伙伴介绍混沌工程和高可用性改造实践。会后大家伙聚餐的时候&#xff0c;陈计节老师建…

分布式应用框架 Dapr

微服务架构已成为构建云原生应用程序的标准,微服务架构提供了令人信服的好处&#xff0c;包括可伸缩性&#xff0c;松散的服务耦合和独立部署&#xff0c;但是这种方法的成本很高&#xff0c;需要了解和熟练掌握分布式系统。为了使用所有开发人员能够使用任何语言和任何框架轻松…

.NET Core on K8S 学习与实践系列文章索引 (更新至20191116)

更新记录&#xff1a;-- 2019-11-16 增加Docker容器监控系列文章// 此外&#xff0c;今天是11月17日&#xff0c;我又老了一岁&#xff0c;祝我自己生日快乐&#xff01;近期在学习Kubernetes&#xff0c;基于之前做笔记的习惯&#xff0c;已经写了一部分文章&#xff0c;因此给…

身边的设计模式(一):单例 与 RedisCacheManager

大家好&#xff0c;以后我会用23篇文章&#xff0c;来给大家讲解设计模式&#xff0c;当然如果你看过我的项目&#xff0c;很多设计模式已经很会了&#xff0c;只是没有注意到&#xff0c;我这里会讲解一下&#xff0c;大家就会发现&#xff0c;如果你看懂了我的项目&#xff0…

Kubernetes包管理器Helm发布3.0版本

Helm 3.0 已经发布&#xff0c;该版本是 CLI 工具的最新主要版本&#xff0c;主要关注简单性、安全性和可用性&#xff0c;内容如下&#xff1a;新特性移除 Tiller&#xff08;Helm 2 是一种 Client-Server 结构&#xff0c;客户端称为 Helm&#xff0c;服务器称为 Ti…

“兼职”运维的常用命令

自从产品转到了 dotNET Core 之后&#xff0c;更深入的接触 Linux和 Docker &#xff0c;而我每天的工作中&#xff0c;有一部分时间相当于在“兼职”做一些运维的事情。下面是一些在日常中常用的命令&#xff0c;算是个备忘吧。环境操作系统&#xff1a;CentOS7Docker&#xf…

rabbitmq死信队列详解与使用

先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer将消息投递到broker或者直接到queue里了&#xff0c;consumer从queue取出消息进行消费&#xff0c;但某些时…

使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action

Demo下面我们就来实践一下。打开之前的项目&#xff0c;并建立CompaniesController&#xff1a; 这里有6个地方比较关键&#xff0c;我们挨个看一下&#xff1a; RESTful API 或者其它Web API的Controller都应该继承于 ControllerBase 这个类&#xff08;点此查看详细的官方文档…

C++ 链表

线性表&#xff08;顺序表&#xff09;有两种存储方式&#xff1a;链式存储和顺式存储&#xff0c;顺式存储如数组&#xff0c;其内存连续分配&#xff0c;且是静态分配。链式存储&#xff0c;内存是不连续的&#xff0c;且是动态分配。前一个元素存储数据&#xff0c;后一个元…

波拉契尔数列 C++

题目&#xff1a;写一个函数&#xff0c;输入n, 求斐波那契数列的第n项。 分析&#xff1a;该题有两种实现方式递归或循环。当n比较大的时候f(n)结果也会比较大&#xff0c;故定义的时候可以采用long(int 也行)。递归会有大量的重复计算&#xff0c;而循环可以把f(n-1)和f(n-2)…

Deepin 下 使用 Rider 开发 .NET Core

国产的 Deepin 不错&#xff0c;安利一下。Deepin 用了也有一两年&#xff0c;也只是玩玩&#xff0c;没用在开发上面。后来 Win10 不太清真了&#xff0c;就想着能不能到 Deepin下撸码。要搞开发&#xff0c;首先少不了 IDE&#xff0c;VS2019 用不来&#xff0c;Vs Code 太复…