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服务更好),同事用了都说好(笑 ...
随机推荐
- C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- 大模型背后的向量魔法:Embedding技术初探
本文原本是2022年写的,然而一直没有完善,自从LLM火起来之后,NLP领域的技术更新很快,本文只是大概介绍了Embedding相关的基础知识,具体应用接下来会在博客更新发布. 前言 又是很长一段时间 ...
- Iceberg根据快照查看文件,根据文件查看哪个快照写入
一.背景 用户查询iceberg表时报文件为空,因为存在写入和治理程序同时操作iceberg表,需要查看空文件是哪个快照产生的,方便确定是flink写入缺陷还是spark治理缺陷 二.通过Sql查询文 ...
- 安川MH225机械手CPU单元维修解决方案
在进行安川机器人cpu单元维修之前,我们需要做好充分的准备工作.首先,了解机器人的使用环境和历史情况,了解机器人出现故障的具体表现,例如:是否有异常震动.过热等现象.其次,准备必要的维修工具和备件,确 ...
- .NET 使用 DeepSeek R1 开发智能 AI 客户端
前言 最近 DeepSeek 可太火了,在人工智能领域引起了广泛的关注,其强大的自然语言处理能力和智能搜索功能让大家跃跃欲试. 对于 .NET 技术栈的开发来说,一个常见的问题是:能否在 .NET 程 ...
- [ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
使用navicate12运行sql文件出错 报错: [ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'1报错原因:生成转储文件的数据库版本为8.0 ...
- docker - [09] 镜像详解
题记部分 一.镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,还包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 如果得到 ...
- 使用Express对mysql进行增改查操作(完全代码版本)
使用Express对mysql进行增改查操作(完全代码版本) 今天发的是Express对mysql进行增删改操作的所有代码,这个代码还没有完善好,都是一些基础的增删改查操作,有一些地方也写上了注释方便 ...
- Ubuntu 22.04 添加 AppImage 到应用程序
前言 AppImage 逐渐成为 Linux 常用的一种软件包格式,本文将介绍如何将 AppImage 文件添加到 Ubuntu 的应用程序中. 如下图中的 CAJViewer : 操作过程 设置相关 ...
- Selenium Webdriver 介绍
在前两篇文章中,主要介绍了Selenium IDE 工具及其使用和它的特点,也使用Selenium IDE和Firebug构建了一些脚本.本文,我们开始介绍不同类型的web元素及其定位策略 我们已经非 ...