如何在JavaScript中运行.NET Core代码详情

目录
  • 一、前言
  • 二、DotNetJS
  • 三、Demo
    • 1. 创建项目
    • 2. 实现C#代码
    • 3. 实现JS代码
    • 4. 运行效果
  • 四、结论

一、前言

在.NET Core中运行JavaScript代码,目前已经有很多实现方案。

但是,如果你希望在纯JavaScript环境中运行.NET Core代码呢?

那么,DotNetJS可能对你有所帮助。

二、DotNetJS

DotNetJS可以将C#项目编译为与任何环境兼容的单文件JavaScript库,无论是Web浏览器,Node.js还是自定义限制空间,如VS Code的Web扩展,都可以正常使用它。

该解决方案基于两个主要组件:

  • JavaScript/dotnet-runtime(npm)使用已编译的C#程序集和.NET运行时WebAssembly模块,以在JavaScript中提供C# 操作性层。该库与环境无关 - 它不依赖于特定于平台的API,如浏览器DOM或节点模块,并且可以作为CommonJS或ECMAScript模块导入,也可以通过浏览器中的脚本标记使用。
  • DotNet/dotNetJS(NuGet)在C#中提供JavaScript互操作性层,并通过MSBuild任务将项目输出打包到单文件JavaScript库中。生成的库包含使用项目程序集初始化的dotnet运行时,并准备用作打包的C#项目的互操作性层。

三、Demo

1. 创建项目

使用VS2022创建一个控制台项目,修改项目文件,文件内容如下:

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EmitSourceMap>true</EmitSourceMap>
<EmitTypes>true</EmitTypes>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DotNetJS" Version="0.4.0" />
</ItemGroup>
</Project>
  • 指定SDK为Microsoft.NET.Sdk.BlazorWebAssembly
  • 引用DotNetJS Nuget

2. 实现C#代码

实现Program.cs,代码如下:

using DotNetJS;
using Microsoft.JSInterop;
using System;
using System.Threading.Tasks;
namespace HelloDotnetJS;
public partial class Program
{
public static void Main()
{
Console.WriteLine($"HelloDotnetJS 初始化!");
}
[JSFunction]
public static partial string GetBaseAddress();
[JSInvokable]
public async static Task<WeatherForecast[]> Demo()
{
var uri = new Uri(GetBaseAddress());
Console.WriteLine(uri);
var json = await new System.Net.Http.HttpClient { BaseAddress = uri }
.GetStringAsync("weather.json");
var forecasts = Newtonsoft.Json.JsonConvert.DeserializeObject<WeatherForecast[]>(json);
return forecasts;
}
}

Demo方法的具体逻辑如下:

  • 获取网站根路径,使用[JSFunction]指定具体值来源于JS传入
  • 访问网站根路径下的weather.json文件
  • 反序列化json,调用Newtonsoft验证第三方库能否正常使用
  • 返回WeatherForecast集合

在终端窗口执行​​dotnet publish​​​,上述代码将会编译成JS代码文件​​dotnet.js​​。

3. 实现JS代码

创建demo.html,代码如下:

<meta charset="UTF-8">
<script src="dotnet.js"></script>
<script>
//定义GetBaseAddress实现
dotnet.HelloDotnetJS.GetBaseAddress = () => window.location.protocol + "//" + window.location.host;
window.onload = async function () {
//初始化
await dotnet.boot();
console.log("开始执行Demo");
const str = await dotnet.HelloDotnetJS.Demo();
console.log(str);
};
</script>

4. 运行效果

将所有文件部署到网站上,例如http://localhost:5678/: 

weather.json的文件内容如下:

[
{
"date": "2018-05-06",
"temperatureC": 1,
"summary": "My IO"
},
{
"date": "2018-05-07",
"temperatureC": 14,
"summary": "Bracing"
}
]

用浏览器访问​​http://localhost:5678/demo.html​​,在控制台窗口可以看到代码运行正常: 

四、结论

DotNetJS目前还不完善,生成的JS代码文件​​dotnet.js​​尺寸较大,demo代码就有11M。

到此这篇关于如何在JavaScript中运行.NET Core代码详情的文章就介绍到这了,更多相关JavaScript中运行.NET Core内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • .NET Core类库项目中读取appsettings.json配置的方法

    这是一位朋友问我的问题,写篇随笔回答一下.有2种方法,一种叫丑陋的方法 ——IConfiguration ,一种叫优雅的方法 —— IOptions . 1)先看丑陋的方法 比如在RedisClient 中需要读取appsettings.json 中的 redis 连接字符串: { "redis": { "ConnectionString": "xxx" } } 需要在RedisClient 的构造函数参数中添加IConfiguration 接口

  • ASP.NET Core应用程序配置文件AppSetting.json

    AppSetting.json 当我们使用空项目模板或Razor页面或MVC模板或Web API模板创建ASP.NET Core Web应用程序时,Visual Studio会自动为我们创建appsettings.json文件,如下图所示. appsettings.json文件是一个应用程序配置文件,用于存储配置设置,例如数据库连接字符串,任何应用程序范围的全局变量等.如果打开ASP.NET Core appsettings.json文件,则默认情况下会看到以下代码 这是由Visual Stud

  • asp.net core 使用 tensorflowjs实现 face recognition的源代码

    功能描述 上传照片文件名及是系统要识别标签或是照片的名称(人物标识) 提取照片脸部特征值(调用 facemesh模型) 保存特征值添加样本(调用 knnClassifier) 测试上传的图片是否识别正确 项目依赖的库 源代码(neozhu/smartadmin.core.urf: Domain Driven Design (DDD) ultra-lightweight rapid development architecture(support .net 5.0) (github.com)) t

  • .net core中编辑json配置文件的方法

    引言 最近在具体项目开发应用中,项目采用的json格式配置文件,配置文件的加载采用的IConfiguration接口对象进行的管理,这是.net standard时代,微软所提供的现代化的配置管理工具. 项目设计中,需要在运行过程中,将远程服务端发送过来的配置信息回写到配置文件中.然而,必应也好,百度也罢,翻遍网络,这套现代化的配置管理模型中,却找不到一个可以改变配置回写的方法. 无奈之下,只好自己动手,手动造轮子了. .NET Standard时代的配置模型 随着.NET Standard时代

  • 为什么ASP.NET Core 数据库连接串的值和appsettings.json配的不一样?

    目录 一.配置读取顺序 二.分析 三.演示 1.读取Providers 2.读取配置值 一.配置读取顺序 ASP.NET Core 中的配置是使用一个或多个配置提供程序执行的,配置提供程序使用各种配置源从键值对读取配置数据. ASP.NET Core 提供了大量可用的配置提供程序,这还不包括可以自定义配置提供程序. 添加配置提供程序的顺序很重要,因为后面的提供程序添加的配置值将覆盖前面的提供程序添加的值. 配置提供程序的典型顺序为: appsettings.json appsettings.En

  • .NET Core 处理 WebAPI JSON 返回烦人的null为空

    前言 项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值,则代码实体类中对应的字段类型为可空类型Nullable<>,如int?,DateTime?,null值字段序列化返回的值都为null,前台对应字段赋值需要做null值判断,怎么才能全局把null替换为空. 本文分享WebAPI接口服务统一返回null替换为空的方法. 一.分析问题 .NET Core中使用Newtonsoft.Json进行序列化,WebAPI接口返回格式通过Startup.cs类全局设置.想是否可

  • ASP.NET CORE读取json格式配置文件

    目录 一.在Startup类中读取json配置文件 1.使用Configuration直接读取 2.使用IOptions接口 1.定义实体类 2.修改json文件 3.在StartUp类里面配置 3.读取自定义json文件 实例化类 添加方式1 添加方式2 二.在类库中读取json文件 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的

  • 如何在JavaScript中运行.NET Core代码详情

    目录 一.前言 二.DotNetJS 三.Demo 1. 创建项目 2. 实现C#代码 3. 实现JS代码 4. 运行效果 四.结论 一.前言 在.NET Core中运行JavaScript代码,目前已经有很多实现方案. 但是,如果你希望在纯JavaScript环境中运行.NET Core代码呢? 那么,DotNetJS可能对你有所帮助. 二.DotNetJS DotNetJS可以将C#项目编译为与任何环境兼容的单文件JavaScript库,无论是Web浏览器,Node.js还是自定义限制空间,

  • 如何在Golang中运行JavaScript

    我们知道,在 Python 里面,如果你要运行一段 JavaScript,你可以使用execJS这种第三方库.那么在 Golang 里面,你想运行 JavaScript 的时候又应该怎么办呢? 最近我发现一个使用 Golang 开发的 JavaScript 引擎:Goja[1].它实现了ES 5.1的所有语法和大部分的ES 6语法,比 Python 的execJS要厉害得多.在一定程度上和特定场景下,它可以完全替代Chrome 的 V8引擎. 我们来看看如使用它运行一段 JavaScript 代

  • 如何在JavaScript中使用localStorage详情

    如果你是一名开发人员,想要进入到.NET的世界,你需要知道都有哪些可能.由于.NET Framework是.NET生态系统中最流行的技术,你可以用它来构建各种各样的应用程序,但是最近,出现了一些新的东西,比如 .NET Core 和.NET Standard library.我们可以在项目或构建中使用它吗? localStorage对象是web编程中应用最广泛的对象之一.它提供了在用户计算机上本地存储键值对的简单解决方案. 大多数web开发人员都喜欢localStorage API,因为它具有简

  • 如何在JavaScript中正确处理变量

    变量无处不在.即便我们写一个小函数或一个小工具,也要声明.赋值和读取变量.增强对变量的重视,可以提高代码的可读性和可维护性. 1.建议使用 const,要么使用 let 用 const 或 let 声明自己的 JavaScript 变量.两者之间的主要区别是 const 变量在声明时需要初始化,并且一旦初始化就无法再重新赋值. // const 需要初始化 const pi = 3.14; // const 不能被重新赋值 pi = 4.89; // throws "TypeError: Ass

  • 深入理解JavaScript中的语法和代码结构

    概述 所有编程语言都必须遵守特定的规则才能运行. 确定编程语言的正确结构的这组规则称为语法. 许多编程语言主要由具有语法变化的类似概念组成. 在本教程中,我们将介绍JavaScript语法和代码结构的许多规则和约定. 功能性和可读性 在开始使用JavaScript时,功能性和可读性是关注语法的两个重要原因. 有些语法规则是JavaScript功能所必需的.如果不遵循它们,控制台将抛出一个错误,脚本将停止执行. 考虑"Hello,World!"中的语法错误.程序: // Example

  • Go 语言中运行 C程序 代码 

    前言: 在前面多篇 Go 系列文章中,我们了解到,Go 语言脱胎于 C 语言,这就意味着在某些更底层的细节中,我们可以使用 C 语言实现,然后通过 Go 来调用相关的 C 代码.其实这一特点,在 Java 的 JVM.Python 的解释器也是通过底层是直接调用 C 实现的. 而本篇文章就来学习一下,如何在 Go 语言中运行 C 程序. 一.直接在 Go 代码中写入 C 程序 Go 语言通过 cgo 工具来识别代码中的 C 语言,我们可以通过命令 ​​go env​​ 来查看是否 cgo 工具是

  • 如何在wxml中直接写js代码(wxs)

    这篇文章主要介绍了如何在wxml中直接写js代码(wxs),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们在h5开发中,很多时候要在html中写到js代码,这个很容易实现.但是在微信小程序开发中,是不能直接在wxml中写js代码的,因此就有了wxs.在wxml中用wxs代码,有以下几种方式(在小程序文档中写的很清楚,我只不过是总结下) 第一种:直接在wxml文件中使用<wxs>标签 <wxs module="dateMod

  • 如何在JavaScript中创建具有多个空格的字符串?

    通过创建变量 var a = 'something' + '                         ' + 'something' 我得到这个值:'something something'. 如何在JavaScript中创建一个包含多个空格的字符串? 使用\xa0- 它是一个NO-BREAK SPACE char. 从UTF-8编码表和Unicode字符引用,可以写成如下: var a = 'something' + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0' + '

  • 详解如何在Javascript中使用Object.freeze()

    Object.freeze() Object.freeze() 方法可以冻结一个对象.一个被冻结的对象再也不能被修改:冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性.可配置性.可写性,以及不能修改已有属性的值.此外,冻结一个对象后该对象的原型也不能被修改.freeze() 返回和传入的参数相同的对象 用法 const objectExample = { prop1: 20, prop2: "羊先生" }; // 默认情况下,我们可以根据需

  • 如何在JavaScript中等分数组的实现

    最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了. github 地址:https://github.com/qq449245884/vue-okr-tree 在本教程中,我们来学习一下如何使用Array.splice()方法将数组等分,还会讲一下,Array.splice() 和 Array.slice() 它们之间的不同之处. 1. 将数组分为两个相等的部分 我们可以分两步将数组分成两半: 使用length/2和Math.cei

随机推荐