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); } } }
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); }