阅山

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
长风破浪会有时,直挂云帆济沧海
  1. 首页
  2. Platforms
  3. LINUX
  4. dotnet
  5. 正文

dotnet的CSharpScript的测试案例

2025-07-18

场景

想找一个支持跨平台的dotnet脚本代码引擎。

总结

  • 增加CSharpScript后,windows/linux平台的编译包会增大20MB;
  • 编译后的单文件模式,在windows/linux无法运行,原因未知(猜测和Roslyn需要本地有SDK有关);
  • 遂放弃使用;

测试代码

// See https://aka.ms/new-console-template for more information

using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;

Console.WriteLine("Hello, World!");



var result = await CSharpScript.EvaluateAsync("1 + 2");
Console.WriteLine(result); // 输出 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

var options = ScriptOptions.Default
    .WithReferences(typeof(DateTime).Assembly)
    .WithImports("System");

var result2 = await CSharpScript.EvaluateAsync<DateTime>(
    "DateTime.Now.AddDays(1)",
    options);
Console.WriteLine(result2.ToString()); // 输出 3



try
{
    var result5 = await CSharpScript.EvaluateAsync("1 + ");
}
catch (CompilationErrorException e)
{
    Console.WriteLine(string.Join(Environment.NewLine, e.Diagnostics));
}

var result4 = await CSharpScript.EvaluateAsync<string>(@"
    int day = 3;
    switch (day) 
    {
        case 1: return ""Monday"";
        case 2: return ""Tuesday"";
        case 3: return ""Wednesday"";
        default: return ""Invalid day"";
    }
");
Console.WriteLine(result4); // 输出 "Wednesday"


var result6 = await CSharpScript.EvaluateAsync<int>(@"
    int x = 10;
    if (x > 5) 
    {
        return x * 2;
    }
    else 
    {
        return x / 2;
    }
");
Console.WriteLine(result6); // 输出 20

Console.ReadLine();
标签: 暂无
最后更新:2025-07-18

代号山岳

知之为知之 不知为不知

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号