.Net - 合并内存中的程序集

时间:2014-09-23 00:06:05

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

我有一个项目,我从字符串中动态编译代码:

 public static Assembly BuildItem(Document doc)
 {
     CompilerParameters parameters = new CompilerParameters();
     parameters.GenerateExecutable = false;
     parameters.GenerateInMemory = true;


     CSharpCodeProvider provider = new CSharpCodeProvider();
     CompilerResults results = provider.CompileAssemblyFromSource(parameters, doc.GetCompileString());


     return results.CompiledAssembly;
}

我希望能够做的是获取这些生成的汇编文件并将它们组合成一个汇编而不将它们写入磁盘。我知道ILMerge,如果我需要这样做,那目前是一个后备计划。任何帮助表示赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:1)

编译时,您可以传递一系列源文件,然后将它们全部放在一个程序集中。 e.g

CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerResults results = provider.CompileAssemblyFromSource(parameters, new string [] { source1, source2... })

或者,如果你真的需要为每个源分别调用CompileAssemblyFromSource。您可以使用

将所有生成的程序集作为嵌入资源添加到另一个程序集
CSharpCodeProvider provider = new CSharpCodeProvider();
foreach(string assemblyPath in generatedAssemblies)
    provider.EmbeddedResources.Add(assemblyPath);

则...

CompilerResults results = provider.CompileAssemblyFromSource(parameters, source);

... source来自以下博客,其中描述了如何从嵌入式资源加载程序集......

http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx