void Instrument() { if (asmResolver == null) { asmResolver = new LinkerAssemblyResolver(this); } var asmParameters = new ReaderParameters { AssemblyResolver = asmResolver, ReadSymbols = true, ReadWrite = true, }; var asms = toinstrument.Select(path => { //Log.LogMessage("select: " + path); var guessName = new AssemblyNameReference(Path.GetFileNameWithoutExtension(path), new Version(0, 0)); //Log.LogMessage("Got Guess Name"); asmParameters.ReadSymbols = File.Exists(Path.ChangeExtension(path, ".pdb")); //Log.LogMessage("Checked symbols"); var asm = asmResolver.Resolve(guessName, asmParameters); //Log.LogMessage("Resolved it"); return(asm, path); }).ToList(); //Log.LogMessage("Selected asms"); System.Threading.Tasks.Parallel.ForEach(asms, x => InstrumentAssembly(x.asm, x.path)); }
void LinkAssemblies() { var references = ReferencePath.Split(';').Select(x => x.Trim()).Where(x => x.Length > 0).ToList(); refpaths = new List <string> (); foreach (var r in references) { var name = Path.GetFileName(r); if (bclAssemblies.ContainsKey(name)) { refpaths.Add(bclAssemblies[name]); //Console.WriteLine ($"+ {name}"); } else { refpaths.Add(r); //Console.WriteLine ($"- {r}"); } } var asmPath = Path.GetFullPath(Assembly); var pipeline = GetLinkerPipeline(); var resolver = new LinkerAssemblyResolver(this); var asmParameters = new ReaderParameters { AssemblyResolver = resolver, MetadataResolver = new LinkerMetadataResolver(resolver) }; using (var context = new LinkContext(pipeline, resolver, asmParameters, new UnintializedContextFactory())) { context.CoreAction = AssemblyAction.CopyUsed; context.UserAction = AssemblyAction.CopyUsed; context.OutputDirectory = managedPath; context.IgnoreUnresolved = false; pipeline.PrependStep(new ResolveFromAssemblyStep(asmPath, ResolveFromAssemblyStep.RootVisibility.Any)); var refdirs = refpaths.Select(x => Path.GetDirectoryName(x)).Distinct().ToList(); refdirs.Insert(0, Path.Combine(bclPath, "Facades")); refdirs.Insert(0, bclPath); foreach (var d in refdirs.Distinct()) { context.Resolver.AddSearchDirectory(d); } pipeline.AddStepAfter(typeof(LoadReferencesStep), new LoadI18nAssemblies(I18nAssemblies.None)); DeleteOldAssemblies(); pipeline.Process(context); } linkedAsmPaths = Directory.GetFiles(managedPath, "*.dll").OrderBy(x => Path.GetFileName(x)).ToList(); }
public LinkerMetadataResolver(LinkerAssemblyResolver asmResolver) : base(asmResolver) { }