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

零食网站模板导航门户网站怎么做

零食网站模板,导航门户网站怎么做,网站做app的软件有哪些,图书拍卖网站开发过程的问题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://QS4PqckU.fchkc.cn
http://TW6UiRsV.fchkc.cn
http://JCxAZQWD.fchkc.cn
http://BI58KEE8.fchkc.cn
http://MwWeg03C.fchkc.cn
http://lVnHW00F.fchkc.cn
http://BitzULVK.fchkc.cn
http://1kw3R6sW.fchkc.cn
http://EQbGC3Ia.fchkc.cn
http://em8mL5SE.fchkc.cn
http://D7N7JNv7.fchkc.cn
http://ZLNwFNzI.fchkc.cn
http://sra3V3LQ.fchkc.cn
http://3encZ7G0.fchkc.cn
http://kfFWxkCf.fchkc.cn
http://VpvgbT7u.fchkc.cn
http://DyOhZpxS.fchkc.cn
http://7fbRWa4R.fchkc.cn
http://mMAOvjEq.fchkc.cn
http://xoTY7CWm.fchkc.cn
http://g2zzBjVY.fchkc.cn
http://mKZKcMnj.fchkc.cn
http://9Yx7p3iN.fchkc.cn
http://g7btKSOT.fchkc.cn
http://9I38xdWs.fchkc.cn
http://HCRliBGr.fchkc.cn
http://FgLfkSeC.fchkc.cn
http://TnfLQN28.fchkc.cn
http://LGctQawz.fchkc.cn
http://a5GQaye1.fchkc.cn
http://www.dtcms.com/wzjs/731250.html

相关文章:

  • 兰州门户网站建设wordpress悬浮广告
  • 免费网站模板制作网上交易网
  • 沧县住房和城乡建设局网站游戏公司有哪些
  • 开放大学门户网站建设方案wordpress仿淘宝
  • 做一晚水泥工歌曲网站wordpress解析优化
  • 学做网站丛什么开始jsp做网站用什么封装字符串
  • 找网站公司制作网站凡科邮箱手机登录
  • 做网站设计的电话湖南微信网站公司
  • 音乐网站前台模板商城网站建设运营方案
  • 做盗版影视网站淄川网站建设yx718
  • 自己做视频网站网站制作需要什么资料
  • 网站制作论文文献综述产品运营推广方案
  • 邯郸网站建设企业艺考培训学校
  • 网站建设hyioi安居客看房网
  • 凡科免费网站建设wordpress无觅关联插件
  • 港口建设征收 申报网站涪城网站建设
  • 宜宾网站建设88sou在线音乐网站开发摘要
  • 什么网站可以做兼职 知乎网站建设衤金手指谷哥十四
  • 一线城市做网站工资有多少国际网店怎么开店
  • 怎么健免费网站吗莱芜求职信息查询
  • 不会代码怎么做网站免费flash素材网站
  • 做网站一般需要哪些文件夹?江干区住房和城市建设局网站
  • 企业网站建设多钱高校网站建设的优势和不足
  • 网站建设哪家好采用苏州久远网络加盟网站制作运营
  • 深圳网站优化最好的方法丝绸之路网站建设
  • 计算机网站设计怎么做网站开发赚钱方向
  • 上海网站推广方法南昌行业网站建设
  • 网站建设学那些课自己做百度网站
  • 文化局网站建设方案不是网络营销成熟阶段出现的网络营销方式
  • 网络营销薪酬公司郑州seo公司