Skip to content

Commit

Permalink
Output all instrumented assemblies paths
Browse files Browse the repository at this point in the history
  • Loading branch information
lucaslorentz committed Nov 29, 2019
1 parent 927a4b2 commit 2b0f22b
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 63 deletions.
26 changes: 12 additions & 14 deletions src/MiniCover/Instrumentation/AssemblyInstrumenter.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
Expand Down Expand Up @@ -35,25 +36,22 @@ public InstrumentedAssembly InstrumentAssemblyFile(
{
var assemblyDirectory = assemblyFile.Directory;

using (_logger.BeginScope("Checking assembly file {assembly}", assemblyFile.FullName, LogLevel.Information))
{
var resolver = new CustomAssemblyResolver(assemblyDirectory, _assemblyResolverLogger);
var resolver = new CustomAssemblyResolver(assemblyDirectory, _assemblyResolverLogger);

_logger.LogTrace("Assembly resolver search directories: {directories}", new object[] { resolver.GetSearchDirectories() });
_logger.LogTrace("Assembly resolver search directories: {directories}", new object[] { resolver.GetSearchDirectories() });

try
{
using (var assemblyDefinition = AssemblyDefinition.ReadAssembly(assemblyFile.FullName, new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver }))
{
return InstrumentAssemblyDefinition(context, assemblyDefinition);
}
}
catch (BadImageFormatException)
try
{
using (var assemblyDefinition = AssemblyDefinition.ReadAssembly(assemblyFile.FullName, new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver }))
{
_logger.LogInformation("Invalid assembly format");
return null;
return InstrumentAssemblyDefinition(context, assemblyDefinition);
}
}
catch (BadImageFormatException)
{
_logger.LogInformation("Invalid assembly format");
return null;
}
}

private InstrumentedAssembly InstrumentAssemblyDefinition(
Expand Down
99 changes: 50 additions & 49 deletions src/MiniCover/Instrumentation/Instrumenter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,63 +74,64 @@ private bool ShouldInstrumentAssemblyFile(FileInfo assemblyFile)
private void VisitAssemblyGroup(
InstrumentationContext context,
InstrumentationResult result,
IEnumerable<FileInfo> groupFiles)
IEnumerable<FileInfo> assemblyFiles)
{
var firstAssemblyFile = groupFiles.First();

var instrumentedAssembly = _assemblyInstrumenter.InstrumentAssemblyFile(
context,
firstAssemblyFile);

if (instrumentedAssembly == null)
return;

foreach (var assemblyFile in groupFiles)
using (_logger.BeginScope("Checking assembly files {assemblies}", assemblyFiles.Select(f => f.FullName), LogLevel.Information))
{
if (_loadedAssemblyFiles.Contains(assemblyFile.FullName))
{
_logger.LogInformation("Skipping loaded assembly {assemblyFile}", assemblyFile.FullName);
continue;
}

var pdbFile = FileUtils.GetPdbFile(assemblyFile);
var assemblyBackupFile = FileUtils.GetBackupFile(assemblyFile);
var pdbBackupFile = FileUtils.GetBackupFile(pdbFile);

//Backup
File.Copy(assemblyFile.FullName, assemblyBackupFile.FullName, true);
File.Copy(pdbFile.FullName, pdbBackupFile.FullName, true);

//Override assembly
File.Copy(instrumentedAssembly.TempAssemblyFile, assemblyFile.FullName, true);
File.Copy(instrumentedAssembly.TempPdbFile, pdbFile.FullName, true);

//Copy instrumentation dependencies
var assemblyDirectory = assemblyFile.Directory;

var hitServicesPath = Path.GetFileName(hitServicesAssembly.Location);
var newHitServicesPath = Path.Combine(assemblyDirectory.FullName, hitServicesPath);
File.Copy(hitServicesAssembly.Location, newHitServicesPath, true);
result.AddExtraAssembly(newHitServicesPath);
var instrumentedAssembly = _assemblyInstrumenter.InstrumentAssemblyFile(
context,
assemblyFiles.First());

instrumentedAssembly.AddLocation(
assemblyFile.FullName,
assemblyBackupFile.FullName,
pdbFile.FullName,
pdbBackupFile.FullName
);
if (instrumentedAssembly == null)
return;

var hitServicesAssemblyVersion = FileVersionInfo.GetVersionInfo(hitServicesAssembly.Location);
foreach (var depsJsonFile in assemblyDirectory.GetFiles("*.deps.json"))
foreach (var assemblyFile in assemblyFiles)
{
DepsJsonUtils.PatchDepsJson(depsJsonFile, hitServicesAssemblyVersion.ProductVersion);
if (_loadedAssemblyFiles.Contains(assemblyFile.FullName))
{
_logger.LogInformation("Skipping loaded assembly {assemblyFile}", assemblyFile.FullName);
continue;
}

var pdbFile = FileUtils.GetPdbFile(assemblyFile);
var assemblyBackupFile = FileUtils.GetBackupFile(assemblyFile);
var pdbBackupFile = FileUtils.GetBackupFile(pdbFile);

//Backup
File.Copy(assemblyFile.FullName, assemblyBackupFile.FullName, true);
File.Copy(pdbFile.FullName, pdbBackupFile.FullName, true);

//Override assembly
File.Copy(instrumentedAssembly.TempAssemblyFile, assemblyFile.FullName, true);
File.Copy(instrumentedAssembly.TempPdbFile, pdbFile.FullName, true);

//Copy instrumentation dependencies
var assemblyDirectory = assemblyFile.Directory;

var hitServicesPath = Path.GetFileName(hitServicesAssembly.Location);
var newHitServicesPath = Path.Combine(assemblyDirectory.FullName, hitServicesPath);
File.Copy(hitServicesAssembly.Location, newHitServicesPath, true);
result.AddExtraAssembly(newHitServicesPath);

instrumentedAssembly.AddLocation(
assemblyFile.FullName,
assemblyBackupFile.FullName,
pdbFile.FullName,
pdbBackupFile.FullName
);

var hitServicesAssemblyVersion = FileVersionInfo.GetVersionInfo(hitServicesAssembly.Location);
foreach (var depsJsonFile in assemblyDirectory.GetFiles("*.deps.json"))
{
DepsJsonUtils.PatchDepsJson(depsJsonFile, hitServicesAssemblyVersion.ProductVersion);
}
}
}

result.AddInstrumentedAssembly(instrumentedAssembly);
result.AddInstrumentedAssembly(instrumentedAssembly);

File.Delete(instrumentedAssembly.TempAssemblyFile);
File.Delete(instrumentedAssembly.TempPdbFile);
File.Delete(instrumentedAssembly.TempAssemblyFile);
File.Delete(instrumentedAssembly.TempPdbFile);
}
}
}
}

0 comments on commit 2b0f22b

Please sign in to comment.