В некоторых моих тестах мне нужно сгенерировать несколько сборок, а затем «декомпилировать» их, используя ICSharpCode.Decompiler, который использует Mono.Cecil для проверки сборок.Возможно ли получить поток для сборки, сгенерированной в памяти с помощью CodeDOM?
По соображениям производительности я хотел бы сгенерировать сборку в памяти, чтобы избежать дискового ввода-вывода.
Ниже вы можете найти код, я намерен использовать:
var cdp = CodeDomProvider.CreateProvider(CodeDomProvider.GetLanguageFromExtension("cs"));
var p = new CompilerParameters { GenerateInMemory = true } ;
var cr = cdp.CompileAssemblyFromSource(p, sources);
if (cr.Errors.Count > 0)
{
throw new Exception(cr.Errors[0].ErrorText);
}
// !!! I'd like to avoid building/loading the assembly to/from disk
// var assembly = AssemblyDefinition.ReadAssembly(assemblyPath, readerParameters);
// Instead, I'd like to do something like:
Stream assemblyStream = GetAssemblyContentAsStream(cr.CompiledAssembly);
var assembly = AssemblyDefinition.ReadAssembly(assemblyStream, readerParameters);
var dc = new DecompilerContext(assembly.MainModule);
var astBuilder = new AstBuilder(dc);
astBuilder.AddType(typeToBeConverted);
var output = new StringWriter();
astBuilder.GenerateCode(new PlainTextOutput(output));
Таким образом, вопрос: Можно ли реализовать GetAssemblyContentAsStream()?
Спасибо, я полностью согласен; вероятно, я просто волновался и старался оптимизировать материал без уважительной причины (или данных для поддержки необходимости) :) – Vagaus