- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
首先我们需要介绍一下这个在线编辑器,当前的在线编辑器支持c#的代码编译运行,并且无需后台服务,基于 WebAssembly 实现的在浏览器端去执行我们的 c# 代码,基于 Roslyn 提供的 Api 封装一套简单的编译,并且封装了 js 的支持,让嵌入的方式更简单.
最简单的嵌入方式是使用别人已经部署好的界面去嵌入到自己的项目当中,这样的好处就是代码量极少,但是强依赖于他人的项目,下面我将提供一个简单的案例在react中嵌入已经存在的编辑器,我将使用自己的博客项目,在博客项目中嵌入在线编辑器.
启动项目 。
yarn start
我在我的项目中添加了编辑器的单独页面,下面是完整的代码, 。
import React, { Component } from 'react'
import './index.css';
export default class Ide extends Component {
render() {
return (
<iframe style={{height:"100%",width:'100%'}} src='https://webassembly.tokengo.top:8843/'></iframe>
)
}
}
看到上面的实现方式,是通过 iframe 直接嵌入的,当然这是因为我提供的网站并没有做跨域限制,所以可以直接嵌入,也可以供大家一快使用.
效果如图所示.
然后右键编辑区域,会出现执行按钮,点击执行 。
将在下面的输出中显示输出信息 。
这样就非常简单的将在线编辑器嵌入到自己博客中 。
当然,也有人觉得嵌入他人的博客会受制于他人,如果别人的站点挂了就无法使用,所以想知道是否可以自己搭建 。
这里提供俩个方案,一个使用现成的 docker 镜像,直接部署一个使用,另一个就是使用 sdk 功能自己实现界面编辑,只需要使用 sdk 提供的编译功能 。
这是提供的基本的镜像 registry.cn-shenzhen.aliyuncs.com/gotrays/web-actuator:latest ,由阿里云的免费镜像仓库提供。 可以使用一下命令拉起执行一个简单的仓库 。
docker run -p 8888:80 --name web-actuator registry.cn-shenzhen.aliyuncs.com/gotrays/web-actuator:latest
项目将简单的介绍在 JavaScript 中使用动态编辑c#的 SDK .
实现我们需要拉去SDK的代码 。
git clone https://github.com/239573049/WebActuator.git
然后使用 vs 打开 WebActuator.sln 解决方案, 。
选中 WebActuator.WebAssembly 项目进行发布 。
发布以后打开发布的文件夹,打开 _framework 文件夹,然后删除文件夹下面的 *.gz 文件,因为默认使用的 br 压缩,所以不需要使用 *.gz 。
下面是发布的根目录,我们需要复制除了 index.html 的文件到我们自己的项目当中 。
嵌入项目截图 。
打开我们的 index.html 。
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
<script type="module">
import { BrotliDecode } from './decode.min.js';
import * as exportManage from './exportManage.js';
window.exportManage = exportManage;
Blazor.start({
loadBootResource: function (type, name, defaultUri, integrity) {
if (type !== 'dotnetjs') {
return (async function () {
const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
if (!response.ok) {
throw new Error(response.statusText);
}
const originalResponseBuffer = await response.arrayBuffer();
const originalResponseArray = new Int8Array(originalResponseBuffer);
const decompressedResponseArray = BrotliDecode(originalResponseArray);
const contentType = type ===
'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
return new Response(decompressedResponseArray,
{ headers: { 'content-type': contentType } });
})();
}
}
});
</script>
将以上代码添加的我们项目的 index.html 中 。
然后在我们需要实现的界面进行编译初始化 。
let assemblys=["https://assembly.tokengo.top:8843/System.dll",
"https://assembly.tokengo.top:8843/System.Buffers.dll",
"https://assembly.tokengo.top:8843/System.Collections.dll",
"https://assembly.tokengo.top:8843/System.Core.dll",
"https://assembly.tokengo.top:8843/System.Linq.Expressions.dll",
"https://assembly.tokengo.top:8843/System.Linq.Parallel.dll",
"https://assembly.tokengo.top:8843/mscorlib.dll",
"https://assembly.tokengo.top:8843/System.Linq.dll",
"https://assembly.tokengo.top:8843/System.Console.dll",
"https://assembly.tokengo.top:8843/System.Runtime.dll",
"https://assembly.tokengo.top:8843/System.Net.Http.dll",
"https://assembly.tokengo.top:8843/System.Private.CoreLib.dll",
"https://assembly.tokengo.top:8843/System.Console.dll"]
await window.exportManage.SetReferences(assemblys);
使用 await window.exportManage.SetReferences(assemblys); 提供默认需要编译的程序集 。
await window.exportManage.SetReferences(assemblys); 的代码是在 exportManage.js 中提供的 api 。
这是用于初始化编译所需要的程序集,基本默认就这些,当然也可以添加其他的程序集, 。
监听 Console 输出 。
window.OnWriteLine = (message: string) => {
console.log(message);
}
window.OnDiagnostic = (json: string) => {
console.log(json);
}
上面是 SDK 提供的控制台拦截器, 。
OnWriteLine 是控制台的输出 。
OnDiagnostic 是早编译的错误和日志 。
创建了俩个监听器然后就可以调用编辑方法了,调用 。
await window.exportManage.RunSubmission(`Console.WriteLine("hello world");`, false);
执行编译,然后我们就可以在浏览器控制台中看到编译输出了 。
如果你想要重复写那么多代码可以修改 WebActuator.Web 项目当中的 ClientApp 的代码 。
项目提供了基于 monaco 实现的简单的编辑器.
APIs 列表:
// 获取当前引用
window.exportManage.Using()
// 添加默认引用
window.exportManage.SetUsing(using)
// 删除指定引用
window.exportManage.RemoveUsing(using)
// 清空全局引用
window.exportManage.ClearUsing()
// 获取当前编译的语言版本
window.exportManage.LanguageVersion()
// 修改编译的语言版本
window.exportManage.SetLanguageVersion(languageVersion)
// 获取当前依赖的程序集URL
window.exportManage.References()
// 添加编译依赖的程序集
window.exportManage.SetReferences(references)
// 只编译代码
window.exportManage.TryCompile(source, concurrentBuild)
// 执行编译代码
window.exportManage.RunSubmission(code, concurrentBuild)
以上只是当前版本的 APIs ,后续还会优化并且更新,打造一个好用方便的在线编译c#代码的编辑器.
来自token的分享 。
仓库地址: https://github.com/239573049/WebActuator 欢迎PR和star 。
技术交流群:737776595 。
最后此篇关于如何将c#在线编辑器嵌入自己项目的文章就讲到这里了,如果你想了解更多关于如何将c#在线编辑器嵌入自己项目的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个 PowerBI Online 数据集,它是在 PowerBI 桌面中创建然后在线发布的。到目前为止,一切都很好。 我通过 PowerBI pusblish 从 Excel 连接到数据集,按预
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 2 年前。
我必须对一些太大而无法放入内存的数据训练分类模型,我正在使用 scikit learn 和 pandas 来进行分析。所以这是我的问题,如何在在线学习管道中使用验证来调整超参数? 我使用带有chuck
我正在开发一个应用程序,该应用程序将从 webservice 获取数据和图像并将其存储在设备中以供离线使用。同时,应用程序会将一些数据存储在 sqlite db 中,并将一些图像作为默认数据。 这是应
是否可以使用 FileReader API 和 onprogress 事件访问随 HTML5 传入的数据? 如果是这样,是否有 MD5 或其他快速散列算法的“在线”版本,以便我可以在文件完全读取之前开
希望任何人都可以帮助我更改下面的代码,我的临时文件包含以下代码: Temp=8.4* Humidity=70.4% 代替代码 Temp = 24 *C, Hum = 40 % 适用于以下脚本。 我需
我必须创建一个功能类似于联系人应用程序的应用程序。您可以在客户的 iPhone 上添加一个联系人,它应该会上传到客户的 iPad 上。如果客户在他们的 iPad 上更新联系人,它应该会在他们的 iPh
在 gitlab.com 上审查 merge 请求时,有时我必须在完成 merge 之前进行 rebase。 在 gitlab 上按“Rebase”后,我有一个特定的管道步骤失败,因为它无法验证用户的
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我正在尝试在 azure 上托管 SQL 服务器以与节点应用程序进行通信。我已经成功地完成了创建数据库服务器和数据库本身的过程。现在,我想编辑我的数据库结构。据我发现online ,应该有一种方法可以
我在 Quickbooks Intuit 开发人员 API 中使用 Oauth 2 获得了访问 token 。 范围是 com.intuit.quickbooks.accounting 我能够使用 Q
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
是否可以使Angular Material progress spinner与文本并大致与字符的大小一致地显示? 我想要类似的东西: please wait 微调器仅与“请稍候”文本成行出现。 这可
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个每天运行的Powershell脚本。今天它失败了,因为我正在使用的域 Controller 不可用。在继续执行脚本的其余部分之前,我想确保可以连接到可用的DC。 $LdapServer = "
我想制作一款在线 Flash 游戏,它将具有社交功能,但游戏玩法将主要是单人游戏。例如,屏幕上不会同时出现两个玩家,社交互动将通过异步消息进行,不会有实时聊天或其他任何内容。大部分逻辑将发生在客户端中
这几天我开始在线玩OpenShift。我部署了一个非常简单的“Hello World”Java 示例(1 行代码!),没有任何依赖项(没有 Spring!)命令行是这样的: oc.exe new-a
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
所以我一直在网上学习Java(初学者),并且我一直在尝试制作一个用于制作矩形的类文件。但是,我的在线 java 评估器指出它找不到实例变量。 This is the comment on it.我的代
我是一名优秀的程序员,十分优秀!