From 92f9c3ab367f9ce5b715b4c3c516c79e8da0382b Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 29 Nov 2014 13:36:15 +0000 Subject: [PATCH] Fix IOException when running code coverage. Running unit tests with code coverage would intermittently throw an IOException: System.IO.IOException: The process cannot access the file '...OpenCover\coverage.xml' --- .../CodeCoverage/Project/Src/CodeCoverageResultsReader.cs | 5 +++-- .../Project/Src/RunTestWithCodeCoverageCommand.cs | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageResultsReader.cs b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageResultsReader.cs index b53be5572f..9f5bdde79b 100644 --- a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageResultsReader.cs +++ b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageResultsReader.cs @@ -52,8 +52,9 @@ namespace ICSharpCode.CodeCoverage CodeCoverageResults ReadCodeCoverageResults(string fileName) { - TextReader reader = fileSystem.OpenText(FileName.Create(fileName)); - return new CodeCoverageResults(reader); + using (TextReader reader = fileSystem.OpenText(FileName.Create(fileName))) { + return new CodeCoverageResults(reader); + } } public IEnumerable GetMissingResultsFiles() diff --git a/src/AddIns/Analysis/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs b/src/AddIns/Analysis/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs index b60ff8f777..aafd3f7464 100644 --- a/src/AddIns/Analysis/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs +++ b/src/AddIns/Analysis/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs @@ -119,13 +119,18 @@ namespace ICSharpCode.CodeCoverage void DisplayCodeCoverageResults(CodeCoverageResultsReader coverageResultsReader) { - foreach (CodeCoverageResults result in coverageResultsReader.GetResults()) { + foreach (CodeCoverageResults result in GetResults(coverageResultsReader)) { DisplayCodeCoverageResults(result); } foreach (string missingFile in coverageResultsReader.GetMissingResultsFiles()) { DisplayNoCodeCoverageResultsGeneratedMessage(missingFile); } } + + IEnumerable GetResults(CodeCoverageResultsReader coverageResultsReader) + { + return SD.MainThread.InvokeIfRequired(() => coverageResultsReader.GetResults().ToList()); + } void DisplayCodeCoverageResults(CodeCoverageResults results) {