我有一个示例方法定义:
[FooAttribute("One","time")]
public void Bar(){}
是否可以通过上述技术之一将参数“一”更改为“两个”?
答案 0 :(得分:2)
假设以下属性和类:
public class MyAttribute : Attribute
{
public MyAttribute(string a, string b)
{
this.a = a;
this.b = b;
}
private string a,b;
}
[My("foo", "bar")]
class WithAttribute
{
}
你可以使用类似下面的一些代码(请记住,这段代码仅用于演示目的,它假定了很多东西并且根本没有错误处理)
var assembly = AssemblyDefinition.ReadAssembly(assemblyPath);
var type = assembly.MainModule.Types.Where(t => t.Name.Contains("WithAttribute")).Single();
var attr = type.CustomAttributes.Where(ca => ca.AttributeType.FullName.Contains("MyAttribute")).Single();
type.CustomAttributes.Remove(attr);
var newAttr = new CustomAttribute(attr.Constructor)
{
ConstructorArguments =
{
new CustomAttributeArgument(
attr.ConstructorArguments[0].Type,
attr.ConstructorArguments[0].Value + "-Appended"),
new CustomAttributeArgument(
attr.ConstructorArguments[1].Type,
attr.ConstructorArguments[1].Value)
}
};
type.CustomAttributes.Add(newAttr);
assembly.Write(path);