.Net Core 2.1 中的动态代码编译



有没有人设法找到一种解决方法/方法来动态地将一个或多个文件或文本编译成.Net Core(2.1(中的.dll?

var csProvider = CodeDomProvider.CreateProvider("CSharp");
CompilerResults compilerResults = csProvider.CompileAssemblyFromFile(options, files); 

导致 PlatformNotSupportedException 的结果,似乎 CodeDom 在 .Net Core 中的用途非常有限。请参阅类似的投诉,并比较.Net Core 2.1与.Net Framework 4.7.2中System.CodeDom.Compiler的视图。

我们需要能够在现场编写和动态编译自定义代码。我有一种方法可以动态加载任何结果.dll,但我只需要能够首先获得该.dll。

目前我能看到的唯一解决方法是创建一个.Net Framework api/服务来执行此操作。这里唯一的其他解决方案是放弃.Net Core并转到.Net Framework吗?

注意:我想在代码库中动态执行此操作。因此,"是否可以使用 .net core Roslyn 编译器编译单个 C# 代码文件?"的解决方案并不相关,因为它指出:"要直接调用 Roslyn 编译器,必须使用命令行驱动程序",这将使我走上完全错误的道路。但是,如果我知道这就是我要做的,"如何使用 Roslyn 编译 C# 文件?"将提供解决方案。

@Sami Kahmonem提供的.Net Core 1中Joel Martinez解决方案的链接是我用来解决这个问题的。

有两个选项供您选择。

  1. 使用 Roslyn Scripting API (Microsoft.CodeAnalysis.CSharp.Scripting(。这非常简单,而且速度惊人。此外,您不会将任何二进制文件写入文件系统。

  2. 使用完整的编译器创建 DLL 并加载它。如果可能的话,我不建议这样做。

有关详细说明,应查看此问题:在运行时在 .Net Core 1.0 中编译和运行代码(无需创建 NuGet.config 或类似内容(

最新更新