gpt4 book ai didi

c# - 是否可以动态编译和执行C#代码片段?

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:46 25 4
gpt4 key购买 nike

我想知道是否可以将 C# 代码片段保存到文本文件(或任何输入流),然后动态执行?假设提供给我的内容可以在任何 Main() block 中正常编译,是否可以编译和/或执行此代码?出于性能原因,我更愿意编译它。

至少,我可以定义一个他们需要实现的接口(interface),然后他们会提供实现该接口(interface)的代码“部分”。

最佳答案

C#/所有静态 .NET 语言中的最佳解决方案是使用 CodeDOM对于这样的事情。 (请注意,它的另一个主要目的是动态构建代码位,甚至整个类。)

这是一个很好的简短示例,来自 LukeH's blog ,它也使用一些 LINQ 只是为了好玩。

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.CSharp;
using System.CodeDom.Compiler;

class Program
{
static void Main(string[] args)
{
var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
parameters.GenerateExecutable = true;
CompilerResults results = csc.CompileAssemblyFromSource(parameters,
@"using System.Linq;
class Program {
public static void Main(string[] args) {
var q = from i in Enumerable.Range(1,100)
where i % 2 == 0
select i;
}
}");
results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));
}
}

这里最重要的类是 CSharpCodeProvider,它利用编译器动态编译代码。如果您想随后运行代码,只需使用一点反射来动态加载程序集并执行它。

Here是 C# 中的另一个示例,它(虽然稍微不够简洁)还向您精确地展示了如何使用 System.Reflection 命名空间运行运行时编译的代码。

关于c# - 是否可以动态编译和执行C#代码片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39426920/

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