Example #1
0
        public void Start()
        {
            if (!File.Exists(_config))
            {
                throw new SigExpanderException("Configuration file '" + _config + "' does not exist");
            }

            IEntitiesAccessor      accessor = EntitiesAccessor.Instance;
            ConfigurationContainer config   = accessor.LoadConfiguration(_config);

            foreach (AssemblyConfig ac in config.Assemblies)
            {
                if (ac.ExpansionSpecificationFile != null)
                {
                    ExpandedAssembly ea = LoadExpandedAssembly(ac.ExpansionSpecificationFile);
                    ExpandAssembly(ea, ac.FileName);
                }
            }
        }
Example #2
0
        private void ExpandAssembly(ExpandedAssembly ea, string assemblyFilename)
        {
            Console.WriteLine("Processing assembly '{0}'...", assemblyFilename);

            if (!File.Exists(assemblyFilename))
            {
                throw new SigExpanderException("Assembly '" + assemblyFilename + "' does not exist");
            }

            AssemblyDefinition ad           = AssemblyFactory.GetAssembly(assemblyFilename);
            ModuleDefinition   module       = ad.MainModule;
            TypeResolver       typeResolver = new TypeResolver(_assemblyResolver, ad);

            foreach (ExpandedType et in ea.Types)
            {
                TypeDefinition type = module.Types[et.Name];

                if (type == null)
                {
                    Console.WriteLine("Warning: could not find type {0}.", et.Name);
                    return;
                }

                TypeExpander expander = new TypeExpander(type, typeResolver);
                foreach (MethodElement me in et.ExtraMethods)
                {
                    expander.AddEmptyMethod(me);
                }
            }

            string target = GetTargetFileName(assemblyFilename);

            AssemblyFactory.SaveAssembly(ad, target);

            Console.WriteLine("Written '{0}'.", target);
        }