将ObsoleteAttribute添加到(或以其他方式列入灰名单)不受我控制的类型?

时间:2010-03-22 06:47:25

标签: c# .net

有没有办法以某种方式标记我不能控制的类型作为过时?基本上我想将ObsoleteAttribute添加到我不想在我的.net项目中使用的类型(即SerializableAttribute)

我相信我可以用FxCop做类似的事情,但理想情况下我希望编译器已经为“灰名单”类型生成警告?

这应该是在每个项目级别,但遗憾的是“扩展属性”不存在,并且在运行时添加它们对于ObsoleteAttribute来说太迟了......

编辑:为了澄清,我不想阻止使用类型(请记住,默认情况下ObsoleteAttribute只生成警告,而不是错误!),我只是想生成警告当它们在99%的情况下被使用时,使用它们是错误的(即SerializableAttribute)。另外,我不仅指代.net类型,还指某些第三方类型。这更像是一个提醒。我猜FxCop是我最好的选择。

2 个答案:

答案 0 :(得分:3)

没有办法直接这样做; FxCop将是您最好的选择。但是,您可以获得创意,并重新声明类型。警告:这是狡猾的狡猾!但它会起作用:

namespace System.Text {
    [Obsolete("Pah; who wants performance...", true)]
    public class StringBuilder { }
}

这太讨厌了!但需要extern alias来解决问题。当然,它也可能带有一些基于字符串的反射(Activator.CreateInstance)。

答案 1 :(得分:-1)

不,我感觉很好。由于它们不在你的控制之下,你无权废弃它们;)所以说。

FxCop也做不到。 xCop可以说你是否使用了一个,但这与向它们添加过时的属性不同。

我认真地认为类型“我不想在我的.net项目中使用”的整个想法很明显 - 因为你将不得不做一些没有结果的TON工作。根据定义不使用无用的类型(除非你喜欢包含你真正不需要的东西)。废弃它们并没有取得任何成就。

你可能会感到惊讶......也许有一天你需要其中一些。

从未参加过这种方法的项目。