- string value;
- if (resourcesStrings.TryGetValue ((string)instr.Operand, out value)) {
- if (options.Verbose) {
- Console.WriteLine ($"Replacing '{instr.Operand}' with '{value}'");
+ methods.Add (method.FullName, method.Body);
+ }
+ }
+ }
+ }
+
+ var readerParameters = new ReaderParameters {
+ ReadSymbols = true,
+ ReadWrite = true,
+ SymbolReaderProvider = new DefaultSymbolReaderProvider (false)
+ };
+
+ using (var assembly = AssemblyDefinition.ReadAssembly (assemblyLocation, readerParameters)) {
+ foreach (var module in assembly.Modules) {
+ foreach (var type in module.GetTypes ()) {
+ foreach (var method in type.Methods) {
+ if (!method.HasBody)
+ continue;
+
+ MethodBody newBody;
+ if (methods.TryGetValue (method.FullName, out newBody)) {
+ var mbody = method.Body;
+ mbody.Instructions.Clear ();
+ foreach (var instr in newBody.Instructions) {
+ switch (instr.OpCode.OperandType) {
+ case OperandType.InlineType:
+ var tr = (TypeReference)instr.Operand;
+ foreach (var t in method.GenericParameters) {
+ if (tr.FullName == t.FullName) {
+ instr.Operand = t;
+ break;
+ }
+ }
+
+ break;
+ }
+
+ mbody.Instructions.Add (instr);