首页 > 解决方案 > 使用 Rosyln 将多个文件动态编译成程序集

问题描述

我最近看到在 .NET Core 5 中不推荐使用 CSharpCodeProvider。我想知道是否有一种聪明的方法可以将多个文件合并到一个 dll 中,我可以使用 Rosyln 从中加载。我不想坚持使用 .NET Framework 4.7,因为这是我正在开发的程序的重要组成部分。

我的代码过去几乎就是这样

string Files[] = Directory.GetFiles("xxxxx/bin/Debug/net5.0/Scripts", ".cs");
Parameters = new CompilerParameters(new string[1] {"xxxxx/bin/Debug/net5.0/Program.dll"}, "xxxxx/bin/Debug/net5.0/Scripts/Output/Scripts.dll");
return new CSharpCodeProvider().CompileAssemblyFromFile(Parameters, Files).CompiledAssembly;

在 Rosyln 中执行此操作的最有效方法是什么?

参考:https ://github.com/dotnet/runtime/issues/18768#issuecomment-265381303 (PlatformNotSupportedException)

标签: c#.net-corecompilationruntimeroslyn

解决方案


Nick Polyak 写了一篇关于代码项目的完整文章:使用 Roslyn 将代码编译成单独的网络模块并将它们组装成动态库,完整的源代码可在 GitHub 上获得

虽然这可能不是您正在寻找的内容,但它应该可以帮助您开始使用 Roslyn 概念,了解如何CSharpCompilation从 a创建 aSyntaxTree并将其发送到 a Stream


推荐阅读