C#通过Roslyn编写脚本

一、Roslyn添加引用集#

通过Nuget添加Microsoft.CodeAnalysis.CSharp 引用集,需要注意.Net Framework4.6.1以上版本。

image-20220107094601822

添加从成功后,引入以下空间命名:

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

二、Roslyn 基本操作#

  class AnalysisTest
    {
        public async void GetCurrentDateTime()
        {
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} 开始获取当前时间");
            var s4     = CSharpScript.Create(@"return DateTime.Now.ToString(""yyyy-MM-dd HH:mm:ss:fff"");", ScriptOptions.Default.WithImports("System"));
            var result = (await s4.RunAsync()).ReturnValue;
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} {result}");
        }

        public async void ArithmeticExpression()
        {
            string expression = "(1+2)*3/4";
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} 计算算数表达式:{expression}");
            var res = await CSharpScript.EvaluateAsync(expression);
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} {res}");

        }

        public async void ArithmeticExpressionParam()
        {
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} 测试脚本中的变量:");
            var script = CSharpScript.Create("int x=3;int y=1;", ScriptOptions.Default.WithImports("System.Math"));
            script = script.ContinueWith("int z=2;");
            string expression = "Sqrt(x)+y";
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} 测试Math函数:{expression}");
            script = script.ContinueWith("return Sqrt(x)+y-2;");
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} {(await script.RunAsync()).ReturnValue}");

        }

        public async void DefineFunction()
        {
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} 测试脚本中定义函数(勾股定理):");
            var script = CSharpScript.Create("int x=3;int y=4;", ScriptOptions.Default.WithImports("System.Math"));
            string script1 = "double PythagoreanTheorem(double x,double y) { return   Sqrt(Pow(x,2)+Pow(y,2)); } return PythagoreanTheorem(x,y);";
            script = script.ContinueWith(script1);
            Console.WriteLine($"{DateTime.Now:HH:mm:ss:fff} {(await script.RunAsync()).ReturnValue}");
        }
    }

三、相关资料地址#

Microsoft.CodeAnalysis.CSharp Namespace | Microsoft Docs

使用C#写脚本 - SegmentFault 思否

作者:dongweian

出处:https://www.cnblogs.com/dongweian/p/15773934.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Dwaynerbing  阅读(813)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-01-07 关于.NET中的控制反转(二)- 依赖注入之 MEF
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu