Exemplo n.º 1
0
        private AssemblyWeaver(AssemblyDefinition targetAssemblyDef)
        {
            TargetModule = targetAssemblyDef.MainModule;
            Copier = new CecilCopier(targetAssemblyDef.MainModule);

            AddSearchDirectory(Directory.GetCurrentDirectory());
        }
Exemplo n.º 2
0
        public TypeWeaver(TypeDefinition originTypeDef, TypeDefinition destinationTypeDef, CecilCopier copier)
        {
            this.DestinationType = destinationTypeDef;
            this.OriginType = originTypeDef;
            this.copier = copier;

            constants = new Dictionary<FieldReference, object>();
        }
Exemplo n.º 3
0
        public static void CollectReferences(string assemblyLocation, HashSet<Type> types)
        {
            var origAssemblyDef = CecilUtils.GetAssemblyDef(assemblyLocation);
            var assemblyDef = CecilUtils.CreateEmptyAssemblyDef();
            var copier = new CecilCopier(assemblyDef.MainModule);

            var count = types.Count;
            if (count == 0)
                return;

            var assembly = types.First().Assembly;

            foreach (var type in types)
            {
                if(type.Assembly != assembly)
                    throw new Exception("Expected types of same assembly.");

                var typeDef = CecilUtils.GetTypeDef(origAssemblyDef.MainModule, new TypeSignature(type));

                copier.Copy(typeDef, false);
            }

            copier.Process();

            var scopeName = origAssemblyDef.Name.Name + ".dll";

            foreach (var error in copier.Errors)
            {
                var import = error as UnexpectedImport;
                if (import == null)
                    continue;

                if (import.Scope.Name != scopeName)
                    continue;

                var type = import.Member as TypeReference ?? import.Member.DeclaringType;

                var typeName = type.FullName;
                types.Add(assembly.GetType(typeName));
            }

            if (count < types.Count)
                CollectReferences(assemblyLocation, types);
        }
Exemplo n.º 4
0
        private CecilCopier GetCreateCopier(ModuleDefinition origModuleDef)
        {
            CecilCopier copier;
            if (copiers.TryGetValue(origModuleDef, out copier))
                return copier;

            copier = new CecilCopier(origModuleDef, DestinationAssembly.MainModule);
            copiers.Add(origModuleDef, copier);

            return copier;
        }