public int Execute(string moduleName, int expectedOutputLength, out string processOutput) { _executeRequested = true; try { return(_assemblyManager.Execute(moduleName, expectedOutputLength, out processOutput)); } catch (TargetInvocationException tie) { string dumpDir; _assemblyManager.DumpAssemblyData(out dumpDir); throw new ExecutionException(tie.InnerException, dumpDir); } }
public void Emit(Compilation mainCompilation, IEnumerable <ResourceDescription> manifestResources) { var diagnostics = DiagnosticBag.GetInstance(); var dependencies = new List <ModuleData>(); testData.Methods.Clear(); ImmutableArray <byte> mainImage, mainPdb; bool succeeded = EmitCompilation(mainCompilation, manifestResources, dependencies, diagnostics, testData, out mainImage, out mainPdb); this.lazyDiagnostics = diagnostics.ToReadOnlyAndFree(); if (succeeded) { this.mainModule = new ModuleData(mainCompilation.Assembly.Identity, mainCompilation.Options.OutputKind, mainImage, mainPdb, inMemoryModule: true); this.allModuleData = dependencies; this.allModuleData.Insert(0, mainModule); CreateAssemblyManager(dependencies, mainModule); } else { string dumpDir; RuntimeAssemblyManager.DumpAssemblyData(dependencies, out dumpDir); // This method MUST throw if compilation did not succeed. If compilation succeeded and there were errors, that is bad. // Please see KevinH if you intend to change this behavior as many tests expect the Exception to indicate failure. throw new EmitException(this.lazyDiagnostics, dumpDir); // ToArray for serializability. } }
public void Emit( Compilation mainCompilation, IEnumerable <ResourceDescription> manifestResources, bool usePdbForDebugging = false) { _testData.Methods.Clear(); var diagnostics = DiagnosticBag.GetInstance(); var dependencies = new List <ModuleData>(); var mainOutput = EmitCompilation(mainCompilation, manifestResources, dependencies, diagnostics, _testData); _emitData = new EmitData(); _emitData.Diagnostics = diagnostics.ToReadOnlyAndFree(); if (mainOutput.HasValue) { var mainImage = mainOutput.Value.Assembly; var mainPdb = mainOutput.Value.Pdb; _emitData.MainModule = new ModuleData( mainCompilation.Assembly.Identity, mainCompilation.Options.OutputKind, mainImage, pdb: usePdbForDebugging ? mainPdb : default(ImmutableArray <byte>), inMemoryModule: true); _emitData.MainModulePdb = mainPdb; _emitData.AllModuleData = dependencies; // We need to add the main module so that it gets checked against already loaded assembly names. // If an assembly is loaded directly via PEVerify(image) another assembly of the same full name // can't be loaded as a dependency (via Assembly.ReflectionOnlyLoad) in the same domain. _emitData.AllModuleData.Insert(0, _emitData.MainModule); _emitData.RuntimeData = CreateAndInitializeRuntimeData(dependencies, _emitData.MainModule.Id); } else { string dumpDir; RuntimeAssemblyManager.DumpAssemblyData(dependencies, out dumpDir); // This method MUST throw if compilation did not succeed. If compilation succeeded and there were errors, that is bad. // Please see KevinH if you intend to change this behavior as many tests expect the Exception to indicate failure. throw new EmitException(_emitData.Diagnostics, dumpDir); } }