2012-08-23 63 views
11

我下載了無擴展V1.0 SP1從這個網站http://msdn.microsoft.com/en-us/data/gg577610的穩定版本,而我使用它在.NET Framework 3.5的環境(Visual Studio 2008中)爲什麼Reactive Extensions會將HTTP GET發送到Microsoft ON COMPILATION?

我想在一個項目中使用無擴展,注意到啓動起來非常緩慢。要LinqPad,我進入下面的 「C#表達」:

(new int[0]).ToObservable() 

我還引用System.Reactive.dll和進口System.Reactive.Linq命名空間。當我運行它時,需要12秒來編譯&運行。

我打開Process Monitor並監控LinqPad。我發現它正在向124.155.222.226或124.155.22.59發送HTTP請求。 (FYI LinqPad本身在打開時也會打到157.55.161.150的位置)。使用Wireshark,我注意到它發送一個HTTP GET請求

http://crl.microsoft.com/pki/crl/products/MicCodSigPCA_08-31-2010.crl 

有誰知道它爲什麼打電話回家這樣當代碼Reactive.Extensions編譯?此外,還有什麼辦法可以關閉它,因爲在開發應用程序(並在生產中運行)時12秒鐘延遲到家時特別不方便。

注意:當你編譯代碼時(或者JIT在調試時編譯它),它會以這種方式回到家中。這實際上並不是看起來在做這件事的運行時行爲。

+4

CRL - 證書吊銷列表。看起來好像它以某種方式檢查證書並需要該撤銷列表的最新版本,以便知道該證書是否仍然有效。 –

+0

但是,爲什麼需要檢查證書是否有效,只需編譯包含IObservable 的代碼?這似乎是錯誤的時間和地點進行HTTP請求。 –

+0

Somebody jab @ericlippert – Will

回答

7

聽起來像Rx程序集是Authenticode簽名的。國際海事組織認爲,對於爲Framework 3.5或更低版本構建的.NET程序集,Authentode簽名是錯誤的,因爲CLR在閱讀程序集之前會檢查證書撤銷列表,最多延遲幾秒鐘(或者如果您的Internet連接最差爲30秒超時)。

此錯誤在CLR 4中得到修復:Authenticode簽名僅在需求時進行驗證,而不是每次加載程序集時。

(這是因爲這個原因,框架3.5版本的LINQPad可執行文件是不是驗證碼簽名。)

也許你可以問問在Rx團隊考慮從3.5版本所無組件移除驗證碼簽名(假設這確實是問題)。

+0

這個DID工作,就像它一樣。我在這裏問了http://social.msdn.microsoft.com/Forums/en-US/rx/thread/00c9718b-5962-42ad-b02d-f170dc91ed36,並被引導到http://blogs.technet.com/b /markrussinovich/archive/2009/05/26/3244913.aspx –

相關問題