private void ReadInputAssemblies() { MergedAssemblyFiles = Options.ResolveFiles(); OtherAssemblies = new List <AssemblyDefinition>(); // TODO: this could be parallelized to gain speed var primary = MergedAssemblyFiles.FirstOrDefault(); var debugSymbolsRead = false; foreach (string assembly in MergedAssemblyFiles) { var result = ReadInputAssembly(assembly, primary == assembly); if (result.IsPrimary) { PrimaryAssemblyDefinition = result.Definition; PrimaryAssemblyFile = result.Assembly; } else { OtherAssemblies.Add(result.Definition); } debugSymbolsRead |= result.SymbolsRead; } // prevent writing PDB if we haven't read any Options.DebugInfo = debugSymbolsRead; MergedAssemblies = new List <AssemblyDefinition>(OtherAssemblies); MergedAssemblies.Insert(0, PrimaryAssemblyDefinition); }
private static void ReloadAndCheckReferences(RepackOptions repackOptions) { var outputFile = AssemblyDefinition.ReadAssembly(repackOptions.OutputFile, new ReaderParameters(ReadingMode.Immediate)); var mergedFiles = repackOptions.ResolveFiles().Select(f => AssemblyDefinition.ReadAssembly(f, new ReaderParameters(ReadingMode.Deferred))); foreach (var a in outputFile.MainModule.AssemblyReferences.Where(x => mergedFiles.Any(y => repackOptions.KeepOtherVersionReferences ? x.FullName == y.FullName : x.Name == y.Name.Name))) { Assert.Fail($"Merged assembly retains a reference to one (or more) of the merged files: ${a.FullName}"); } }