AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("MyAssembly.dll"); TypeDefinition type = assembly.MainModule.Types.First(t => t.Name == "MyType"); FieldDefinition field = type.Fields.First(f => f.Name == "MyField"); Console.WriteLine("Field type: " + field.FieldType.FullName); Console.WriteLine("Field name: " + field.Name);
AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("MyAssembly.dll"); TypeDefinition type = assembly.MainModule.Types.First(t => t.Name == "MyType"); FieldDefinition field = type.Fields.First(f => f.Name == "MyField"); field.FieldType = type.Module.ImportReference(typeof(int)); assembly.Write("MyAssembly_new.dll");
AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("MyAssembly.dll"); TypeDefinition type = assembly.MainModule.Types.First(t => t.Name == "MyType"); FieldDefinition field = type.Fields.First(f => f.Name == "MyField"); field.CustomAttributes.Add(new CustomAttribute(type.Module.ImportReference(typeof(MyAttribute).GetConstructor(new Type[] { })))); assembly.Write("MyAssembly_new.dll");In this example, we load an assembly, get a type and a field, and then add a custom attribute to the field. We then save the modified assembly to a new file. The package library being used here is Mono.Cecil.