public static AssemblyDefinition[] LoadAssemblyDefinitions(string[] assemblyPaths, string[] searchPaths)
        {
            var assemblyResolver = new AssemblyResolver();

            foreach (var asmpath in searchPaths)
            {
                assemblyResolver.AddSearchDirectory(asmpath);
            }

            var readerParameters = new ReaderParameters
            {
                AssemblyResolver = assemblyResolver
            };

            var assemblyDefinitions = new AssemblyDefinition[assemblyPaths.Length];

            for (int i = 0; i < assemblyPaths.Length; ++i)
            {
                assemblyDefinitions[i] = AssemblyDefinition.ReadAssembly(assemblyPaths[i], readerParameters);
                // Cecil tries to resolve references by filename, since Unity force loads
                // assemblies, then assembly reference will resolve even if the assembly name
                // does not match the assembly filename. So we register all assemblies in
                // in the resolver.
                assemblyResolver.RegisterAssembly(assemblyDefinitions[i]);
            }

            return(assemblyDefinitions);
        }
Example #2
0
        static void Execute(string executable, string[] args)
        {
            var path     = Assembly.GetAssembly(typeof(Program)).Location;
            var assembly = Assembly.LoadFrom(executable);

            string[] searchDirectories = new[] {
                Path.GetDirectoryName(path),
                Path.GetDirectoryName(assembly.Location),
            };

            FileInfo configInfo = new FileInfo(Path.GetFullPath(executable) + ".config");

            if (configInfo.Exists)
            {
                // If the assembly has a config file, then use it.
                using (var sandbox = SandboxAppDomain.Create(executable, null, searchDirectories))
                {
                    var engine = sandbox.CreateInstance <RemoteChessEngine>();
                    engine.Execute(executable, args);
                }
            }
            else
            {
                var resolver = new AssemblyResolver();
                Array.ForEach(searchDirectories, d => resolver.AddSearchDirectory(d));
                resolver.Attach();
                var engine = new RemoteChessEngine();
                engine.Execute(executable, args);
            }
        }
            public static IAssemblyResolver WithSearchDirs(params string[] searchDirs)
            {
                var resolver = new AssemblyResolver();

                foreach (var searchDir in searchDirs)
                {
                    resolver.AddSearchDirectory(searchDir);
                }

                // remove the two directories installed by default as this can cause issues with assemblies outside of the Assets folder
                resolver.RemoveSearchDirectory(".");
                resolver.RemoveSearchDirectory("bin");

                return(resolver);
            }
Example #4
0
        /// <summary>
        /// Monitors the specified P# assembly.
        /// </summary>
        /// <param name="dll">Assembly</param>
        private void MonitorAssembly(string dll)
        {
            var path     = Assembly.GetAssembly(typeof(Program)).Location;
            var assembly = Assembly.LoadFrom(dll);

            string[] searchDirectories = new[] {
                Path.GetDirectoryName(path),
                Path.GetDirectoryName(assembly.Location),
            };

            var resolver = new AssemblyResolver();

            Array.ForEach(searchDirectories, d => resolver.AddSearchDirectory(d));
            resolver.Attach();

            var engine = new RemoteRaceInstrumentationEngine();

            engine.Execute(this.Configuration);
        }
        IEnumerable <IUnresolvedAssembly> LoadAssemblies()
        {
            var resolver = new AssemblyResolver();

            foreach (var path in fileNames.Select(f => Path.GetDirectoryName(f)).Distinct(StringComparer.OrdinalIgnoreCase))
            {
                resolver.AddSearchDirectory(path);
            }
            List <AssemblyDefinition> assemblies = new List <AssemblyDefinition>();

            foreach (var file in fileNames.Distinct(StringComparer.OrdinalIgnoreCase))
            {
                assemblies.Add(resolver.LoadAssemblyFile(file));
            }
            foreach (var asm in assemblies.ToArray())
            {
                assemblies.AddRange(asm.Modules.SelectMany(m => m.AssemblyReferences).Select(r => resolver.TryResolve(r)).Where(r => r != null));
            }
            return(assemblies.Distinct().Select(asm => loader.LoadAssembly(asm)));
        }
        IList <IUnresolvedAssembly> LoadAssemblies()
        {
            var resolver = new AssemblyResolver();

            foreach (var path in fileNames.Select(f => Path.GetDirectoryName(f)).Distinct(StringComparer.OrdinalIgnoreCase))
            {
                resolver.AddSearchDirectory(path);
            }
            List <AssemblyDefinition> assemblies = new List <AssemblyDefinition>();

            foreach (var file in fileNames.Distinct(StringComparer.OrdinalIgnoreCase))
            {
                assemblies.Add(resolver.LoadAssemblyFile(file));
            }
            foreach (var asm in assemblies.ToArray())
            {
                assemblies.AddRange(asm.Modules.SelectMany(m => m.AssemblyReferences).Select(r => resolver.TryResolve(r)).Where(r => r != null));
            }
            CecilLoader loader = new CecilLoader {
                IncludeInternalMembers = true
            };

            // Emulate the old CecilLoader.GetCecilObject() API:
            loader.OnEntityLoaded = delegate(IUnresolvedEntity entity, MemberReference cecilObj) {
                unresolvedTypeSystemToCecilDict[entity] = cecilObj;
            };
            var loadedAssemblies = new List <IUnresolvedAssembly>();

            foreach (var asm in assemblies.Distinct())
            {
                var loadedAssembly = loader.LoadAssembly(asm);
                loadedAssemblies.Add(loadedAssembly);
                unresolvedTypeSystemToCecilDict[loadedAssembly] = asm;
            }
            return(loadedAssemblies);
        }
Example #7
0
		IEnumerable<IUnresolvedAssembly> LoadAssemblies()
		{
			var resolver = new AssemblyResolver();
			foreach (var path in fileNames.Select(f => Path.GetDirectoryName(f)).Distinct(StringComparer.OrdinalIgnoreCase))
				resolver.AddSearchDirectory(path);
			List<AssemblyDefinition> assemblies = new List<AssemblyDefinition>();
			foreach (var file in fileNames.Distinct(StringComparer.OrdinalIgnoreCase))
				assemblies.Add(resolver.LoadAssemblyFile(file));
			foreach (var asm in assemblies.ToArray())
				assemblies.AddRange(asm.Modules.SelectMany(m => m.AssemblyReferences).Select(r => resolver.TryResolve(r)).Where(r => r != null));
			return assemblies.Distinct().Select(asm => loader.LoadAssembly(asm));
		}
Example #8
0
		IList<IUnresolvedAssembly> LoadAssemblies()
		{
			var resolver = new AssemblyResolver();
			foreach (var path in fileNames.Select(f => Path.GetDirectoryName(f)).Distinct(StringComparer.OrdinalIgnoreCase))
				resolver.AddSearchDirectory(path);
			List<AssemblyDefinition> assemblies = new List<AssemblyDefinition>();
			foreach (var file in fileNames.Distinct(StringComparer.OrdinalIgnoreCase))
				assemblies.Add(resolver.LoadAssemblyFile(file));
			foreach (var asm in assemblies.ToArray())
				assemblies.AddRange(asm.Modules.SelectMany(m => m.AssemblyReferences).Select(r => resolver.TryResolve(r)).Where(r => r != null));
			CecilLoader loader = new CecilLoader { IncludeInternalMembers = true };
			// Emulate the old CecilLoader.GetCecilObject() API: 
			loader.OnEntityLoaded = delegate(IUnresolvedEntity entity, MemberReference cecilObj) {
				unresolvedTypeSystemToCecilDict[entity] = cecilObj;
			};
			var loadedAssemblies = new List<IUnresolvedAssembly>();
			foreach (var asm in assemblies.Distinct()) {
				var loadedAssembly = loader.LoadAssembly(asm);
				loadedAssemblies.Add(loadedAssembly);
				unresolvedTypeSystemToCecilDict[loadedAssembly] = asm;
			}
			return loadedAssemblies;
		}
Example #9
0
        static void Main(string[] args)
        {
            string directory = @"..\..\TestAssemblies\Gendarme\";
            string output = @"..\..\output\";

            IList<string> toMerge = new List<string>(), toCopy = new List<string>();

            foreach(var file in Directory.EnumerateFiles(directory, "Gendarme.Rules.*",SearchOption.TopDirectoryOnly))
            {
                FileInfo fi = new FileInfo(file);
                toMerge.Add(fi.Name);
            }

            //toMerge = new List<string>() { "gendarme.exe" };
            //toCopy = new List<string>() { "gendarme.exe" };
            //toCopy = new List<string>() { "Castle.Windsor.dll", "Castle.Core.dll" };
               // toMerge = new List<string>() { "monolinker.exe", "Mono.Cecil.dll" , "Mono.Cecil.Rocks.dll" };
            //toMerge = new List<string>() { "JanuszLembicz.PW.UI.Forms.exe", "JanuszLembicz.PW.BLC.dll", /*"JanuszLembicz.PW.Common.dll",*/ "JanuszLembicz.PW.UI.Form.Utils.dll" };
            //toCopy = new List<string>() { "Mono.Cecil.dll", "Mono.Cecil.Rocks.dll","monolinker.exe", "Lucene.Net.dll" };

            IList<AssemblyDefinition> assembliesToMerge = new List<AssemblyDefinition>();
            IList<AssemblyDefinition> assembliesToCopy = new List<AssemblyDefinition>();

            AssemblyResolver resolver = new AssemblyResolver();

            foreach(var dir in resolver.GetSearchDirectories())
            {
                resolver.RemoveSearchDirectory(dir);
            }
            resolver.AddSearchDirectory(directory);

            var parameters = new ReaderParameters()
            {
                AssemblyResolver = resolver,
            };

            foreach(var assembly in toMerge)
            {
                assembliesToMerge.Add(AssemblyDefinition.ReadAssembly(directory + assembly, parameters));
            }

            foreach(var assembly in toCopy)
            {
                assembliesToCopy.Add(AssemblyDefinition.ReadAssembly(directory + assembly, parameters));
            }

            MergeAssemblies merger = new MergeAssemblies();

            Console.WriteLine("Merging");
            try
            {
                AssemblyDefinition merged = merger.MergeAssemblies(assembliesToMerge);
                if(merged != null)
                    merged.Write(output + merged.Name.Name + (merged.MainModule.Kind == ModuleKind.Dll ? ".dll" : ".exe"));
            }
            catch(OperationCanceledException e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();

            Console.WriteLine("Copying");
            foreach(var assembly in assembliesToCopy)
            {
                AssemblyDefinition copy = merger.CopyAssembly(assembly);
                if(copy != null)
                    copy.Write(output + copy.Name.Name + (copy.MainModule.Kind == ModuleKind.Dll ? ".dll" : ".exe"));
            }

            Console.ReadKey();
        }
Example #10
0
        /// <summary>
        /// Monitors the specified P# assembly.
        /// </summary>
        /// <param name="dll">Assembly</param>
        private void MonitorAssembly(string dll)
        {
            var path = Assembly.GetAssembly(typeof(Program)).Location;
            var assembly = Assembly.LoadFrom(dll);

            string[] searchDirectories = new[]{
                Path.GetDirectoryName(path),
                Path.GetDirectoryName(assembly.Location),
            };

            var resolver = new AssemblyResolver();
            Array.ForEach(searchDirectories, d => resolver.AddSearchDirectory(d));
            resolver.Attach();

            var engine = new RemoteRaceInstrumentationEngine();
            engine.Execute(this.Configuration);
        }