mon*_*nty 5 c# compilation dynamic .net-core
有没有人设法找到一种解决方法/方法来将一个文件或多个文件或文本动态编译为 .Net Core (2.1) 中的 .dll?
var csProvider = CodeDomProvider.CreateProvider("CSharp");
CompilerResults compilerResults = csProvider.CompileAssemblyFromFile(options, files);
Run Code Online (Sandbox Code Playgroud)
导致 PlatformNotSupportedException 并且似乎 CodeDom 在 .Net Core 中的用途非常有限。查看类似的抱怨并比较.Net Core 2.1与.Net Framework 4.7.2中 System.CodeDom.Compiler 的视图。
我们需要能够在现场编写和动态编译自定义代码。我有一种动态加载任何结果 .dll 的方法,但我只需要首先能够获取该 .dll。
目前我能看到的唯一解决方法是创建一个 .Net Framework api/service 来执行此操作。是这里唯一放弃 .Net Core 并转到 .Net Framework 的其他解决方案吗?
注意:我想在代码库中动态执行此操作。因此,“是否可以使用 .net 核心 Roslyn 编译器编译单个 C# 代码文件?”的解决方案 不相关,因为它指出:“要直接调用 Roslyn 编译器,必须使用命令行驱动程序”,这会使我完全走上错误的道路。但是“如何以编程方式使用 Roslyn 编译 C# 文件?” 如果我知道这就是我想要做的,我会提供解决方案。
@Sami Kahmonem 提供的链接到Joel Martinez 在 .Net Core 1 中的解决方案是我用来解决这个问题的。
有两种选择供您选择。
使用 Roslyn 脚本 API (Microsoft.CodeAnalysis.CSharp.Scripting)。这非常简单,而且速度快得惊人。此外,您也不会将任何二进制文件写入文件系统。
使用完整编译器创建 DLL 并加载它。如果可能的话我不建议这样做。
有关详细说明,您应该查看这个问题:Compiling and Running code at running in .Net Core 1.0(您不需要创建 NuGet.config 或类似的内容)
归档时间: |
|
查看次数: |
5919 次 |
最近记录: |