public void Link() { outputAssembly = AssemblyFactory.GetAssembly(Assemblies [0]); mainModule = outputAssembly.MainModule; if (mainModule.Name != MainModuleName) { Console.Error.WriteLine("Main module is not named \"" + MainModuleName + "\" in assembly " + outputAssembly.Name.FullName); Environment.Exit(1); } mainType = mainModule.Types [MainTypeName]; if (mainType == null) { Console.Error.WriteLine("Main module does not contain type \"" + MainTypeName + "\" in assembly " + outputAssembly.Name.FullName); Environment.Exit(1); } outputAssembly.Accept(new StructureMerger(this, outputAssembly, outputAssembly)); for (int i = 1; i < Assemblies.Count; i++) { AssemblyDefinition asm = AssemblyFactory.GetAssembly(Assemblies [i]); asm.Accept(new StructureMerger(this, outputAssembly, asm)); } FixReflectionAfterMerge fix = new FixReflectionAfterMerge(this, outputAssembly, outputAssembly); fix.Process(); nativeLibraries.AddExternalMethods(this); if (OutputIsExecutable) { outputAssembly.Kind = AssemblyKind.Console; outputAssembly.EntryPoint = InternalSymbols.EntryPoint; } else { outputAssembly.Kind = AssemblyKind.Dll; } AssemblyFactory.SaveAssembly(outputAssembly, OutputPath); }
static void Process(MergeContext context) { AssemblyDefinition primary = null; try { primary = AssemblyFactory.GetAssembly(context.Assemblies [0]); for (int i = 1; i < context.Assemblies.Count; i++) { AssemblyDefinition asm = AssemblyFactory.GetAssembly(context.Assemblies [i]); asm.Accept(new StructureMerger(context, primary, asm)); } } catch (FileNotFoundException e) { Error(e.Message); } FixReflectionAfterMerge fix = new FixReflectionAfterMerge(context, primary, primary); fix.Process(); AssemblyFactory.SaveAssembly(primary, context.OutputPath); ConfigMerger.Process(context.Assemblies, context.OutputPath); }
static void Process (MergeContext context) { AssemblyDefinition primary = null; try { primary = AssemblyFactory.GetAssembly (context.Assemblies [0]); for (int i = 1; i < context.Assemblies.Count; i++) { AssemblyDefinition asm = AssemblyFactory.GetAssembly (context.Assemblies [i]); asm.Accept (new StructureMerger (context, primary, asm)); } } catch (FileNotFoundException e) { Error (e.Message); } FixReflectionAfterMerge fix = new FixReflectionAfterMerge (context, primary, primary); fix.Process (); AssemblyFactory.SaveAssembly (primary, context.OutputPath); ConfigMerger.Process (context.Assemblies, context.OutputPath); }
public void Link () { outputAssembly = AssemblyFactory.GetAssembly (Assemblies [0]); mainModule = outputAssembly.MainModule; if (mainModule.Name != MainModuleName) { Console.Error.WriteLine ("Main module is not named \"" + MainModuleName + "\" in assembly " + outputAssembly.Name.FullName); Environment.Exit (1); } mainType = mainModule.Types [MainTypeName]; if (mainType == null) { Console.Error.WriteLine ("Main module does not contain type \"" + MainTypeName + "\" in assembly " + outputAssembly.Name.FullName); Environment.Exit (1); } outputAssembly.Accept (new StructureMerger (this, outputAssembly, outputAssembly)); for (int i = 1; i < Assemblies.Count; i++) { AssemblyDefinition asm = AssemblyFactory.GetAssembly (Assemblies [i]); asm.Accept (new StructureMerger (this, outputAssembly, asm)); } FixReflectionAfterMerge fix = new FixReflectionAfterMerge (this, outputAssembly, outputAssembly); fix.Process (); nativeLibraries.AddExternalMethods (this); if (OutputIsExecutable) { outputAssembly.Kind = AssemblyKind.Console; outputAssembly.EntryPoint = InternalSymbols.EntryPoint; } else { outputAssembly.Kind = AssemblyKind.Dll; } AssemblyFactory.SaveAssembly (outputAssembly, OutputPath); }