Dnlib - Не заменяются строки констант

В Исходном файле (который изменяем) есть такая строка:

public const string Test = "{ConstText}";

Её я пробую изменять этим методом, ищу строку и пробую её изменить.

var module = ModuleDefMD.Load(/* ... */);
foreach (var type in module.GetTypes().Where(t => t.HasMethods))
{
  foreach (var method in type.Methods.Where(m => m.HasBody))
  {
     IList<Instruction> instr = method.Body.Instructions;
     for (int i = 0; i < instr.Count; i++)
     {
       if (instr[i].OpCode == OpCodes.Ldstr) // string'овые опкоды
       {
           if (instr[i].Operand.ToString().Contains("{ConstText}")) // Что ищем и заменяем
           {
               instr[i].Operand = "NewText"; // На что заменяем
           }            
       }
        
     }
  }
}

Но оно не изменяется почему-то. Видимо из-за const, но если я уберу и сделаю так:

public static string Test = "{ConstText}";

То так изменяется.
Как изменить текст константы?


Смог найти константу через поиск по полям:

var list = new StringBuilder();
try
{
   using (var module = ModuleDefMD.Load(Resources.Stub))
   {
     foreach (var type in module.GetTypes().Where(t => t.HasMethods))
     {
       IList<FieldDef> fieldstr = type.Fields;
       for (int i = 0; i < fieldstr.Count; i++)
       {
         list.AppendLine($"FieldType: {fieldstr[i].FieldType}");
         list.AppendLine($"Name: {fieldstr[i].Name}");
         list.AppendLine($"FullName: {fieldstr[i].FullName}");
         list.AppendLine($"DeclaringType: {fieldstr[i].DeclaringType}");
         list.AppendLine($"GetType: {fieldstr[i].GetType()}");
         continue;
       }
    }
  }
 }
 catch { }
 File.WriteAllText("listCLI.txt", list.ToString());

fieldstr[i].Name - это наши константы.


Ответы (0 шт):