方法的自定义属性声明
本文关键字:声明 自定义属性 方法 | 更新日期: 2023-09-27 18:32:55
我正在使用CodeDom生成一个包含一些方法的类。我能够为我的方法声明一个属性,使其看起来类似于 Pex 在创建参数化单元测试时所做的:
[PexMethod]
public void myMethod()
但是,我想包含更多内容,例如:
[PexMethod (Max Branches = 1000)]
public void myMethod()
但我无法包括((Max Branches = 1000))
.你能帮我一点吗?
属性值中不能有空格,它们只是自定义属性类中公共属性的包装器。 例如:
public class TestAttribute : Attribute
{
public bool Enabled { get; set; }
}
你可以像这样使用它
[TestAttribute(Enabled = true)]
void Foo(){}
因此,由于属性映射到属性,因此它必须遵循正常的语法命名规则。
我不确定您的问题是什么,但您可以简单地在CodeAttributeArgument
上设置 Value
属性:
var method =
new CodeMemberMethod
{
Name = "MyMethod",
CustomAttributes =
{
new CodeAttributeDeclaration
{
Name = "PexMethod",
Arguments =
{
new CodeAttributeArgument
{
Name = "MaxBranches",
Value = new CodePrimitiveExpression(1000)
}
}
}
}
};
属性位于基类 (PexSettingsAttributeBase) 上。 这可能就是您遇到麻烦的原因。 您可能正在反映错误的类型以查找要设置的属性信息。
CodeAttributeArgument codeAttr = new CodeAttributeArgument(new CodePrimitiveExpression("Max Branches = 1000"));
CodeAttributeDeclaration codeAttrDecl = new CodeAttributeDeclaration("PexMethod",codeAttr);
mymethod.CustomAttributes.Add(codeAttrDecl);