为什么Reactive Extensions将HTTP GET发送到microsoft ON COMPILATION?

Mat*_*t G 11 c# linqpad system.reactive

我从此站点http://msdn.microsoft.com/en-us/data/gg577610下载了Stable版本的Reactive Extensions v1.0 SP1 ,我在.Net Framework 3.5环境中使用它(Visual Studio 2008)

我尝试在项目中使用Reactive Extensions,并注意到启动速度非常慢.去LinqPad,我输入了以下"C#Expression":

(new int[0]).ToObservable()
Run Code Online (Sandbox Code Playgroud)

我还引用了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
Run Code Online (Sandbox Code Playgroud)

当代码使用Reactive.Extensions编译时,有谁知道为什么它会像这样打电话回家?此外,还有什么方法可以关闭它,因为在开发应用程序(并在生产中运行)时,给家里电话延迟12秒特别不方便.

注意:当您编译代码时(或JIT在调试时编译它),它会像这样打电话回家.实际上并不是这样做的运行时行为.

Joe*_*ari 7

听起来Rx程序集是Authenticode签名的.IMO,对于为Framework 3.5或更早版本构建的Authenticode-sign .NET程序集是错误的 - 因为CLR在读取程序集之前检查证书撤销列表,最多将事情延迟几秒钟(或者如果您的Internet连接最差则延迟30秒)超时).

CLR 4中修复了此错误:仅在需要时验证Authenticode签名,而不是每次加载程序集时都验证.

(正是由于这个原因,LINQPad可执行文件的Framework 3.5版本不是Authenticode签名的.)

也许您可以要求Rx团队考虑从Reactive程序集的3.5版本中删除Authenticode签名(假设这确实是问题).