目前信创热潮开始掀起,而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#代码

  1. 创建一个类库项目

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

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

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

我们将这个文件夹放到前端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相关问题的更多相关文章

  1. 编译可供C#调用的C/C++动态链接库dll文件

    编译可供C#调用的C/C++动态链接库dll文件,C语言控制台应用程序,探索生成dll过程 由于项目需求,需要公司另一个团队提供相关算法支持,是用C语言编译好的dll库提供给我们进行调用. 但是拿到d ...

  2. 使用wcf编写坐标字符串生成shapefile文件,在iis发布供前端调用

    项目有一需求,需要由坐标字符串(格式:x,y,点名)生成shapefile,由于在前台开发类似功能比较麻烦而且也不适用,最终决定使用WCF来实现,不借助现有GIS软件,基于GDAL实现. 实现过程如下 ...

  3. Go 程序编译成 DLL 供 C# 调用。

    Go 程序编译成 DLL 供 C# 调用. C# 结合 Golang 开发   1. 实现方式与语法形式 基本方式:将 Go 程序编译成 DLL 供 C# 调用. 1.1 Go代码 注意:代码中 ex ...

  4. 用IKVMC将jar转成dll供c#调用

    用IKVMC将jar转成dll供c#调用 ikvmc c# dll jar 用IKVMC将jar转成dll供c#调用 前言 ikvmc介绍 ikvmc下载安装 下载并解压 设置环境变量 jar-> ...

  5. 如何用VC编写供PB调用的DLL

    和编写一般的DLL方法相同,需要注意以下两点: (1)调用约定 c函数有_stdcall._cdecl._fastcall等多种调用约定,调用约定用来说明函数参数的压栈顺序和由谁(函数自身还是调用者) ...

  6. 【C++】将调用第三方库的代码封装成动态库供上层调用

    需求分析 Java应用中需要调用C++的程序,而这个C++的程序中需要引入一个第三方静态库.所以需要将该程序编译成一个动态库文件(.so)供Java调用. 步骤 使用CLion创建一个动态库的项目,会 ...

  7. Visual Studio 2010编译时总是提示"调用目标发生了异常"的解决

    现象: 无论建立的是Win32 Console的解决方案,还是MFC的解决方案,重新打开Visual Studio 2010之后,编译时总是提示“调用的目标发生了异常” 解决: 1. 关闭Visual ...

  8. 可以供MFC调用的,QT实现的DLL(使用qt-solutions的qtwinmigrate实现)

    MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理 #include <qmfcapp.h> #include <qwinwidget.h& ...

  9. 可以供MFC调用的,QT实现的DLL(qtwinmigrate实现)

    MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理 #include <qmfcapp.h> #include <qwinwidget.h& ...

  10. 基于HTTP可供浏览器调用的本地打印程序

    之前给公司做打印都是用ActiveX控件,只支持IE浏览器,最近需要支持谷歌,又不想去学谷歌插件编写,于是就用本地启动一个http服务器来供浏览器调用(写成windows服务更好),同事用了都说好(笑 ...

随机推荐

  1. C#定点执行任务测试案例

    定时方法实现类 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text ...

  2. delphi编写sql脚本文件批量执行程序

    程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件. 程序实现了SQL脚本文件批处理执行应用,运行效果图. 文件.pas代码 unit main; int ...

  3. Brainfly: 用 C# 类型系统构建 Brainfuck 编译器

    Brainfuck 简介 Brainfuck 是由 Urban Müller 在 1993 年创造的一门非常精简的图灵完备的编程语言. 正所谓大道至简,这门编程语言简单到语法只有 8 个字符,每一个字 ...

  4. Ubuntu Linux部署DeepSeek

    技术背景 DeepSeek是这段时间最热门的话题之一,其蒸馏模型可以实现低成本而高质量的推理,使得我们现在可以在本地小型化的硬件上也用上大模型这一AI利器.本文主要介绍通过Ollama来部署DeepS ...

  5. 一键实现风险识别+处理,天翼云AOne助手尽在“掌”握!

    随着企业数字化建设的不断加速,优化站点性能与响应速度成为当今时代的一个重要课题.对于政务.金融类机构来说,其门户网站.信用卡中心等代表着对外形象,如果出现访问不通或者时延严重的现象将影响业务办理效率以 ...

  6. pkill 踢出某个终端

    是ps命令和kill命令的结合,按照进程名来杀死指定进程 选项 -o:仅向找到的最小(起始)进程号发送信号: -n:仅向找到的最大(结束)进程号发送信号: -P:指定父进程号发送信号: -g:指定进程 ...

  7. 本地部署 DeepSeek Janus Pro 文生图大模型

    Hello, 大家新年好. 在这个春节期间最火的显然是 DeepSeek 了.据不负责统计朋友圈每天给我推送关于 DeepSeek 的文章超过20篇.打开知乎跟B站也全是 DeepSeek 相关的内容 ...

  8. Luogu P1220 关路灯 题解 [ 蓝 ][ 区间dp ]

    原题 关路灯 题目描述 某一村庄在一条路线上安装了 \(n\) 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏 ...

  9. vim编译和安装clang_complete插件

    今天找到一个插件clang_complete可以进行语法补全,可能不是很好用.但是vim上用应该也差不多了 全文按照这个链接去操作, configure的时候我配置的目录是/usr/bin/vimv8 ...

  10. OpenLayers change 事件获取当前值

    这里有个 change:resolution 事件 但是事件的内容没有value,只有oldValue Zc {type: 'change:resolution', target: F, key: ' ...