私のテストのいくつかでは、いくつかのアセンブリを生成し、 Mono.Cecil を使用してアセンブリを検査するICSharpCode.Decompilerを使用してそれらを「逆コンパイル」する必要があります。
パフォーマンス上の理由から、メモリ内にアセンブリを生成してディスク I/O を回避したいと考えています。
以下に、使用する予定のコードをいくつか示します。
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() を実装することは可能ですか?