private AssemblyDefinitionContainer ReadInputAssembly(string assembly, bool isPrimary)
{
Logger.Info("Adding assembly for merge: " + assembly);
try
{
ReaderParameters rp = new ReaderParameters(ReadingMode.Immediate) { AssemblyResolver = GlobalAssemblyResolver };
// read PDB/MDB?
if (Options.DebugInfo && (File.Exists(Path.ChangeExtension(assembly, "pdb")) || File.Exists(assembly + ".mdb")))
{
rp.ReadSymbols = true;
}
AssemblyDefinition mergeAsm;
try
{
mergeAsm = AssemblyDefinition.ReadAssembly(assembly, rp);
}
catch (BadImageFormatException e) when (!rp.ReadSymbols)
{
throw new InvalidOperationException(
"ILRepack does not support merging non-.NET libraries (e.g.: native libraries)", e);
}
// cope with invalid symbol file
catch (Exception) when (rp.ReadSymbols)
{
rp.ReadSymbols = false;
try
{
mergeAsm = AssemblyDefinition.ReadAssembly(assembly, rp);
}
catch (BadImageFormatException e)
{
throw new InvalidOperationException(
"ILRepack does not support merging non-.NET libraries (e.g.: native libraries)", e);
}
Logger.Info("Failed to load debug information for " + assembly);
}
if (!Options.AllowZeroPeKind && (mergeAsm.MainModule.Attributes & ModuleAttributes.ILOnly) == 0)
throw new ArgumentException("Failed to load assembly with Zero PeKind: " + assembly);
return new AssemblyDefinitionContainer
{
Assembly = assembly,
Definition = mergeAsm,
IsPrimary = isPrimary,
SymbolsRead = rp.ReadSymbols
};
}
catch
{
Logger.Error("Failed to load assembly " + assembly);
throw;
}
}