2009-11-07 59 views
5

昨天我在.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

回答

1

我看不到任何(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

2

我敢打賭,他們已經做出了一些非常人爲的優化,例如像int這樣的本地類型的序列化甚至系統的其他部分。

撤銷這可能是有風險的,因爲它可能是正確或性能迴歸,或兩者兼而有之。