当我读取程序集并重命名包含在泛型类型中的字段,然后编写程序集时,方法内对该字段的所有引用都将成为未解析的标记。我知道如果重命名它们,方法引用也会发生同样的情况。
// This is a generic class.
TypeDefinition type = GetSomeGenericType();
// This field is referenced from a method in this type.
type.Fields[0].Name = "_anotherName";
assemblyDefinition.Write(...);
由此产生的组件不起作用。这是预期的行为吗?
我发现如果我在编写程序集之前手动将指令的操作数更改为FieldDefinition
而不是FieldReference
,则一切正常。但这不应该由Cecil自动处理,就像它处理非泛型类型一样吗?
修改
事实证明,当我重命名字段时,指令操作数对它的引用将会中断,因为Resolve()
方法返回null。还在寻找一个合适的解决方案。