Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否将ObsoleteAttribute添加到不受我控制的类型(或其他灰色列表)?_C#_.net - Fatal编程技术网

C# 是否将ObsoleteAttribute添加到不受我控制的类型(或其他灰色列表)?

C# 是否将ObsoleteAttribute添加到不受我控制的类型(或其他灰色列表)?,c#,.net,C#,.net,有没有办法将我不控制的类型标记为过时?基本上,我想将ObsoleteAttribute添加到我不想在.net项目中使用的类型(即SerializableAttribute) 我相信我可以用FxCop做类似的事情,但理想情况下我希望编译器已经为“greylisted”类型生成警告 这应该是在每个项目级别上,但遗憾的是“扩展属性”不存在,在运行时添加它们对于ObsoleteAttribute来说太晚了 编辑:为了澄清,我不想阻止类型使用(请记住,ObsoleteAttribute默认情况下只生成警告

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

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

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


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

不,而且我很有道理。由于它们不在您的控制之下,因此您无权将其淘汰;)可以这么说

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

我认真地认为类型“我不想在我的.net项目中使用”的整个想法是非常错误的,因为你将不得不做大量的工作而没有结果。不有用的类型不按定义使用(除非您喜欢包含您并不真正需要的内容)。淘汰它们不会有任何效果

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


从未参与过采用这种方法的项目。

没有一种方法可以直接做到这一点;FxCop是你最好的选择。不过,您可以发挥创意,重新声明类型。警告:这是不可靠的!但它会起作用:

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

这太恶心了!但是需要一个
extern别名
来四处走动。当然,它也可能会使用一些基于字符串的反射(
Activator.CreateInstance
)来模仿。除了我认为没有理由不能用FxCop规则来实现这一点之外,您的理由是不应该这样做,因为您从未参与过这样做的项目。我可以想出一些很好的理由来解释为什么您可能希望从签入策略中排除某些类型的使用。例如,您可能希望所有新类型都应公开DateTimeOffset而不是DateTime的策略。不管是否有帮助,这是正确的答案。现实不会屈从于你的意志。“过时”有一个特定的语义,您打算对其进行更改——“不在本项目中使用”与“不使用,将被替换/删除”不同。任何使用后规则(FxCop)都可能是实现这一点的唯一方法。您的rexample是一个很好的例子,说明了为什么不这样做:大量的东西公开了DateTime,有时在使用现有API时临时使用DateTime会更容易。OP显然是在试图强制执行有关特定类型使用的策略。我敢肯定,如果一个解决办法奏效,他就不会嫁给一个过时的人。FxCop是一个不错的选择,我举的关于DateTimeOffset的例子只是我能想到的许多关于这种策略的非常有效的例子之一。用户希望阻止他没有使用的所有类。很抱歉,但这将超过.NET框架的一半。即使你坚持官方的说法,那也是很多东西。大量的东西。即使在FxCop规则中使用带有类名的简单文件,也要花很长时间才能放入并过滤所有正式类。请注意,我不想阻止它们,只是为了生成一个警告。好的,很抱歉-1-解决方案有效。但这真的很难看,而且工作量很大,而且会添加一个HUGH黑名单程序集,基本上什么都没有。是的,有效,但是副作用很严重。你是反对票吗?什么,我没有给你添加足够的警告吗?@TomTom,你为什么认为这会很有效?我怀疑可能只有一两种类型的OP想要阻止。Marc承认这是一个丑陋的黑客行为,并推荐了FxCop。谢谢。我已经澄清了这个问题。是的,只有少数类型(第三方库中的一些类型)不应该使用,我想在编译期间使用一些。感谢您展示了一个可能的(丑陋的)解决方案并给出了一些警告,我将重新考虑它是否真的值得,或者FxCop是否是合适的地方。