public ILPostProcessResult PostProcessInternal(ICompiledAssembly compiledAssembly) { AssemblyDefinition assemblyDefinition; #if MEDICINE_IL_DEBUG using (NonAlloc.Benchmark.Start($"GetAssemblyDefinition ({compiledAssembly.Name})")) #endif assemblyDefinition = PostProcessorAssemblyResolver.GetAssemblyDefinitionFor(compiledAssembly); try { CecilExtensions.CurrentModule = assemblyDefinition.MainModule; PostProcessorContext context; #if MEDICINE_IL_DEBUG using (NonAlloc.Benchmark.Start($"CreatePostProcessorContext ({compiledAssembly.Name})")) #endif context = new PostProcessorContext(assemblyDefinition.MainModule); #if MEDICINE_IL_DEBUG using (NonAlloc.Benchmark.Start($"MedicineInjection ({compiledAssembly.Name})")) #endif new InjectionPostProcessor(context).ProcessAssembly(); var pe = new MemoryStream(capacity: 1024 * 64); var pdb = new MemoryStream(capacity: 1024 * 16); var writerParameters = new WriterParameters { SymbolWriterProvider = new PortablePdbWriterProvider(), SymbolStream = pdb, WriteSymbols = true, }; assemblyDefinition.Write(pe, writerParameters); var inMemoryAssembly = new InMemoryAssembly(pe.ToArray(), pdb.ToArray()); return(new ILPostProcessResult(inMemoryAssembly, context.DiagnosticMessages)); } catch (Exception ex) { var error = new DiagnosticMessage { MessageData = $"Unexpected exception while post-processing assembly {compiledAssembly.Name}:\n{ex}", DiagnosticType = DiagnosticType.Error, }; return(new ILPostProcessResult(compiledAssembly.InMemoryAssembly, new List <DiagnosticMessage> { error })); } finally { CecilExtensions.CurrentModule.Dispose(); CecilExtensions.CurrentModule = null; } }
public InjectionPostProcessor(PostProcessorContext context) => this.context = context;