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

本文关键字:运行时 编译程序 编译 程序集 引用 集中 其他 | 更新日期: 2023-09-27 18:12:38

我正在尝试在运行时编译代码,该代码由c# . net 4.6中运行时编译的对象引用。

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

目前我看到两个选项:

  1. 在磁盘上创建第一个汇编并使用CompilerParameters.ReferencedAssemblies.Add(但我不喜欢不必要的磁盘操作)
  2. 不生成第一段,但粘贴代码在第二段(但我不喜欢粘贴相同的代码多次)

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

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

CSharpCodeProvider无论如何都在磁盘上工作-即使您只在"内存中"生成程序集,它也会在磁盘上编译程序集并将其加载到内存中(它必须这样做-它所做的就是调用csc.exe)。唯一的区别是程序集文件是某个地方的临时DLL,而不是您指定的文件。

如果你想在内存中编译c#代码,使用Roslyn编译器