Roslyn脚本化C#代码CSharpScript使用方法
2024-09-08
16
Roslyn 是微软公司开源的 .NET 编译器。编译器支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。Roslyn不仅仅可以直接编译输出,难能可贵的就是上述描述中的开放了编译的API,使得代码脚本化成为了可能。
首先通过Nuget安装Microsoft.CodeAnalysis.CSharp.Scripting
再代码中引用
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
以下是示例代码供参考
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
namespace MyLab.Roslyn
{
public class RoslynTest
{
public static void Run() {
string code1 = @"
public class ScriptedClass
{
public string HelloWorld { get; set; }
public ScriptedClass()
{
HelloWorld = ""Hello Roslyn!"";
}
}";
// 通过Run方法和ContinueWityAsync方法分别执行了两段脚本
var script1 = CSharpScript.RunAsync(code1).Result;
var result1 = script1.ContinueWithAsync<string>("new ScriptedClass().HelloWorld").Result;
Console.WriteLine(result1.ReturnValue);
var script2 = CSharpScript.Create<string>("return new MyClass().GetInfo();",
ScriptOptions.Default
// 明确程序集要引用的类型,类似于引用一个dll
.WithReferences(typeof(MyClass).Assembly)
// 明确代码中引用的类型,类似于using
.WithImports("MyLab.Roslyn"),
// 指定了传递参数需要用到的类型
globalsType: typeof(MyClass));
// Compile方法将脚本编译并保存到内存中,待调用
script2.Compile();
var result2 = script2.RunAsync(new MyClass()).Result;
Console.WriteLine(result2.ReturnValue);
}
}
public class MyClass {
public int Id =>1;
public string Name => "PaulYu";
public string GetInfo()
{
return $"My Id is {Id},My Name is {Name}.";
}
}
}
第一种方法用字符串定义了一个类,并且运行了类包含的方法。
第二种是调用已经存在的类的方法。
运行结果
Roslyn的官方说明地址:https://github.com/dotnet/roslyn/wiki
更多API请查看https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples
更新于:8天前赞一波!
相关文章
- c#网页保存为图片
- C# dynamic和object的区别
- C# KeyPress和KeyDown的区别
- C#中使用Cancellation取消异步任务
- C#检测文件夹内的文件变化
- C#12最新语法糖示例
- C#最新命名规范
- .NET(C#)常用表单验证正则表达式
- C#正则表达式获取图片src
- C#修改注册表信息示例
- C#中静态函数的使用
- C#内存转储Dump文件用法
- C#把文本中的data:image转成图片
- C#中内置的泛型委托Func和Action用法
- C#快速实现PDF转PPT
- C#设置Cookie的路径和过期时间
- C#实现开机启动
- .NET C#和F#怎么选?
- .NET C#实现Excel转PDF
- .NET(C#)反射的概念和使用方法
文章评论
全部评论