在其他运行次编译的程序集中引用运行次编译的程序集

Rreference run-time compiled assembly in other run-time compiled assembly

我正在尝试在 运行 时间编译代码,该代码由一个对象引用,该对象也在 C# .NET 4.6 中的 运行 时间编译。

我正在使用 CSharpCodeProvider 在内存中生成 CompilerResult。生成的程序集在编译的第二个代码片段中被引用。是否可以在编译第二部分之前将 AssemblyReference 添加到 CompilerParameters(否则我会得到一个缺少的程序集编译器错误)。

目前我看到两个选项:

  1. 在光盘上创建第一个组件并使用CompilerParameters.ReferencedAssemblies.Add(但我不喜欢不必要的光盘操作)
  2. 完全不生成第1段,而是将代码粘贴到第2段(但我不喜欢多次粘贴相同的代码)

所以我的问题是:是否有内存中的方法在另一个 运行 时间生成的程序集中引用一个 运行 时间生成的程序集?

CSharpCodeProvider 无论如何都可以在磁盘上运行 - 即使您只生成程序集 "in-memory",它也会在磁盘上编译程序集并将其加载到内存中(它必须,有点 - 所有它确实是调用 csc.exe)。唯一不同的是汇编文件是某个地方的临时DLL,而不是你指定的文件。

如果您想要真正的内存中编译 C# 代码,请使用 Roslyn 编译器。