Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
 public LinkerMetadataResolver(LinkerAssemblyResolver asmResolver)
     : base(asmResolver)
 {
 }