是否有人设法找到一种解决方法/方式来将一个或多个文件或文本动态编译为.Net Core(2.1)中的.dll?
var csProvider = CodeDomProvider.CreateProvider("CSharp");
CompilerResults compilerResults = csProvider.CompileAssemblyFromFile(options, files);
会导致PlatformNotSupportedException,并且看来CodeDom在.Net Core中的用途非常有限。参见类似的complaint,并在.Net Core 2.1与.Net Framework 4.7.2中比较System.CodeDom.Compiler的视图。
我们需要能够在现场编写和动态编译自定义代码。我有一种动态加载任何生成的.dll的方法,但是我只需要能够首先获取该.dll。
我目前只能看到的解决方法是创建一个.Net Framework api / service来执行此操作。是这里唯一放弃使用.Net Core并转到.Net Framework的其他解决方案吗?
注意:我想在代码库中动态地执行此操作。因此,"Is it possible to compile a single C# code file with .net core Roslyn compiler?"的解决方案并不相关,因为它指出:“要直接调用Roslyn编译器,必须使用命令行驱动程序”,这将使我走上完全错误的道路。但是,如果我知道那是我想要做的,"How to compile a C# file with Roslyn programmatically?"将提供解决方案。
@Sami Kahmonem提供的指向Joel Martinez' solution in .Net Core 1的链接是我用来解决此问题的链接。
答案 0 :(得分:2)
有两种选择。
使用Roslyn脚本API(Microsoft.CodeAnalysis.CSharp.Scripting)。这非常容易,而且速度惊人。另外,您也不会将任何二进制文件写入文件系统。
使用完整的编译器创建DLL并加载它。如果可能的话,我不建议这样做。
有关详细说明,您应该查看以下问题:Compiling and Running code at runtime in .Net Core 1.0(您无需创建NuGet.config或类似的内容)