public void Merge(IEnumerable <string> assemblies, string outputPath) { var assembliesToMerge = assemblies?.ToList() ?? throw new ArgumentNullException(nameof(assemblies)); var assemblyResolver = new DefaultAssemblyResolver(); if (SearchDirectories != null) { foreach (var dir in SearchDirectories) { assemblyResolver.AddSearchDirectory(dir); } } if (Verbose) { Console.WriteLine("Merging:"); foreach (var include in assembliesToMerge) { Console.WriteLine($" - {include}"); } } var tempRoot = Path.Combine(Path.GetTempPath(), "Mono.ApiTools", "AssemblyMerger", Guid.NewGuid().ToString()); if (InjectAssemblyNames) { if (!string.IsNullOrWhiteSpace(tempRoot) && !Directory.Exists(tempRoot)) { Directory.CreateDirectory(tempRoot); } assembliesToMerge = assembliesToMerge.ToList(); for (int i = 0; i < assembliesToMerge.Count; i++) { var ass = assembliesToMerge[i]; var temp = Path.Combine(tempRoot, Guid.NewGuid().ToString() + ".dll"); InjectAssemblyName(assemblyResolver, ass, temp); assembliesToMerge[i] = temp; } if (Verbose) { Console.WriteLine("Temporary assemblies:"); foreach (var include in assembliesToMerge) { Console.WriteLine($" - {include}"); } } } var options = new RepackOptions { InputAssemblies = assembliesToMerge.ToArray(), OutputFile = outputPath, SearchDirectories = SearchDirectories.ToArray(), CopyAttributes = true, AllowMultipleAssemblyLevelAttributes = true, LogVerbose = Verbose }; options.AllowedDuplicateTypes.Add(InjectedAttributeFullName, InjectedAttributeFullName); var repacker = new ILRepack(options); repacker.Repack(); if (InjectAssemblyNames) { if (Directory.Exists(tempRoot)) { try { Directory.Delete(tempRoot, true); } catch { } } } }
public void Merge(string outputPath) { var assemblies = Assemblies; if (Program.Verbose) { Console.WriteLine("Merging:"); foreach (var include in assemblies) { Console.WriteLine($" - {include}"); } } var tempRoot = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); if (InjectAssemblyNames) { assemblies = assemblies.ToList(); if (!Directory.Exists(tempRoot)) { Directory.CreateDirectory(tempRoot); } for (int i = 0; i < assemblies.Count; i++) { var ass = assemblies[i]; var temp = Path.Combine(tempRoot, Guid.NewGuid().ToString() + ".dll"); InjectAssemblyName(ass, temp); assemblies[i] = temp; } if (Program.Verbose) { Console.WriteLine("Temporary assemblies:"); foreach (var include in assemblies) { Console.WriteLine($" - {include}"); } } } var options = new RepackOptions { InputAssemblies = assemblies.ToArray(), OutputFile = outputPath, SearchDirectories = SearchDirectories.ToArray(), CopyAttributes = true, AllowMultipleAssemblyLevelAttributes = true, LogVerbose = Program.Verbose }; var repacker = new ILRepack(options); repacker.Repack(); if (InjectAssemblyNames) { MergeAssemblyNameAttributes(outputPath); if (Directory.Exists(tempRoot)) { Directory.Delete(tempRoot, true); } } }