zoukankan      html  css  js  c++  java
  • 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 思否

  • 相关阅读:
    Monkey界面版测试工具
    手游兼容性测试
    周版本制度
    08 | 事务到底是隔离的还是不隔离的?
    jackson
    localDateTime和Date
    服务器被攻击后数据库密码被破解
    GC收集器
    linux安装nginx,设置代理,负载均衡
    微信(公众,商户,开放)平台的区别
  • 原文地址:https://www.cnblogs.com/dongweian/p/15773934.html
Copyright © 2011-2022 走看看