生成自定义的C#编译时警告

20

我正在使用VS2008,想要基于属性上的自定义属性创建编译时警告/错误(如果可能的话)。

目前有两种情况吸引了我的注意:

[MyAttribute (typeof(MyClass)]

在这里,MyClass必须实现一个接口。目前我在属性的构造函数中进行断言,但由于堆栈跟踪的性质,这样做并不容易追踪到问题:

public MyAttribute (Type MyClassType)
{
    System.Diagnostics.Debug.Assert(
        typeof(MyInterface).IsAssignableFrom(MyClassType),
        "Editor must implement interface: " + typeof(MyInterface).Name);
}

我关心的第二种情况是,当我在属性中定义了一个类型时,如果该类型实现了一个接口,则应该在另一个属性不存在时显示警告。

例如:if(MyClass.Implements(SomeInterface) && !Exists(SomeAttibute)) { Generate Warning }

[MyAttribute(typeof(MyClass)] 
// Comment next line to generate warning
[Foo ("Bar")]

谢谢!


https://dev59.com/r3VC5IYBdhLWcg3w4Vb6 - Mauricio Scheffer
1个回答

5
您可以使用PostSharp来完成这项任务。

我曾经做过,并在这里解释了如何实现它。


非常感谢!以前我看过PostSharp(解决另一个问题),但最终决定不使用它,然而现在我想重新评估一下 😉 - user164771
我刚刚发现了一个小问题 - 当属性从PostSharp.Laos.OnMethodInvocationAspect派生而来时,GetCustomAttributes()不再返回该属性,而不是System.Attribute。 - user164771
我刚刚发现使用“[MulticastAttributeUsage(MulticastTargets.Property, PersistMetaData = true)]”可以省去CompoundAspect的需要。 - user164771
@FrederikGheysels - 你博客上的所有代码都是无效链接。你能在这里发布代码吗? - ErnieL
这是一个链接到答案,而不是答案本身。 - Heretic Monkey
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接