public Uninstrumenter( DepsJsonUtils depsJsonUtils, IFileSystem fileSystem) { _depsJsonUtils = depsJsonUtils; _fileSystem = fileSystem; }
private void VisitAssemblyGroup( InstrumentationContext context, InstrumentationResult result, IEnumerable <FileInfo> groupFiles) { var firstAssemblyFile = groupFiles.First(); var instrumentedAssembly = _assemblyInstrumenter.InstrumentAssembly( context, firstAssemblyFile); if (instrumentedAssembly == null) { return; } foreach (var assemblyFile in groupFiles) { 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); if (!File.Exists(newHitServicesPath)) { 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); File.Delete(instrumentedAssembly.TempAssemblyFile); File.Delete(instrumentedAssembly.TempPdbFile); }
public static void Execute(InstrumentationResult result) { foreach (var assembly in result.Assemblies) { foreach (var assemblyLocation in assembly.Locations) { if (File.Exists(assemblyLocation.BackupFile)) { File.Copy(assemblyLocation.BackupFile, assemblyLocation.File, true); File.Delete(assemblyLocation.BackupFile); } if (File.Exists(assemblyLocation.BackupPdbFile)) { File.Copy(assemblyLocation.BackupPdbFile, assemblyLocation.PdbFile, true); File.Delete(assemblyLocation.BackupPdbFile); } var assemblyDirectory = Path.GetDirectoryName(assemblyLocation.File); foreach (var depsJsonFile in Directory.GetFiles(assemblyDirectory, "*.deps.json")) { DepsJsonUtils.UnpatchDepsJson(depsJsonFile); } } } foreach (var extraAssembly in result.ExtraAssemblies) { if (File.Exists(extraAssembly)) { File.Delete(extraAssembly); } } }
public CustomAssemblyResolver(DirectoryInfo assemblyDirectory, ILogger logger) { _logger = logger; foreach (var searchDirectory in GetSearchDirectories()) { RemoveSearchDirectory(searchDirectory); } AddSearchDirectory(assemblyDirectory.FullName); _dependencyContext = DepsJsonUtils.LoadDependencyContext(assemblyDirectory); var runtimeConfigPath = assemblyDirectory.GetFiles("*.runtimeconfig.dev.json", SearchOption.TopDirectoryOnly) .Concat(assemblyDirectory.GetFiles("*.runtimeconfig.json", SearchOption.TopDirectoryOnly)) .FirstOrDefault(); if (runtimeConfigPath != null) { var runtimeConfigContent = File.ReadAllText(runtimeConfigPath.FullName); foreach (var path in DepsJsonUtils.GetAdditionalPaths(runtimeConfigContent)) { AddSearchDirectory(path); } } }
public void ShouldPatchDepsJson() { var originalContent = GetOriginalDepsJsonContent(); var expectedResult = GetPatchedDepsJsonContent(); var result = DepsJsonUtils.PatchDepsJsonContent(originalContent, "1.0.0"); NormalizeLineEnding(result).ShouldBe(NormalizeLineEnding(expectedResult)); }
public void ShouldUnpatchDepsJson() { var patchedContent = GetPatchedDepsJsonContent(); var expectedResult = GetOriginalDepsJsonContent(); var result = DepsJsonUtils.UnpatchDepsJsonContent(patchedContent); NormalizeLineEnding(result).ShouldBe(NormalizeLineEnding(expectedResult)); }
public Instrumenter( ILogger <Instrumenter> logger, AssemblyInstrumenter assemblyInstrumenter, DepsJsonUtils depsJsonUtils) { _logger = logger; _assemblyInstrumenter = assemblyInstrumenter; _depsJsonUtils = depsJsonUtils; }
private void VisitAssemblyGroup(IEnumerable <string> assemblyFiles) { var firstAssemblyFile = assemblyFiles.First(); var instrumentedAssembly = InstrumentAssemblyIfNecessary(firstAssemblyFile); if (instrumentedAssembly == null) { return; } foreach (var assemblyFile in assemblyFiles) { var pdbFile = GetPdbFile(assemblyFile); var assemblyBackupFile = GetBackupFile(assemblyFile); var pdbBackupFile = GetBackupFile(pdbFile); //Backup File.Copy(assemblyFile, assemblyBackupFile, true); File.Copy(pdbFile, pdbBackupFile, true); //Override assembly File.Copy(instrumentedAssembly.TempAssemblyFile, assemblyFile, true); File.Copy(instrumentedAssembly.TempPdbFile, pdbFile, true); //Copy instrumentation dependencies var assemblyDirectory = Path.GetDirectoryName(assemblyFile); foreach (var dependencyPath in instrumentationDependencies) { var dependencyAssemblyName = Path.GetFileName(dependencyPath); var newDependencyPath = Path.Combine(assemblyDirectory, dependencyAssemblyName); File.Copy(dependencyPath, newDependencyPath, true); result.AddExtraAssembly(newDependencyPath); } instrumentedAssembly.AddLocation( Path.GetFullPath(assemblyFile), Path.GetFullPath(assemblyBackupFile), Path.GetFullPath(pdbFile), Path.GetFullPath(pdbBackupFile) ); foreach (var depsJsonFile in Directory.GetFiles(assemblyDirectory, "*.deps.json")) { DepsJsonUtils.PatchDepsJson(depsJsonFile); } } result.AddInstrumentedAssembly(instrumentedAssembly); File.Delete(instrumentedAssembly.TempAssemblyFile); File.Delete(instrumentedAssembly.TempPdbFile); }
public static AssemblyDefinition ToDefinition(this Assembly assembly) { var assemblyFile = _fileSystem.FileInfo.FromFileName(assembly.Location); var depsJsonUtils = new DepsJsonUtils(new FileSystem()); var resolver = new CustomAssemblyResolver(assemblyFile.Directory, NullLogger <CustomAssemblyResolver> .Instance, depsJsonUtils); var readerParameters = new ReaderParameters { ReadSymbols = true, AssemblyResolver = resolver }; return(AssemblyDefinition.ReadAssembly(assemblyFile.FullName, readerParameters)); }
public Instrumenter( IAssemblyInstrumenter assemblyInstrumenter, DepsJsonUtils depsJsonUtils, IFileSystem fileSystem, ILogger <Instrumenter> logger) { _assemblyInstrumenter = assemblyInstrumenter; _depsJsonUtils = depsJsonUtils; _fileSystem = fileSystem; _logger = logger; }
public AssemblyInstrumenter( TypeInstrumenter typeInstrumenter, ILogger <AssemblyInstrumenter> logger, ILogger <CustomAssemblyResolver> assemblyResolverLogger, DepsJsonUtils depsJsonUtils, IFileSystem fileSystem) { _typeInstrumenter = typeInstrumenter; _logger = logger; _assemblyResolverLogger = assemblyResolverLogger; _depsJsonUtils = depsJsonUtils; _fileSystem = fileSystem; }
public void GetAdditionalPaths_RuntimeConfigContext_PathsReturned() { var runtimeConfigContent = @"{ ""runtimeOptions"": { ""additionalProbingPaths"": [ ""/root/.dotnet/store/|arch|/|tfm|"", ""/api/.nuget/packages"", ""/usr/share/dotnet/sdk/NuGetFallbackFolder"" ] } }"; var result = DepsJsonUtils.GetAdditionalPaths(runtimeConfigContent); result.Should().NotBeEmpty(); result.Count.Should().Be(2); result.Should().Contain("/api/.nuget/packages"); result.Should().Contain("/usr/share/dotnet/sdk/NuGetFallbackFolder"); }
public CustomAssemblyResolver(string assemblyDirectory) { RemoveSearchDirectory("."); RemoveSearchDirectory("bin"); AddSearchDirectory(assemblyDirectory); _dependencyContext = DepsJsonUtils.LoadDependencyContext(assemblyDirectory); var runtimeConfigPath = Directory.GetFiles(assemblyDirectory, "*.runtimeconfig.dev.json", SearchOption.TopDirectoryOnly) .FirstOrDefault(); if (runtimeConfigPath != null) { var runtimeConfigContent = File.ReadAllText(runtimeConfigPath); foreach (var path in DepsJsonUtils.GetAdditionalPaths(runtimeConfigContent)) { AddSearchDirectory(path); } } }
public void GetAdditionalPaths_EmptyObject_NoError() { var result = DepsJsonUtils.GetAdditionalPaths(@"{}"); result.Should().BeEmpty(); }
public void GetAdditionalPaths_EmptyRuntimeConfigContext_NoError() { var result = DepsJsonUtils.GetAdditionalPaths(string.Empty); result.Should().BeEmpty(); }
public DepsJsonUtilsTests() { _mockFileSystem = new MockFileSystem(); _sut = new DepsJsonUtils(_mockFileSystem); }
private void VisitAssemblyGroup( InstrumentationContext context, InstrumentationResult result, IEnumerable <FileInfo> assemblyFiles) { using (_logger.BeginScope("Checking assembly files {assemblies}", assemblyFiles.Select(f => f.FullName), LogLevel.Information)) { var instrumentedAssembly = _assemblyInstrumenter.InstrumentAssemblyFile( context, assemblyFiles.First()); if (instrumentedAssembly == null) { return; } foreach (var assemblyFile in assemblyFiles) { 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); File.Delete(instrumentedAssembly.TempAssemblyFile); File.Delete(instrumentedAssembly.TempPdbFile); } }