如何使用Photino创建Blazor项目进行跨平台
Photino是什么
Photino是一组使用Web (HTML/CSS/JavaScript)UI创建桌面应用程序的技术。TryPhotino.io 维护 .NET 构建,并鼓励社区开发 Photino.Native 控件以用于其他语言和平台。我们鼓励并将支持Photino.CPP,Photino.Rust,Photino.Go等的开发。
使用Photino Blazor
首先我们创建一个.Net Core控制台项目,项目SDK最低6.0
在项目中添加wwwroot文件夹
修改项目文件
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Photino.Blazor" Version="2.5.0" />
</ItemGroup>
<ItemGroup>
<Content Update="wwwroot\**">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
在wwwroot下面创建index.html,并且添加以下内容,用于启动托管Blazor项目,app的原生就是Blazor加载的位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Demo</title>
<base href="/" />
<link href="Demo.styles.css" rel="stylesheet" />
<style>
html, body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
h1:focus {
outline: none;
}
a, .btn-link {
color: #0071c1;
}
.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.valid.modified:not([type=checkbox]) {
outline: 1px solid #26b050;
}
.invalid {
outline: 1px solid red;
}
.validation-message {
color: red;
}
#blazor-error-ui {
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}
</style>
</head>
<body>
<div id="app">加载中...</div>
<div id="blazor-error-ui">
An unhandled error has occurred.
<a href="" class="reload">Reload</a>
<a class="dismiss"></a>
</div>
<script src="_framework/blazor.webview.js"></script>
</body>
</html>
创建_Imports.razor文件,添加以下代码,文件用于Blazor的全局引用,减少razor文件使用using
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using Microsoft.Extensions.Logging
创建App.razor文件,添加以下代码,以下代码是添加Blazor路由
@using Demo.Shared
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<PageTitle>Not found</PageTitle>
<LayoutView Layout="@typeof(MainLayout)">
<p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
创建Shared文件夹,在文件夹中创建MainLayout.razor,并且添加以下内容
@inherits LayoutComponentBase
<div>
@Body
<div>
创建Pages文件夹,在文件夹中创建Index.razor文件,并且添加页面功能,页面是一个点击按钮新增数量的功能,用于测试Blazor是否正常运行
@page "/"
<span>当前数量 @Count </span>
<button @onclick="OnClick">增加数量</button>
@code {
private int Count = 1;
private void OnClick()
{
Count++;
}
}
接下来我们修改Program.cs文件的代码,这里将是入口,
using Photino.Blazor;
namespace Demo;
public class Program
{
[STAThread]
public static void Main(string[] args)
{
var appBuilder = PhotinoBlazorAppBuilder.CreateDefault(args);
appBuilder.RootComponents.Add<App>("#app");
var app = appBuilder.Build();
app.MainWindow
.SetTitle("Photino Blazor Sample");
AppDomain.CurrentDomain.UnhandledException += (sender, error) =>
{
app.MainWindow.OpenAlertWindow("Fatal exception", error.ExceptionObject.ToString());
};
app.Run();
}
}
PhotinoBlazorAppBuilder.CreateDefault是创建了一个类似于WebApi的方法,用于托管我们的界面,
appBuilder.RootComponents.Add<App>("#app");是将App.razor的组件绑定到html的元素id为app的上面,加载的Blazor组件将直接渲染到dom上
app.MainWindow.SetTitle("Photino Blazor Sample");将启动一个窗体,SetTitle是设置窗体的标题,请注意启动方法必须加[STAThread]不然可能看不到效果,
然后我们启动一下项目,效果如图,当我们点击增加数量发现也是没问题的

Photino性能
在发布以后启动的项目内存占用在63.7MB左右,对比MAUI来说很小了

项目体积:
这个是发布的单文件,占用在3MB以内,占用也是非常小

在了解一下Photino如何实现
Photino.Blazor建立在Photino之上。通过使用Photino的NET。NET NuGet 包。其目的是使.NET开发人员能够轻松地使用Blazor Web UI创建.NET 6及更高版本的桌面应用程序,该UI可以在Windows,Linux和Mac上跨平台工作,而不是使用Windows Forms,Windows Presentation Foundation(WPF),Xcode,Swift或GTK等技术构建特定于操作系统的UI。它只是将 Blazor 功能添加到 .NET 包。
Photino.Blazor 不是服务器端 Blazor,也不是 WASM 客户端 Blazor。当 .NET(控制台)应用程序启动时,它使用完整的 .NET 6 框架。框架可以预安装在计算机上,也可以在“单个文件应用程序”的情况下与应用程序一起打包。在 Blazor 中执行所有 .NET 代码将重定向到与控制台应用相同的框架。
控制台应用程序进程以及本机窗口和浏览器控件的进程都使用相同的框架。这是通过在 photnio 中包含一些 Blazor 源代码来实现的。Blazor 项目并为此目的对其进行修改。
最低支持是.NET 6
如果你是桌面程序,建议用Blazor写界面和业务,运行平台就可以有多个选择了,比如Photnio,Photnio本身也是跨平台,你也可以直接在Linux中运行了,用了Blazor就不需要担心能不能跨平台了,
来着token的分享
学习交流:737776595
如何使用Photino创建Blazor项目进行跨平台的更多相关文章
- 【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
欢迎使用 Blazor!Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的 ...
- C# 创建Web项目时 可以选择的类型在不同VS版本下的对比
上面这个界面应该是 vs2010的 一. VS2012 .VS2013 其实每个模板的意思,在右边已经显示出来了.Empty,就是一个空的模板,创建后里面除了一个web.config外什么都没有:We ...
- [Android教程] Cordova开发App入门(一)创建android项目
前言 Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的A ...
- Ionic-wechat项目边开发边学(一):环境搭建和创建一个项目
之前学AngularJS,教程过了一遍觉得很简单,但真正写几个Demo就错误百出,一个小小的功能要折腾很久.所以这次学Ionic,准备以开发一个项目为切入点去学,那么问题来了,开发什么项目呢? 纠结了 ...
- [Xcode 实际操作]一、博主领进门-(1)iOS项目的创建和项目模板的介绍
目录:[Swift]Xcode实际操作 本文将演示iOS项目的创建和项目模板的介绍. [Create a new Xcode project]创建一个新的项目. 在弹出的模板窗口中,显示了所有的项目模 ...
- 创建cordova项目
PhoneGap是一套能让你使用HTML5轻松调用本地API接口和发布应用到商店的应用开发平台.官方说有低成本,低开发周期,轻量化等优点,这些咱暂时也没法证明,略过不表.但是有一条跨平台,却是很明显的 ...
- Visual Studio Code创建C#项目
Visual Studio Code是一个支持跨平台的文本编辑器,同其他文本文本编辑器一样,不但占用磁盘空间小,性能也比较快:近几年由于不断的升级和许多开发者提供大量的插件,它已经成为了一个非常强大的 ...
- Cordova+vue 混合app开发(一)创建Cordova项目
简介: Cordova包装你的HTML/JavaScript app到原生app容器中,可以让你访问每个平台设备的功能.这些功能通过统一的JavaScript API提供,让你轻松的编写一组代码运行在 ...
- 如何在现有的Vue项目中嵌入 Blazor项目?
目前官方只提供了angular和react俩种示例,所以本教程将来讲解如何在Vue的现有项目中使用,上期已经做好了react的教材! 准备流程 Vue 项目创建流程 使用Vue创建一个Demo项目 全 ...
- 创建maven项目(cmd 命令)
2016五月 22 原 创建maven项目(cmd 命令) 分类:maven (994) (0) 1.普通方式创建 1)进入cmd窗口执行 mvn archetype:generate 2) 光标停止 ...
随机推荐
- 19 request请求数据大全
1 request.path_info # 获取当前用户请求的url # http://127.0.0.1:8000/customer/list/ ----> /customer/list/ # ...
- Windows下Redis安装及自启动
Redis下载 Redis 官方网站没有提供 Windows 版的安装包,可以通过 GitHub 来下载 Windows 版 Redis 安装包,下载地址:点击前往. 打开上述的下载地址链接,Redi ...
- 上传路径Class替换无效
路径配置文件使用的常量,其它文件使用路径时,编译class时为静态常量信息,改变不同的路径常量则不生效
- Springboot中@Autowired为何获取了我们没有注入的Bean?
Springboot中@Autowired为何获取了我们没有注入的Bean? 在做仿牛客网项目的时候,有这样一段话: @Autowired private TemplateEngine templat ...
- css cursor: url() 使用火狐浏览器问题,鼠标没有效果
在火狐浏览器问题使用cursor: url():鼠标没有效果,需要给使用标签添加一个height
- 为什么reids是单线程
我们首先要明白,reids很快,官方表示,因为reids是基于内存的操作,cpu不是reids的瓶颈,redis的瓶颈有可能是机器内存的大小或者网络带宽,既然单线程容易控制,而且cpu不会成为瓶颈,所 ...
- axis2 WebService 请求参数xml格式
方法定义 public class GetBillInfoService { public String getBillList(String xmlData, String temp ){} 传入接 ...
- SQL Server触发器备份后还原
测试环境SQL Server 2012 select a.definition , b.name,b.is_disabled from sys.sql_modules a inner join sys ...
- HTML5的语义标签
H5新增了很多标签,也更加语义化了,但是除了header.footer.nav等,其他的还真的没有去了解过,今天整理一下H5新增的语义化标签. Header: 不用多说,就是定义头部,可以多个. Fo ...
- LVS简略介绍
一.lvs是什么 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvir ...