C# .NETCore2.1中的动态代码编译

C# .NETCore2.1中的动态代码编译,c#,dynamic,compilation,.net-core,C#,Dynamic,Compilation,.net Core,是否有人设法找到一种变通方法/方法,将一个或多个文件或文本动态编译到.NETCore(2.1)中的.dll中 结果产生了一个平台NotSupportedException,CodeDom在.Net核心中的使用似乎非常有限。请参阅vs中System.CodeDom.Compiler的类似和比较视图 我们需要能够在现场编写和动态编译自定义代码。我有一种动态加载任何结果.dll的方法,但我首先需要能够获得该.dll 目前我能看到的唯一解决办法是创建一个.NETFramework api/服务来实现这一

是否有人设法找到一种变通方法/方法,将一个或多个文件或文本动态编译到.NETCore(2.1)中的.dll中

结果产生了一个平台NotSupportedException,CodeDom在.Net核心中的使用似乎非常有限。请参阅vs中System.CodeDom.Compiler的类似和比较视图

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

目前我能看到的唯一解决办法是创建一个.NETFramework api/服务来实现这一点。这里唯一的其他解决方案是放弃.NETCore而转向.NETFramework吗

注意:我希望在代码库中动态地执行此操作。因此,的解决方案是不相关的,因为它声明:“要直接调用Roslyn编译器,必须使用命令行驱动程序”,这将使我走上完全错误的道路。然而,如果我知道这就是我想要做的,我会提供解决方案


@Sami Kahmonem提供的链接就是我用来解决这个问题的

您有两种选择

  • 使用Roslyn脚本API(Microsoft.CodeAnalysis.CSharp.Scripting)。这非常简单,速度惊人。此外,您不向文件系统写入任何二进制文件

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


  • 关于详细的解释,您应该看看这个问题:(您不需要创建NuGet.config或类似的东西)

    也许您可以通过Roslyn来完成?是的,Roslyn是一种方法,可以复制你如何使用Roslyn API创建一个C#项目?@DioBrando如果你指的是
    dotnet new
    的模板,请看
            var csProvider = CodeDomProvider.CreateProvider("CSharp");
            CompilerResults compilerResults = csProvider.CompileAssemblyFromFile(options, files);