使用 Rosyln 将多个文件动态编译成程序集
Dynamically compile multiple files into assembly using 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)
Nick Polyak 写了一篇关于代码项目的完整文章:Using Roslyn for Compiling Code into Separate Net Modules and Assembling them into a Dynamic Library and with complete source code available on GitHub。
虽然这可能不是您要找的东西,但它应该可以帮助您开始使用 Roslyn 概念,如何创建 CSharpCompilation
from a SyntaxTree
and emit it to a Stream
。
我最近看到在 .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)
Nick Polyak 写了一篇关于代码项目的完整文章:Using Roslyn for Compiling Code into Separate Net Modules and Assembling them into a Dynamic Library and with complete source code available on GitHub。
虽然这可能不是您要找的东西,但它应该可以帮助您开始使用 Roslyn 概念,如何创建 CSharpCompilation
from a SyntaxTree
and emit it to a Stream
。