C#使用Blazor编译WebAssembly供前端调用(一),关于SkiaSharp相关问题
目前信创热潮开始掀起,而C#很多行业开发的都是桌面端,迁移到网页端常常会因为很多库不支持或者不友好导致项目一直卡着。
最近一直在网上找灵感,偶然发现Web Assembly,一开始我还没不知道这是什么,后面发现目前主流浏览器都支持这一技术。
我们看一下这个Web Assembly简介如下

而后我看了翻阅了众多文档看能不能使用C#来编译Web Assembly,目前C#下Blazor下使用的就是Web Assembly,
但是没看到能单独抽离功能模块出来编译成Web Assembly,随后我请教了一下杨中科老师,杨中科老师分享了一篇他自己写的帖子给我,链接如下
https://www.cnblogs.com/rupeng/p/17107662.html。
随后基于这篇帖子,我开始进行尝试,我是用的前端框架是Vue3+Vite+TypeScript。首先,我们先编写c#代码
- 创建一个类库项目

- 将项目的csproj文件打开,将Sdk更改为 Microsoft.NET.Sdk.BlazorWebAssembly,如下图所示

- 接下来,我们编写两个简单的功能,一个返回当前时间,一个处理加载一张图片处理一下,这里只是简单做测试使用,勿喷


代码编写完成,我们简单生成一下,可以看到在项目的生成目录下有这么一个文件夹

我们将这个文件夹放到前端Vue项目目录中的public下

接下来,我们给Vue项目做一些简单的修改,在index.html中引入blazor.webassembly.js,并添加script代码,启用Blazor,如下图所示

这里我们想要调取C#代码使用的是DotNet这个对象,但是因为我们使用的是Typescript和Vue3,,所以得声明一个这个对象的类型,不然总是会提示红色波浪线,可能会导致后期编译Eslint检测不通过,
所以在src目录下新建Types目录,新建blazor.d.ts文件,代码如下,tsconfig.json也得添加一下你的类型声明文件夹路径


接下来,我们简单调用一下这两个c#方法,如下如所示


调用之后效果如下

这里可以看到获取了当前时间,c#中处理的图片也返回到前端加载出来了,至此,实现了c#编写功能编译成Web Assembly提供给前端调用,
至于为什么会有这样的想法,一个是因为前端很多东西不友好,还有就是喜欢钻研点新东西。
最后,还有一点需要注意,这里C#中使用SkiaSharp来处理图片,添加一下以下两个依赖,不然会报错ShipSharp.SKImageInfo初始化失败。

好了,到这里简单的一次试验就成功了。本篇博客测试引用帖子如下
https://blog.csdn.net/simpleman2000/article/details/134592252,
https://www.cnblogs.com/rupeng/p/17107662.html
C#使用Blazor编译WebAssembly供前端调用(一),关于SkiaSharp相关问题的更多相关文章
- 编译可供C#调用的C/C++动态链接库dll文件
编译可供C#调用的C/C++动态链接库dll文件,C语言控制台应用程序,探索生成dll过程 由于项目需求,需要公司另一个团队提供相关算法支持,是用C语言编译好的dll库提供给我们进行调用. 但是拿到d ...
- 使用wcf编写坐标字符串生成shapefile文件,在iis发布供前端调用
项目有一需求,需要由坐标字符串(格式:x,y,点名)生成shapefile,由于在前台开发类似功能比较麻烦而且也不适用,最终决定使用WCF来实现,不借助现有GIS软件,基于GDAL实现. 实现过程如下 ...
- Go 程序编译成 DLL 供 C# 调用。
Go 程序编译成 DLL 供 C# 调用. C# 结合 Golang 开发 1. 实现方式与语法形式 基本方式:将 Go 程序编译成 DLL 供 C# 调用. 1.1 Go代码 注意:代码中 ex ...
- 用IKVMC将jar转成dll供c#调用
用IKVMC将jar转成dll供c#调用 ikvmc c# dll jar 用IKVMC将jar转成dll供c#调用 前言 ikvmc介绍 ikvmc下载安装 下载并解压 设置环境变量 jar-> ...
- 如何用VC编写供PB调用的DLL
和编写一般的DLL方法相同,需要注意以下两点: (1)调用约定 c函数有_stdcall._cdecl._fastcall等多种调用约定,调用约定用来说明函数参数的压栈顺序和由谁(函数自身还是调用者) ...
- 【C++】将调用第三方库的代码封装成动态库供上层调用
需求分析 Java应用中需要调用C++的程序,而这个C++的程序中需要引入一个第三方静态库.所以需要将该程序编译成一个动态库文件(.so)供Java调用. 步骤 使用CLion创建一个动态库的项目,会 ...
- Visual Studio 2010编译时总是提示"调用目标发生了异常"的解决
现象: 无论建立的是Win32 Console的解决方案,还是MFC的解决方案,重新打开Visual Studio 2010之后,编译时总是提示“调用的目标发生了异常” 解决: 1. 关闭Visual ...
- 可以供MFC调用的,QT实现的DLL(使用qt-solutions的qtwinmigrate实现)
MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理 #include <qmfcapp.h> #include <qwinwidget.h& ...
- 可以供MFC调用的,QT实现的DLL(qtwinmigrate实现)
MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理 #include <qmfcapp.h> #include <qwinwidget.h& ...
- 基于HTTP可供浏览器调用的本地打印程序
之前给公司做打印都是用ActiveX控件,只支持IE浏览器,最近需要支持谷歌,又不想去学谷歌插件编写,于是就用本地启动一个http服务器来供浏览器调用(写成windows服务更好),同事用了都说好(笑 ...
随机推荐
- JMeter中使用嵌套变量方法
JMeter中使用嵌套变量方法 在使用JMeter进行接口测试时,经常遇到需要动态生成变量名并引用其值的情况.在JMeter中,嵌套变量的使用可以帮助我们实现这一目标.本文将详细介绍如何在JMeter ...
- mac支持rar解压缩
一.下载 下载macOS版本:RAR 5.71 for macOS (64 bit) 二.安装 1.双击解压刚才下载的rarosx-5.7.1.tar,使用终端进入刚才解压的文件夹目录下cd /Use ...
- Java连接数据库 CreateStatement 和 PrepareStatement 的区别与优劣
一.简介 先说下CreateStatement 和 PrepareStatement 这俩到底是干啥的吧. 作用:其实这俩干的活儿都一样,就是创建了一个对象然后去通过对象调用executeQuery方 ...
- Spring Boot项目设置跨域
一.跨域设置 新建一个配置类 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterC ...
- 深入掌握 SQL 深度应用:复杂查询的艺术与技巧
title: 深入掌握 SQL 深度应用:复杂查询的艺术与技巧 date: 2025/2/10 updated: 2025/2/10 author: cmdragon excerpt: SQL(结构化 ...
- Luogu P1983 车站分级 题解 [ 绿 ] [ 拓扑排序 ] [ 图论建模 ] [ 虚点 ]
车站分级:很好的拓扑排序题,细节有点多. 图论建模 首先观察对于一条线路,我们可以从中直接得到什么信息: 假设这条线路的开头为 \(st\),结尾为 \(ed\),那么在 \([st,ed]\) 的车 ...
- CentOS7安装RabbitMQ (安装包安装)
环境: CentOS7 需要安装:erlang 22.2 rabbitmq 3.8.3 参考: rabbit官网地址:http://www.rabbitmq.com/which-erlang.htm ...
- Jupyter 使用安装的虚拟环境(tensorflow)
1. 在 anaconda 中使用 conda create -n tensorflow python=3.6 创建 tensorflow 虚拟环境: 2. 安装交互环境(ipykernel) co ...
- [BZOJ3037] 创世纪 题解
基环内向树上 dp,不过在这里提供给一种非典型做法. 考虑将环上的每一条边都断开,这样就会形成多棵树,先在这些树上进行树形 \(dp\).设 \(dp_{i,0/1}\) 表示不选/选 \(i\) 时 ...
- 全面详解C语言使用cJSON解析JSON字符[转载]
cJSON对象的实现采用了树形结构,每个对象是树的一个节点,每个节点由cJSON这个结构体组成,对象中的元素也由cJSON这个结构体组成.同一层的对象和元素是双向链表结构,由next和prev指针链接 ...