动态代码编译在.net 2.1核心

问题描述 投票:2回答:1

有没有人设法找到一个解决办法/方法来动态编译文件,或文件,或文本,为在.net核心一个.dll(2.1)?

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

导致PlatformNotSupportedException,似乎CodeDom中只有在对.NET核心的使用非常有限。看到类似的complaint.Net Core 2.1比较视图System.CodeDom.Compiler的VS .Net Framework 4.7.2

我们需要能够编写和动态现场编译自定义代码。我有一个动态加载任何结果.dll文件的方式,但我只需要能够获取.dll文件摆在首位。

我可以看到目前唯一的解决方法是创建一个.NET框架API /服务做到这一点。是唯一的其他解决方案在这里放弃对.NET核心,去.Net框架?

注:我想在代码库中动态地做到这一点。 “直接调用罗斯林编译器就必须使用命令行驱动程序”这将让我在完全错误的道路:那么作为它指出了"Is it possible to compile a single C# code file with .net core Roslyn compiler?"的解决方案是不相关的。然而"How to compile a C# file with Roslyn programmatically?"将提供解决方案,如果我早知道这是我所期待的事情。

通过@Sami Kahmonem提供Joel Martinez' solution in .Net Core 1链接是我用来解决这个问题。

c# dynamic compilation .net-core
1个回答
2
投票

有你两个选择。

  1. 使用罗斯林脚本API(Microsoft.CodeAnalysis.CSharp.Scripting)。这是很容易和出奇的快。另外你不写任何二进制文件系统。
  2. 使用完整的编译器创建一个DLL并加载它。我不建议如果可能这样做。

有关详细的解释,你应该看看这个问题:Compiling and Running code at runtime in .Net Core 1.0(你不需要创建NuGet.config或像这样的东西)

© www.soinside.com 2019 - 2024. All rights reserved.