Merge pull request #4403 from BrzVlad/fix-workers-par-context
[mono.git] / mcs / tools / cil-stringreplacer / cil-stringreplacer.cs
index 2414206c692ef2023b30b34d7ca16ebceebc8306..3226b3911d9b291093cc8d100a871014dc7f016a 100644 (file)
@@ -100,33 +100,42 @@ public class Program
 
        static void RewriteAssembly (string assemblyLocation, Dictionary<string, string> resourcesStrings, CmdOptions options)
        {
-               var readerParameters = new ReaderParameters { ReadSymbols = true };
-               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;
-                                       
-                                       foreach (var instr in method.Body.Instructions) {
-                                               if (instr.OpCode != OpCodes.Ldstr)
+               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;
 
-                                               string value;
-                                               if (resourcesStrings.TryGetValue ((string)instr.Operand, out value)) {
-                                                       if (options.Verbose) {
-                                                               Console.WriteLine ($"Replacing '{instr.Operand}' with '{value}'");
-                                                       }
+                                               foreach (var instr in method.Body.Instructions) {
+                                                       if (instr.OpCode != OpCodes.Ldstr)
+                                                               continue;
+
+                                                       string value;
+                                                       if (resourcesStrings.TryGetValue ((string)instr.Operand, out value)) {
+                                                               if (options.Verbose) {
+                                                                       Console.WriteLine ($"Replacing '{instr.Operand}' with '{value}'");
+                                                               }
 
-                                                       instr.Operand = value;
+                                                               instr.Operand = value;
+                                                       }
                                                }
                                        }
                                }
                        }
-               }
 
-               var writerParameters = new WriterParameters { WriteSymbols = true };
-               assembly.Write (assemblyLocation, writerParameters);
+                       var writerParameters = new WriterParameters () {
+                               WriteSymbols = assembly.MainModule.HasSymbols
+                       };
+
+                       assembly.Write (writerParameters);
+               }
        }
 
        static bool LoadGetResourceStrings (Dictionary<string, string> resourcesStrings, CmdOptions options)