Exemplo n.º 1
0
        public static ModuleDefinition CreateModule(string name, ModuleParameters parameters)
        {
            Mixin.CheckName(name);
            Mixin.CheckParameters(parameters);

            var module = new ModuleDefinition {
                Name            = name,
                kind            = parameters.Kind,
                timestamp       = parameters.Timestamp ?? Mixin.GetTimestamp(),
                Runtime         = parameters.Runtime,
                architecture    = parameters.Architecture,
                mvid            = Guid.NewGuid(),
                Attributes      = ModuleAttributes.ILOnly,
                Characteristics = (ModuleCharacteristics)0x8540,
            };

            if (parameters.AssemblyResolver != null)
            {
                module.assembly_resolver = Disposable.NotOwned(parameters.AssemblyResolver);
            }

            if (parameters.MetadataResolver != null)
            {
                module.metadata_resolver = parameters.MetadataResolver;
            }

#if !READ_ONLY
            if (parameters.MetadataImporterProvider != null)
            {
                module.metadata_importer = parameters.MetadataImporterProvider.GetMetadataImporter(module);
            }
#if !PCL && !NET_CORE
            if (parameters.ReflectionImporterProvider != null)
            {
                module.reflection_importer = parameters.ReflectionImporterProvider.GetReflectionImporter(module);
            }
#endif
#endif

            if (parameters.Kind != ModuleKind.NetModule)
            {
                var assembly = new AssemblyDefinition();
                module.assembly      = assembly;
                module.assembly.Name = CreateAssemblyName(name);
                assembly.main_module = module;
            }

            module.Types.Add(new TypeDefinition(string.Empty, "<Module>", TypeAttributes.NotPublic));

            return(module);
        }
Exemplo n.º 2
0
        public static ModuleDefinition CreateModule(string name, ModuleParameters parameters)
        {
            Mixin.CheckName(name);
            Mixin.CheckParameters(parameters);
            ModuleDefinition moduleDefinition = new ModuleDefinition
            {
                Name            = name,
                kind            = parameters.Kind,
                timestamp       = (parameters.Timestamp ?? Mixin.GetTimestamp()),
                Runtime         = parameters.Runtime,
                architecture    = parameters.Architecture,
                mvid            = Guid.NewGuid(),
                Attributes      = ModuleAttributes.ILOnly,
                Characteristics = (ModuleCharacteristics.DynamicBase | ModuleCharacteristics.NoSEH | ModuleCharacteristics.NXCompat | ModuleCharacteristics.TerminalServerAware)
            };

            if (parameters.AssemblyResolver != null)
            {
                moduleDefinition.assembly_resolver = Disposable.NotOwned(parameters.AssemblyResolver);
            }
            if (parameters.MetadataResolver != null)
            {
                moduleDefinition.metadata_resolver = parameters.MetadataResolver;
            }
            if (parameters.MetadataImporterProvider != null)
            {
                moduleDefinition.metadata_importer = parameters.MetadataImporterProvider.GetMetadataImporter(moduleDefinition);
            }
            if (parameters.ReflectionImporterProvider != null)
            {
                moduleDefinition.reflection_importer = parameters.ReflectionImporterProvider.GetReflectionImporter(moduleDefinition);
            }
            if (parameters.Kind != ModuleKind.NetModule)
            {
                AssemblyDefinition assemblyDefinition = moduleDefinition.assembly = new AssemblyDefinition();
                moduleDefinition.assembly.Name = CreateAssemblyName(name);
                assemblyDefinition.main_module = moduleDefinition;
            }
            moduleDefinition.Types.Add(new TypeDefinition(string.Empty, "<Module>", TypeAttributes.NotPublic));
            return(moduleDefinition);
        }