当前位置: 首页 > wzjs >正文

交易平台网站模板年度关键词

交易平台网站模板,年度关键词,海南的网站建设公司哪家好,分类信息网站做推广CSharpScript 是 Roslyn 编译器提供的脚本 API,允许在运行时动态执行 C# 代码。以下是其核心原理和典型应用场景: 一、核心原理 1. 架构基础 基于 Roslyn 编译器即服务(Compiler as a Service) 将代码文本实时编译为内存中的程…

CSharpScript 是 Roslyn 编译器提供的脚本 API,允许在运行时动态执行 C# 代码。以下是其核心原理和典型应用场景:

一、核心原理

1. 架构基础

  • 基于 Roslyn 编译器即服务(Compiler as a Service)

  • 将代码文本实时编译为内存中的程序集

  • 通过反射或轻量级代码生成执行

2. 执行流程

源代码 → 语法分析 → 绑定 → 编译 → 内存程序集 → 执行

3. 关键技术

  • 增量编译:重复执行时复用部分编译结果

  • 脚本会话:通过 ScriptState 保持执行上下文

  • 对象传递:通过 globals 参数实现宿主与脚本的数据交换

二、基础应用

1. 基本执行

var result = await CSharpScript.EvaluateAsync("1 + 2");
Console.WriteLine(result); // 输出 3

2. 带上下文执行

public class Globals { public int X = 1, Y = 2; }
var globals = new Globals();var result = await CSharpScript.EvaluateAsync<int>("X + Y", globals: globals);

3. 多步执行

var state = await CSharpScript.RunAsync("int x = 1;");
state = await state.ContinueWithAsync("int y = 2;");
state = await state.ContinueWithAsync("x + y");
Console.WriteLine(state.ReturnValue); // 输出 3

三、高级特性

1. 自定义引用和导入

var options = ScriptOptions.Default.WithReferences(typeof(DateTime).Assembly).WithImports("System.Math");var result = await CSharpScript.EvaluateAsync<double>("Sqrt(4)", options);

2. 异常处理

try
{await CSharpScript.EvaluateAsync("throw new Exception(\"Test\");");
}
catch (CompilationErrorException e)
{Console.WriteLine(string.Join("\n", e.Diagnostics));
}

3. 性能优化

// 预编译脚本
var script = CSharpScript.Create<int>("X * Y", globalsType: typeof(Globals));
var compiled = script.Compile();// 重复执行时使用编译结果
for (int i = 0; i < 100; i++)
{var result = await script.RunAsync(new Globals { X = i, Y = i });
}

四、典型应用场景

1. 动态规则引擎

var rule = "input.Age > 18 && input.Score > 60";
var result = await CSharpScript.EvaluateAsync<bool>(rule, globals: new { input = new { Age = 20, Score = 70 } });

2. 公式计算器

var formula = "Math.Sin(x) + Math.Cos(y)";
var options = ScriptOptions.Default.WithImports("System.Math");
var calculate = ScriptOptions.Default.WithReferences(typeof(Math).Assembly);var result = await CSharpScript.EvaluateAsync<double>(formula, globals: new { x = 1.0, y = 2.0 }, options);

3. 插件系统

string pluginCode = """using PluginBase;public class MyPlugin : IPlugin {public string Execute() => "Hello from plugin";}return new MyPlugin();""";var options = ScriptOptions.Default.WithReferences(typeof(IPlugin).Assembly).WithImports("PluginBase");var plugin = await CSharpScript.EvaluateAsync<IPlugin>(pluginCode, options);
Console.WriteLine(plugin.Execute());

五、性能注意事项

  1. 编译开销:首次执行较慢(约100-500ms)

  2. 内存占用:每个脚本会生成内存程序集

  3. 最佳实践

    • 预编译高频使用的脚本

    • 复用 ScriptOptions 实例

    • 避免在循环中动态编译

六、安全限制

  1. 代码访问控制

var options = ScriptOptions.Default.WithReferences(/* 白名单程序集 */);
  1. 沙箱方案

AppDomain sandbox = AppDomain.CreateDomain("Sandbox");
try {// 在沙箱中执行脚本
}
finally {AppDomain.Unload(sandbox);
}

七、Helloworld

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;public class TestController
{public List<string> Output { get; set; } = new List<string>(); // 改为可读写
}class Program
{static async Task<int> Main(string[] args){var controller = new TestController();var remainingCodeTxt = """Output.Add("Hello,world!");return Output; """;try{// 执行脚本var result = await CSharpScript.EvaluateAsync<List<string>>(remainingCodeTxt,globals: controller,options: ScriptOptions.Default.WithImports("System.Collections.Generic").WithReferences(typeof(List<string>).Assembly));Console.WriteLine("Controller.Output: " + string.Join(", ", controller.Output));Console.WriteLine("脚本返回值: " + string.Join(", ", result));return 0;}catch (Exception ex){Console.WriteLine($"Error: {ex.Message}");return 1;}}
}

CSharpScript 为 C# 提供了强大的运行时代码执行能力,适用于需要动态性的场景,但需注意性能和安全性问题。

http://www.dtcms.com/wzjs/163538.html

相关文章:

  • 上海网页设计公司费用夫唯老师seo
  • 上海网站建设 润seo引擎优化平台培训
  • 精通网站建设电子档正规电商培训学校排名
  • 邢台天九建设有限公司网站免费私人网站建设平台
  • 福建省建设厅网站劳保核定卡微信朋友圈广告投放价格表
  • 建网站的基本步骤交换友链要注意什么
  • 建设工程信息平台官网优化大师官网下载安装
  • 创建网站需要注意什么百度知道合伙人
  • 重庆企业网站建设公司sem工作内容
  • 欧洲做r18 cg的网站新人跑业务怎么找客户
  • 建设行业门户网站需要什么条件对网站提出的优化建议
  • 中央两学一做专题网站steam交易链接在哪里
  • 微信 网站建设项目营销推广方案
  • 做网站工资多钱学生个人网页制作html
  • dedecms做的网站建个网站费用大概多少钱一年
  • 企业查重名上海seo培训
  • 日本网站服务器活动营销推广方案
  • 企业网站的规划与建设百度搜索竞价推广
  • 云服务器网站搭建教程seo资讯网
  • 触屏版网站模板常用的搜索引擎
  • 北京手机网站制作推广竞价托管公司
  • 聊城优化seo直通车优化推广
  • 西安网站建设设计的好公司排名泉州网站建设
  • 动态网站开发与设计关键技术微商软文推广平台
  • 淄博做网站建设公司最好的网络推广方式
  • 如何选择建设网站类型手机优化是什么意思
  • 赣州网站建设信息公司官网搭建
  • 徐州网站建设公司百家号app推广方案策划
  • yii2 网站开发app推广接单发布平台
  • 长春做网站公司安卓内核级优化神器