private (RollbackProcessResult, EmitResult, int) TryCompilation( MemoryStream ms, CSharpCompilation compilation, EmitResult previousEmitResult, bool lastAttempt, bool devMode, int retryCount) { RollbackProcessResult rollbackProcessResult = null; if (previousEmitResult != null) { // remove broken mutations rollbackProcessResult = _rollbackProcess.Start(compilation, previousEmitResult.Diagnostics, lastAttempt, devMode); compilation = rollbackProcessResult.Compilation; } // reset the memoryStream ms.SetLength(0); _logger.LogDebug($"Trying compilation for the {ReadableNumber(retryCount)} time."); var emitResult = compilation.Emit( ms, manifestResources: _input.ProjectInfo.ProjectUnderTestAnalyzerResult.Resources, win32Resources: compilation.CreateDefaultWin32Resources( versionResource: true, // Important! noManifest: false, manifestContents: null, iconInIcoFormat: null)); LogEmitResult(emitResult); return(rollbackProcessResult, emitResult, ++retryCount); }
private (RollbackProcessResult, EmitResult, int) TryCompilation( Stream ms, Stream symbolStream, CSharpCompilation compilation, EmitResult previousEmitResult, bool lastAttempt, bool devMode, int retryCount) { RollbackProcessResult rollbackProcessResult = null; if (previousEmitResult != null) { // remove broken mutations rollbackProcessResult = _rollbackProcess.Start(compilation, previousEmitResult.Diagnostics, lastAttempt, devMode); compilation = rollbackProcessResult.Compilation; } // reset the memoryStream ms.SetLength(0); symbolStream?.SetLength(0); _logger.LogDebug($"Trying compilation for the {ReadableNumber(retryCount)} time."); var emitOptions = symbolStream == null ? null : new EmitOptions(false, DebugInformationFormat.PortablePdb, _input.ProjectInfo.ProjectUnderTestAnalyzerResult.GetSymbolFileName()); var emitResult = compilation.Emit( ms, symbolStream, manifestResources: _input.ProjectInfo.ProjectUnderTestAnalyzerResult.GetResources(_logger), win32Resources: compilation.CreateDefaultWin32Resources( true, // Important! false, null, null), options: emitOptions); LogEmitResult(emitResult); return(rollbackProcessResult, emitResult, ++retryCount); }