0

我正在尝试在运行时编译由 C# .NET 4.6 在运行时编译的对象引用的代码。

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

目前我看到两个选项:

  1. 在光盘上创建第一个程序集并使用 CompilerParameters.ReferencedAssemblies.Add (但我不喜欢不必要的光盘操作)
  2. 根本不生成第一块,而是将代码粘贴到第二块中(但我不喜欢多次粘贴相同的代码)

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

4

1 回答 1

1

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

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

于 2016-10-11T15:50:31.907 回答