Roslyn脚本化C#代码CSharpScript使用方法
2024-09-08
82
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
更新于:4个月前赞一波!4
相关文章
- .NET C# 使用Hook钩子实现全局监听键盘和鼠标
- .NET C#连接FTP实现文件上传下载
- C#使用 Attribute 实现 AOP 功能
- C#中的线程安全的集合ConcurrentQueue使用示例
- .NET C#中的Func、Predicate和Expression用法详解
- C#13新特性 使用System.Threading.Lock简化线程同步
- .NET C# 读取编辑.AVIF图片文件
- .NET C# SkiaSharp读取.AVIF图片文件报错
- .NET C# EntityFramework(EF)连接SQLite代码示例
- .NET9 C# 13 有哪些新特性?
- C#中的String和StringBuilder的区别
- .NET C#中的IEnumerable和IEnumerator的区别
- C# Const 和 ReadOnly的区别
- C# 使用Barrier进行多线程同步
- C#发送邮件代码简洁示例(附源码下载)
- C# Word转换成Pdf的方法
- c#使用MongoDB开发LBS应用
- hprose for C#使用教程
- c#实现与Java无差异的GZip压缩和GZip解压缩
- .Net报错Could not find a part of the path bin\roslyn\csc.exe
文章评论
评论问答