我可以创建一个将从发布代码中删除的属性吗?

Can I create an attribute which will be stripped out of release code?

我想做这样的事情:

[Notes("Remember to blah blah blah")]
public class Foo {

  [Notes("Redo this to include blah blah")]
  public string Bar { get; set; }

  // etc.

}

我知道 ConditionalAttribute,但它是密封的,所以我不能从它继承我的 NotesAttribute

这可以做到吗?

您可以从这里获取 ConditionalAttribute 的源代码:

http://referencesource.microsoft.com/#mscorlib/system/diagnostics/conditionalattribute.cs

然后您只需复制代码并重命名 class 即可获得您的属性。

一个可能的解决方案是使用预处理器:

https://msdn.microsoft.com/en-us/library/4y6tbswk.aspx

#if DEBUG
[Notes("Remember to blah blah blah")]
#endif
public class Foo {

    [Notes("Redo this to include blah blah")]
    public string Bar { get; set; }

    // etc.

}

是的,这是可以做到的!

看我的.

您需要这样做:

[Conditional("DEBUG")]
public class NotesAttribute : Attribute { }