使用Roslyn执行C#脚本
按顺序引入下面三个Nuget包
Microsoft.CodeAnalysis.CSharp
Microsoft.CodeAnalysis.Scripting
Microsoft.CodeAnalysis.CSharp.Scripting
示例:
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp7
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
string codeToCompile = @"
System.Console.WriteLine("" C# script!"");
int x = 1;
int y = 2;
return x + y;
";
try
{
// 执行脚本并获取结果
var result = await CSharpScript.EvaluateAsync<int>(codeToCompile);
Console.WriteLine($"The result of the script is: {result}");
}
catch (CompilationErrorException ex)
{
// 处理编译错误
foreach (var diagnostic in ex.Diagnostics)
{
Console.Error.WriteLine($"{diagnostic.Id}: {diagnostic.GetMessage()}");
}
}
catch (Exception ex)
{
// 处理其他运行时错误
Console.Error.WriteLine($"An error occurred: {ex.Message}");
}
}
}
}