System.IO.dll有什么意义

  • 本文关键字:IO dll System .net-4.0 .net
  • 更新时间 :
  • 英文 :


据我所知,以下大多数类型现在和过去都是在mscorlib和/或System.dll中定义的。

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

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

[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等)中的这些类型不在mscorlib中。那么,有人知道这个程序集为什么存在(为什么现在存在)吗?

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新