Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C#执行Javascript代码的几种方法

C#执行Javascript代码的几种方法

作者头像
菩提树下的杨过
发布于 2018-01-24 02:49:12
发布于 2018-01-24 02:49:12
5.6K02
代码可运行
举报
运行总次数:2
代码可运行

一、开源项目 Javascript .NET

地址: http://javascriptdotnet.codeplex.com/ 它是Google Chrome V8引擎在.NET上的封装,功能完善,性能相对较高,推荐使用! (缺点就是asp.net web应用上,好象会报错)

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using Noesis.Javascript;
using System;
using System.Collections.Generic;

namespace JsCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (JavascriptContext ctx = new JavascriptContext())
            {
                var i = ctx.Run("1+2");
                Console.WriteLine(i);//3
                ctx.Run("var d = new Date(2013,9-1,2,20,30,15)");
                var d = ctx.GetParameter("d");
                Console.WriteLine(d);//2013/9/2 20:30:15
                var j = ctx.Run("function add(x,y){return x+y;};add(5,10);");
                Console.WriteLine(j);//15
                ctx.Run("var obj = {};obj.name='jimmy';obj.sex='Male';obj.name='杨俊明'");
                var obj = ctx.GetParameter("obj") as Dictionary<string, object>;
                foreach (var key in obj.Keys)
                {
                    Console.WriteLine(string.Format("{0}:{1}", key, obj[key]));
                    //name:杨俊明
                    //sex:Male
                }
                var jsonArr = ctx.Run("[{Airport:'PEK',Name:'北京首都机场'},{Airport:'XIY',Name:'西安咸阳机场'}]") as Array;
                foreach (var item in jsonArr)
                {
                    var json = item as Dictionary<string, object>;
                    foreach (var key in json.Keys)
                    {
                        Console.WriteLine(string.Format("{0}:{1}", key, json[key]));
                        //Airport:PEK
                        //Name:北京首都机场
                        //Airport:XIY
                        //Name:西安咸阳机场
                    }
                }
                ctx.SetParameter("x", 7);
                ctx.Run("function add(x,y){return x+y;}; function sub(x,y){return x-y;};k = add(2,x);var t = sub(9,1);");
                var k = ctx.GetParameter("k");
                Console.WriteLine(k);//9
                var t = ctx.GetParameter("t");
                Console.WriteLine(t);//8
                Console.Read();
            }

        }

    }
}

部署时要注意,msvcp100.dll、msvcr100.dll这二个文件,要复制到bin目录下

二、利用Microsoft.JScript.Vsa

先添加Microsoft.JScript、Microsoft.Vsa二个程序集的引用,然后就能用了,示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using Microsoft.JScript;
using Microsoft.JScript.Vsa;
using System;

namespace JsCSharp
{
    class Program
    {
        static VsaEngine Engine = VsaEngine.CreateEngine();

        static void Main(string[] args)
        {
            var i = (int)EvalJScript("1+2;");
            Console.WriteLine(i);//3
            var d = (DateObject)EvalJScript("var d = new Date(2013,9-1,2,20,30,15)");
            Console.WriteLine(d);//Mon Sep 2 20:30:15 UTC+8 2013
            var j = EvalJScript("function add(x,y){return x+y;};add(5,10);");
            Console.WriteLine(j);//15
            var obj = EvalJScript("var obj = {};obj.name='jimmy';obj.sex='Male';");
            Console.WriteLine(obj);//Male 注:只返回最后一条执行的语句结果
            Console.Read();
        }


        static object EvalJScript(string JScript)
        {
            object Result = null;
            try
            {
                Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine);
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            return Result;

        }
    }
}

 Vsa的功能比较有限,多条语句执行时,只返回最后一条语句的执行结果。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-10-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一种更简单的方式运行 C# 代码,简化 C# 开发体验!
前段时间 .NET 10 Preview 4 推出了一种更简单的方式运行 C# 代码,即可以直接使用dotnet run file.cs 命令运行 C# 文件。这意味着我们不再需要创建项目文件或搭建整个应用程序框架,就能够快速运行脚本、测试代码片段或验证想法。
郑子铭
2025/07/04
790
一种更简单的方式运行 C# 代码,简化 C# 开发体验!
【深入浅出C#】章节 9: C#高级主题:反射和动态编程
反射和动态编程为开发人员提供了一组强大的工具,可以应对多样化的编程需求,提高代码的灵活性和可维护性。然而,应谨慎使用它们,以确保代码的安全性和性能。
喵叔
2023/09/03
1.3K0
C#数据去重的这几种方式,你知道几种?
今天我们一起来讨论一下关于C#数据去重的常见的几种方式,每种方法都有其特点和适用场景,我们根据具体需求选择最合适的方式。当然欢迎你在评论区留下你觉得更好的数据去重的方式。
追逐时光者
2023/08/14
3910
C#开发者必知的10个冷门特性:让你的代码更高效、更智能
你可能已经听说过 C# 的强类型系统,或者它是微软对 Java 的回应。但今天,我们将深入探讨一些即使是经验丰富的开发者也可能不知道的 C# 奇妙特性。
郑子铭
2025/04/07
1350
C#开发者必知的10个冷门特性:让你的代码更高效、更智能
[C#] LINQ之GroupBy
本文作者文采欠佳,文字表达等方面不是很好,但实际的代码例子是非常实用的,请作参考。
CNXY
2019/05/24
2.1K0
C#异步有多少种实现方式?
  微信群里的一个提问引发的这个问题,有同学问:C#异步有多少种实现方式?想要知道C#异步有多少种实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解C#异步实现的方式。
追逐时光者
2023/05/11
5390
归纳一下:C#线程同步的几种方法
 我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态;或者你的程序需要访问一些外部资源如数据库或网络文件等。这些情况你都可以创建一个子线程去处理,然而,多线程不可避免地会带来一个问题,就是线程同步的问题。如果这个问题处理不好,我们就会得到一些非预期的结果。
zls365
2020/08/19
2.2K0
归纳一下:C#线程同步的几种方法
.Net 编译器平台--- Roslyn Scripting APIs
上一篇中.Net 编译器平台 --- Roslyn,介绍了Roslyn的各项功能,包括公开API,使用语法,使用语义,使用工作区等功能。
Niuery Diary
2023/10/22
3630
.Net 编译器平台--- Roslyn Scripting APIs
11个 Javascript 小技巧帮你提升代码质量,干货收藏!
如果一个函数体内有一些条件分支语句,而这些条件分支语句内部散布了一些重复的代码,那么就有必要进行合并去重工作。
程序员白楠楠
2021/01/19
5190
11个 Javascript 小技巧帮你提升代码质量
如果一个函数体内有一些条件分支语句,而这些条件分支语句内部散布了一些重复的代码,那么就有必要进行合并去重工作。
落落落洛克
2021/01/08
4350
11个 Javascript 小技巧帮你提升代码质量
编写高质量代码改善C#程序的157个建议[10-12]
  本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html 。本文主要学习记录以下内容:
aehyok
2018/08/31
4360
编写高质量代码改善C#程序的157个建议[10-12]
[译]RabbitMQ教程C#版 - 主题
在 教程[4] 中,我们改进了我们日志系统。我们用direct交换器替换了只能呆滞广播消息的fanout交换器,从而可以有选择性的接收日志。
Esofar
2018/10/10
5360
[译]RabbitMQ教程C#版 - 主题
c# List去重
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141341.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/24
1.7K0
C# 中的IComparable和IComparer
在开发过程中经常会遇到比较排序的问题,比如说对集合数组的排序等情况,基本类型都提供了默认的比较算法,如string提供了按字母进行排序,而int整数则是根据整数大小进行排序.但是在引用类型中(具有多个字段),那么这个排序当然也是取决于我们特定的值。
HueiFeng
2020/01/22
6450
C# 中的IComparable和IComparer
C#对象比较,你用对了吗?几种方法?
在 .NET 中使用 C# 时,对象比较(判等)可以通过多种方式进行,主要包括引用相等性比较和值相等性比较。理解这些不同的比较方法对于编写准确和高效的代码至关重要。值类型变量判断就是比较值是否相等,而引用类型的对象判断是否相等,一般是判断指定的对象是否是相同的实例。
郑子铭
2023/12/26
4090
C#对象比较,你用对了吗?几种方法?
C# 反射与特性(十):EMIT 构建代码
前面,本系列一共写了 九 篇关于反射和特性相关的文章,讲解了如何从程序集中通过反射将信息解析出来,以及实例化类型。
痴者工良
2021/04/26
8580
掌握25个C#实战技巧:从代码优化到高效开发
C#持续进化,每个版本都引入新特性,助你编写更高效、更优雅的代码。掌握以下技巧,不仅能提升代码质量,还能让开发过程更愉悦。
郑子铭
2025/04/18
2520
掌握25个C#实战技巧:从代码优化到高效开发
Python3 与 C# 扩展之~基础衍生
在线编程: https://mybinder.org/v2/gh/lotapp/BaseCode/master
逸鹏
2018/07/08
1.9K0
Python3 与 C# 扩展之~基础衍生
C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)
  这两天在网上看到的总结很多,尤其是博客园中的,很多很多,也给了我很多的启发,当然自己也总结过,而且有很多人也给与我一些意见和看法。不管怎样,自己还是先把所谓的基础知识加强巩固下吧。
aehyok
2018/09/11
7920
C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)
C#进阶-LINQ表达式之多表查询Ⅱ
本篇文章我们将演示LINQ扩展包基础语法里的多表查询 ,以Join连接查询为主要内容。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
Damon小智
2024/02/03
5630
C#进阶-LINQ表达式之多表查询Ⅱ
相关推荐
一种更简单的方式运行 C# 代码,简化 C# 开发体验!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验