.net 4.0 System.IO.dll的作用是什么?

.net 4.0 System.IO.dll的作用是什么?,.net-4.0,.net,.net 4.0,.net,据我所知,以下大多数类型现在是,而且一直是,在mscorlib和/或System.dll中定义的 但是,在查看v4框架目录(我已经安装了4.5,不确定它是否也存在于Vanilla v4中)时,我发现了一个名为System.IO.dll的程序集 在reflector中检查它,我看不到任何实际的代码。我只能找到以下条目: [assembly: TypeForwardedTo(typeof(BinaryReader))] [assembly: TypeForwardedTo(typeof(Binary

据我所知,以下大多数类型现在是,而且一直是,在
mscorlib
和/或
System.dll
中定义的

但是,在查看v4框架目录(我已经安装了4.5,不确定它是否也存在于Vanilla v4中)时,我发现了一个名为
System.IO.dll
的程序集

在reflector中检查它,我看不到任何实际的代码。我只能找到以下条目:

[assembly: TypeForwardedTo(typeof(BinaryReader))]
[assembly: TypeForwardedTo(typeof(BinaryWriter))]
[assembly: TypeForwardedTo(typeof(EndOfStreamException))]
[assembly: TypeForwardedTo(typeof(FileNotFoundException))]
[assembly: TypeForwardedTo(typeof(InvalidDataException))]
[assembly: TypeForwardedTo(typeof(IOException))]
[assembly: TypeForwardedTo(typeof(MemoryStream))]
[assembly: TypeForwardedTo(typeof(SeekOrigin))]
[assembly: TypeForwardedTo(typeof(Stream))]
[assembly: TypeForwardedTo(typeof(StreamReader))]
[assembly: TypeForwardedTo(typeof(StreamWriter))]
[assembly: TypeForwardedTo(typeof(StringReader))]
[assembly: TypeForwardedTo(typeof(StringWriter))]
[assembly: TypeForwardedTo(typeof(TextReader))]
[assembly: TypeForwardedTo(typeof(TextWriter))]
全部指向
mscorlib
(我想,还没有全部检查过)。我四处查看了一下,没有看到任何框架版本(例如silverlight、compact等)中没有这些类型。那么,有人知道这个程序集为什么存在(为什么现在存在)?

您找到了一个引用程序集。这听起来可能有些奇怪,因为您肯定不会在以.NET>=4.0为目标的.NET项目中使用这样的引用程序集。您通常从开发人员机器上的C:\Program Files(x86)\Reference Assemblys目录获取它们。但这并不是使用编译器的唯一场景。在程序中使用System.CodeDom或依赖XML序列化时,也可以使用编译器

有关System.CodeDom和XML序列化的具体信息是编译器在用户的计算机上运行。并且不能针对特定的.NET Framework版本。您的用户计算机没有您的计算机所具有的目标包。因此,无论机器上安装了哪个版本,它都会得到。C:\Windows\Microsoft.NET\Framework\v4.0.30319中的文件包含与该安装版本匹配的引用程序集。如果机器使用另一个.NET 4.x版本更新,那么这些引用程序集也会更新

这不是唯一可能的情况,很可能在从命令行构建时也会使用它们。或者在构建服务器上,决定不支付VS许可证的费用,这是一个非常糟糕的主意。或者在ILMerge命令中,这是一个非常糟糕的主意。这些场景要麻烦得多。只要构建的部件保持在同一台机器上,它就可以正常工作。但如果它们移动到另一台机器,一台安装了不同框架版本的机器,则不会。这可能会产生非常神秘的运行时异常,这一点在中很明显


System.IO.dll相当奇特。只有在运行System.CodeDom并引用PCL程序集时,才需要它。它的主要作用是隐藏声明,这种声明不应该在您选择的概要文件中使用。System.IO命名空间需要隐藏,因为当您以WinRT为目标时无法使用这些类型。但除此之外,由于它不包含任何类型,[TypeForwardedTo]告诉编译器该类型在桌面计算机上受支持,要在其他地方查找声明,mscorlib.dll

我只能推测,但可能是未来版本的平台可移植性?在Rx中,Bart de Smet在程序集之间转换了内容,以尽可能多地考虑平台细节。在vanilla v4中似乎不存在。我对接受这个答案感到矛盾。它不是参考程序集-它来自
C:\Windows\Microsoft.Net\framework\v4.0.30319
以及其他核心框架(非参考)程序集,与存储在GAC中的程序集相同。因此,第1段和第5段是不正确的。第4段也没有达到目标-当它在v4.5中引入时,很难出于遗留原因。但第3段似乎是正确的。