C# 为什么System.Numerics.BigInteger在Silverlight 4.0中没有解析方法,而在.Net 4.0中却有解析方法?

C# 为什么System.Numerics.BigInteger在Silverlight 4.0中没有解析方法,而在.Net 4.0中却有解析方法?,c#,.net,silverlight,silverlight-4.0,.net-4.0,C#,.net,Silverlight,Silverlight 4.0,.net 4.0,我在.NET4.0和Silverlight4.0使用的BigIntegers之间遇到了一个奇怪的差异;在中,biginger有一个Parse和TryParse方法,而在版本中,它没有这两个方法 如果您在Reflector中查看.Net版本的System.Numerics,还可以看到,当您反汇编代码时,每个方法都是空的,并且它缺少BigIntergerBuilder和Silverlight版本的朋友: public static BigInteger Parse(string value) { }

我在.NET4.0和Silverlight4.0使用的
BigInteger
s之间遇到了一个奇怪的差异;在中,
biginger
有一个
Parse
TryParse
方法,而在版本中,它没有这两个方法

如果您在Reflector中查看.Net版本的
System.Numerics
,还可以看到,当您反汇编代码时,每个方法都是空的,并且它缺少
BigIntergerBuilder
和Silverlight版本的朋友:

public static BigInteger Parse(string value)
{
}
这是怎么回事

这显然不是
biginger.Parse的代码-它不会编译,因为它不会返回任何东西

当然,这并不是Silverlight中“遗漏”的唯一东西——Silverlight中有大量的.NETAPI不在其中。这是该框架的精简版本。恐怕事情就是这样

整数就是它们,用一种天真的方式自己实现它可能不会太难。。。如果您认为它效率很低,那么我怀疑它根本不会是很多代码。

这显然不是
biginger.Parse的代码-它不会编译,因为它不会返回任何东西

当然,这并不是Silverlight中“遗漏”的唯一东西——Silverlight中有大量的.NETAPI不在其中。这是该框架的精简版本。恐怕事情就是这样


整数就是它们,用一种天真的方式自己实现它可能不会太难。。。如果您认为它效率很低,那么我怀疑它根本就不是什么代码。

我不认为System.Numerics.dll是Silverlight 4.0发行版的一部分。但这不是重点。您所看到的是引用程序集的一个特殊版本。例如,您可以在
c:\program files\reference Assembly\microsoft\framework\.netframework\v4.0
中找到一个

那里的组件已从中剥离所有IL。它们的元数据在其他方面与
c:\windows\microsoft.net\framework\v4.0.30319

我不知道这些剥离组件的功能是什么。我只能想象它们是为了加速编译,因为编译器只需要元数据。但这有点遥不可及。我还可以想象它与神秘的新[TargetedPatchingOptOut]属性有关,这也是一个很长的镜头,因为它背后的机制在我能找到的任何地方都没有解释。我和JaredPar谈过这件事,他打算向微软内部询问此事。我没有回音

嗯,没有真正的答案,但它确实解释了你所看到的


接下来,我还有一个理论,当我注意到文件夹名为“v4.0”时,我得到了启发。请注意,内部版本号不是它的一部分,因为它位于c:\windows\microsoft.net中。当他们发布新版本时,这应该会产生有趣的效果,类似于发布service Pack时对.NET 2.0基础程序集的更新

臭名昭著的是,其中一个严重错误是这些更新在核心类中进行了更改,而没有更改[AssemblyVersion]。最明显的是WaitHandle类,它获得了WaitOne(int)重载。非常有用,因为没有人知道exitContext参数应该传递什么。使用这种新的重载很容易做到,以.NET 2.0为目标并不能阻止它,但是如果目标机器安装了原始的.NET 2.0 RTM版本,而没有获得服务包,那么情况就不妙了


我猜:这些引用程序集是任何当前和未来版本的.NET 4.0的核心程序集。他们的公共界面被冻结。并防止意外使用在以后的生成中添加的公共方法。因此,IL是没有用的,因为它会改变。

我不认为System.Numerics.dll是Silverlight 4.0发行版的一部分。但这不是重点。您所看到的是引用程序集的一个特殊版本。例如,您可以在
c:\program files\reference Assembly\microsoft\framework\.netframework\v4.0
中找到一个

那里的组件已从中剥离所有IL。它们的元数据在其他方面与
c:\windows\microsoft.net\framework\v4.0.30319

我不知道这些剥离组件的功能是什么。我只能想象它们是为了加速编译,因为编译器只需要元数据。但这有点遥不可及。我还可以想象它与神秘的新[TargetedPatchingOptOut]属性有关,这也是一个很长的镜头,因为它背后的机制在我能找到的任何地方都没有解释。我和JaredPar谈过这件事,他打算向微软内部询问此事。我没有回音

嗯,没有真正的答案,但它确实解释了你所看到的


接下来,我还有一个理论,当我注意到文件夹名为“v4.0”时,我得到了启发。请注意,内部版本号不是它的一部分,因为它位于c:\windows\microsoft.net中。当他们发布新版本时,这应该会产生有趣的效果,类似于发布service Pack时对.NET 2.0基础程序集的更新

臭名昭著的是,其中一个严重错误是这些更新在核心类中进行了更改,而没有更改[AssemblyVersion]。最明显的是WaitHandle类,它获得了WaitOne(int)重载。非常有用,因为没有人知道exitContext参数应该传递什么。使用这种新的重载很容易,