@@ -59,6 +59,7 @@ internal class Coverage
59
59
private readonly CoverageParameters _parameters ;
60
60
61
61
public string Identifier { get ; }
62
+ private List < string > unloadedModules { get ; set ; }
62
63
63
64
public Coverage ( string moduleOrDirectory ,
64
65
CoverageParameters parameters ,
@@ -78,6 +79,7 @@ public Coverage(string moduleOrDirectory,
78
79
_cecilSymbolHelper = cecilSymbolHelper ;
79
80
Identifier = Guid . NewGuid ( ) . ToString ( ) ;
80
81
_results = new List < InstrumenterResult > ( ) ;
82
+ unloadedModules = new List < string > ( ) ;
81
83
}
82
84
83
85
public Coverage ( CoveragePrepareResult prepareResult ,
@@ -241,7 +243,10 @@ public CoverageResult GetCoverageResult()
241
243
}
242
244
243
245
modules . Add ( Path . GetFileName ( result . ModulePath ) , documents ) ;
244
- _instrumentationHelper . RestoreOriginalModule ( result . ModulePath , Identifier ) ;
246
+ if ( ! unloadedModules . Contains ( result . ModulePath ) )
247
+ {
248
+ UnloadModule ( result . ModulePath ) ;
249
+ }
245
250
}
246
251
247
252
// In case of anonymous delegate compiler generate a custom class and passes it as type.method delegate.
@@ -326,6 +331,16 @@ public CoverageResult GetCoverageResult()
326
331
return coverageResult ;
327
332
}
328
333
334
+ /// <summary>
335
+ /// Manually invoke the unloading of modules and restoration of the original assembly files
336
+ /// </summary>
337
+ /// <param name="modulePath"></param>
338
+ public void UnloadModule ( string modulePath )
339
+ {
340
+ unloadedModules . Add ( modulePath ) ;
341
+ _instrumentationHelper . RestoreOriginalModule ( modulePath , Identifier ) ;
342
+ }
343
+
329
344
private bool BranchInCompilerGeneratedClass ( string methodName )
330
345
{
331
346
foreach ( InstrumenterResult instrumentedResult in _results )
0 commit comments