2014-09-23 4 views
-1

У меня есть проект, где я динамически компиляции кода из строки, как например:.Net - Объединение в памяти сборок

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

При компиляции вы можете передать массив исходных файлов, тогда они все в одной сборке. например

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); 

... где источник из следующего блог, который описывает, как загружать сборки из встроенных ресурсы ...

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

Смежные вопросы