gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:32:52 28 4
gpt4 key购买 nike

有没有人设法找到一种解决方法/方法来将一个或多个文件或文本动态编译为 .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 中 System.CodeDom.Compiler 的 View 对比.Net Framework 4.7.2 .

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

目前我能看到的唯一解决方法是创建一个 .Net Framework api/服务来执行此操作。放弃 .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是我用来解决这个问题的。

最佳答案

有两种选择。

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

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

有关详细说明,您应该查看此问题:Compiling and Running code at runtime in .Net Core 1.0 (您不需要创建 NuGet.config 或类似的东西)

关于c# - .Net Core 2.1 中的动态代码编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51960099/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com