应该修复这个bug吗?

问题描述:

昨天我在.Net框架中发现了一个bug,发现它是一个已知的bug,不会被修复。总之错误是包含了IComparable接口类型的字段一个类不能是二进制序列化和反序列化时,一个int(可能还有其他二进制类型)被分配给该字段:应该修复这个bug吗?

[Serializable] 
public class Foo 
{ 
    public IComparable Value; 
} 

如果你尝试序列化(和反序列化)以下两个对象第一个将成功,第二个将失败:

var s = new Foo { Value = "foo" }; 
var i = new Foo { Value = 1 }; 

我描述这个在这里更详细:http://ondevelopment.blogspot.com/2009/11/fix-that-bug-will-ya-no.html

而且bug报告,你可以在这里找到(注意这个报告是从2006年开始,而不是由我提交):http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=91177

这不会被修复,因为“修复的风险超过它的好处”。我没有看到任何(收费)的情况,这将是一个突破性的变化。所以我的实际问题是,任何人都可以想到一个真正的场景,这将是一个突破性的变化?

+0

它可以正确使用Mono/gmcs 2.0.1。 – Thomas 2009-11-07 14:58:32

+0

@Thomas,这很有趣。实际上,这可能是Mono团队的一个bug,因为据我所知他们试图反映BCL中的错误。 – 2009-11-07 15:13:55

+0

微软从来没有做过任何改变他们的任何系统的可能性,这些系统可能会破坏任何依靠旧的东西(大量操作系统!)的预先存在的软件。我相信你实际上必须先改变整个公司才能解决这个问题。 – Esko 2009-11-07 22:50:36

我看不到任何(feesible)场景中,这将是一个重大更改

,我不认为会有任何有意重大更改,但也有参与修复bug的其他风险这可能会导致回归。

你的例子看起来很有意思,所以我认为他们的结论是风险大于好处。如果这真的会给你带来问题,他们还给你一个联系PSS的机会。

+0

不是我提交了错误,因为你看到错误报告是四岁。对我来说这不是一个大问题,我只关心错误修复可能导致的问题。我绝不意味着他们错了,我只是说我不能想出一个场景,这是一个突破性的变化,我很好奇看看是否有其他人可以。 – 2009-11-07 15:10:29

+0

“我无法想出一个突破性变化的场景” - 序列化实现的内部是复杂的,并且您不需要想出一个场景来理解不断变化的复杂代码有风险。 – Joe 2009-11-07 17:35:02

+0

我的例子如何被检测?在这个问题中的例子是一个简单的错误repro,请查看博客文章,以获取更详细的实际问题描述。你说的是他们害怕解决这个问题,因为它可能会破坏一些完全不相关的东西?没有检查二进制序列化实现的来源,我不能告诉你,如果我认为可能与否。但对我来说,似乎检测。 – 2009-11-07 20:48:35

我敢打赌,他们已经做出了一些非常人为的优化,例如像int这样的本地类型的序列化甚至系统的其他部分。

撤销这可能是有风险的,因为它可能是正确或性能回归,或两者兼而有之。