c# - 使用 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 写了一篇关于代码项目的完整文章:使用 Roslyn 将代码编译成单独的网络模块并将它们组装成动态库,完整的源代码可在 GitHub 上获得。
虽然这可能不是您正在寻找的内容,但它应该可以帮助您开始使用 Roslyn 概念,了解如何CSharpCompilation
从 a创建 aSyntaxTree
并将其发送到 a Stream
。
推荐阅读
- delphi - 无法使用 Delphi Indy 控件连接到 https 站点
- php - 将数组排序为升序
- python - 不同场景的随机浮点数
- spring-webflux - 如何在 Spring Webflux / RSocket 中负载平衡通道
- r - 如何将不整洁的列表翻译成整洁的数据框?
- selenium - 使用 Selenium WebDriver 清除浏览器缓存和历史记录
- node.js - 如果用户登录,想要重定向用户
- python - Jinja2 中的上下文是什么?
- azure-cognitive-search - 技能输出映射到 Edm.DateTimeOffset 字段
- splunk - 如何在 splunk 中配置 eml 数据格式