gpt4 book ai didi

c# - 如何在最终用户预览中使用 Roslyn 执行脚本

转载 作者:太空狗 更新时间:2023-10-29 22:26:26 28 4
gpt4 key购买 nike

我正在尝试使用 roslyn 的最终用户预览,并想执行一个简单的脚本。我想做的是:

static void Main(string[] args)
{
// Is this even valid?
var myScript = "int x = 5; int y = 6; x + y;";

// What should I do here?
var compiledScript = Something.Compile(myScript);
var result = compiledScript.Execute(myScript);


Console.WriteLine(result);
}

有人可以指出一些资源和/或告诉我要安装哪些 nuget 包来实现这一点。我已经安装了 Microsoft.CodeAnalysis,但无法弄清楚它是否可行,我觉得我遗漏了什么。

最佳答案

在最新的预览版中(暂时)删除了允许您轻松执行此操作的脚本 API。您仍然可以编译脚本,发出并加载程序集并通过执行以下操作调用其入口点

public static class Program
{
public static void Main(string[] args)
{
var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location);

var defaultReferences = new[] { "mscorlib.dll", "System.dll", "System.Core.dll" };

var script = @"using System;
public static class Program
{
public static void Main(string[] args)
{
Console.WriteLine(""Hello {0}"", args[0]);
}
}";

// Parse the script to a SyntaxTree
var syntaxTree = CSharpSyntaxTree.ParseText(script);

// Compile the SyntaxTree to a CSharpCompilation
var compilation = CSharpCompilation.Create("Script",
new[] { syntaxTree },
defaultReferences.Select(x => new MetadataFileReference(Path.Combine(assemblyPath, x))),
new CSharpCompilationOptions(OutputKind.ConsoleApplication));

using (var outputStream = new MemoryStream())
using (var pdbStream = new MemoryStream())
{
// Emit assembly to streams.
var result = compilation.Emit(outputStream, pdbStream: pdbStream);
if (!result.Success)
{
return;
}

// Load the emitted assembly.
var assembly = Assembly.Load(outputStream.ToArray(), pdbStream.ToArray());

// Invoke the entry point.
assembly.EntryPoint.Invoke(null, new object[] { new[] { "Tomas" } });
}
}
}

它将在控制台输出Hello Tomas :)

关于c# - 如何在最终用户预览中使用 Roslyn 执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23641584/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com