在运行时编译代码并使用加载到内存中的程序集

时间:2014-09-02 09:46:16

标签: c# .net .net-assembly csharpcodeprovider

我需要在运行时编译C#代码。我正在使用这样的代码:

CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.ReferencedAssemblies.Add("MyLibrary.dll");    // File Path on Hard Drive
...

但我想使用内存中加载的库而不是文件地址。有可能吗?

1 个答案:

答案 0 :(得分:3)

如果它是仅在内存中生成的程序集,您可以使用:

parameters.ReferencedAssemblies.Add
( typeof(ClassInAssemblyYouWantToAdd).Assembly.Location
);

或者:

parameters.ReferencedAssemblies.Add
( Assembly.Load("Full.Qualified.Assembly.Name").Location
);

Location属性具有加载程序集的路径。

它必须有一个程序集的硬拷贝,而不仅仅是内存中的东西,所以你不能只使用生成的程序集。如果需要使用它们,可以先将内存生成的程序集保存到磁盘。