Added catching of error thrown when the assembly has been rewritten but the debug symbols do not match.

This commit is contained in:
Jarl Gullberg 2017-05-30 18:16:45 +02:00
parent c05ac4f7a0
commit b8975c5626
No known key found for this signature in database
GPG key ID: 750FF6F6BDA72D23

View file

@ -90,58 +90,65 @@ namespace OpenTK.Rewrite
} }
// Load assembly and process all modules // Load assembly and process all modules
using (AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(file, read_params)) try
{ {
var rewritten = assembly.CustomAttributes.FirstOrDefault(a => a.AttributeType.Name == "RewrittenAttribute"); using (AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(file, read_params))
if (rewritten == null)
{ {
foreach (var module in assembly.Modules) var rewritten = assembly.CustomAttributes.FirstOrDefault(a => a.AttributeType.Name == "RewrittenAttribute");
if (rewritten == null)
{ {
foreach (var reference in module.AssemblyReferences) foreach (var module in assembly.Modules)
{ {
try foreach (var reference in module.AssemblyReferences)
{ {
var resolved = module.AssemblyResolver.Resolve(reference); try
if (reference.Name == "mscorlib")
{ {
mscorlib = resolved; var resolved = module.AssemblyResolver.Resolve(reference);
if (reference.Name == "mscorlib")
{
mscorlib = resolved;
}
}
catch (Exception e)
{
Console.Error.WriteLine(e.ToString());
} }
} }
catch (Exception e) }
if (mscorlib == null)
{
Console.Error.WriteLine("Failed to locate mscorlib");
return;
}
TypeMarshal = mscorlib.MainModule.GetType("System.Runtime.InteropServices.Marshal");
TypeStringBuilder = mscorlib.MainModule.GetType("System.Text.StringBuilder");
TypeVoid = mscorlib.MainModule.GetType("System.Void");
TypeIntPtr = mscorlib.MainModule.GetType("System.IntPtr");
TypeInt32 = mscorlib.MainModule.GetType("System.Int32");
TypeBindingsBase = assembly.Modules.Select(m => m.GetType("OpenTK.BindingsBase")).First();
foreach (var module in assembly.Modules)
{
foreach (var type in module.Types)
{ {
Console.Error.WriteLine(e.ToString()); Rewrite(type, optionsEnumerated);
} }
} }
} }
else
if (mscorlib == null)
{ {
Console.Error.WriteLine("Failed to locate mscorlib"); Console.Error.WriteLine("Error: assembly has already been rewritten");
return;
} }
TypeMarshal = mscorlib.MainModule.GetType("System.Runtime.InteropServices.Marshal");
TypeStringBuilder = mscorlib.MainModule.GetType("System.Text.StringBuilder");
TypeVoid = mscorlib.MainModule.GetType("System.Void");
TypeIntPtr = mscorlib.MainModule.GetType("System.IntPtr");
TypeInt32 = mscorlib.MainModule.GetType("System.Int32");
TypeBindingsBase = assembly.Modules.Select(m => m.GetType("OpenTK.BindingsBase")).First(); // Save rewritten assembly
assembly.Write(write_params);
foreach (var module in assembly.Modules)
{
foreach (var type in module.Types)
{
Rewrite(type, optionsEnumerated);
}
}
} }
else }
{ catch (InvalidOperationException inex)
Console.Error.WriteLine("Error: assembly has already been rewritten"); {
} Console.WriteLine("Failed to load the assembly. It may already have been rewritten, and the debug symbols no longer match.");
// Save rewritten assembly
assembly.Write(write_params);
} }
} }