Подтвердить что ты не робот

Что такое System.IO.dll?

Насколько мне известно, большинство из нижеперечисленных типов теперь и всегда были определены в mscorlib и/или System.dll.

Однако при поиске в каталогах v4 framework (я установил 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. Итак, кто-нибудь знает, почему эта сборка существует (и почему сейчас)?

4b9b3361

Ответ 1

Вы нашли ссылку. Это может показаться странным, поскольку вы определенно не используете такую ​​ссылочную сборку в .NET-проекте, который предназначен для .NET >= 4.0. Обычно вы получаете их из каталога C:\Program Files (x86)\Reference Assemblies на вашей машине dev. Но это не единственный сценарий, в котором используется компилятор. Вы также используете компилятор при использовании System.CodeDom в своей программе или в зависимости от сериализации XML.

Конкретная информация о System.CodeDom и сериализации XML заключается в том, что компилятор работает на вашей пользовательской машине. И что вы не можете настроить таргетинг на определенную версию .NET Framework. На вашем компьютере пользователя нет пакетов таргетинга, которые есть на вашем компьютере. Таким образом, он получает любую версию, которая будет установлена ​​на машине. Файлы в C:\Windows\Microsoft.NET\Framework\v4.0.30319 содержат ссылочные сборки, соответствующие этой установленной версии. Если машина обновляется с другой версией .NET 4.x, то эти сборки ссылок также обновляются.

Не единственный возможный сценарий, вероятно, вы также будете использовать их при построении из командной строки. Или на сервере сборки и решил не платить за лицензию VS, очень плохая идея. Или в команде ILMerge, слишком плохая идея. Эти сценарии намного сложнее. Он работает нормально, пока встроенная сборка остается на одной машине. Но нет, если они переезжают на другую машину, на которой установлена ​​другая версия фреймворка. Это может привести к довольно загадочным исключениям времени выполнения, очевидно в этом Q + A.

System.IO.dll довольно экзотичен. Это вам понадобится только при запуске System.CodeDom со ссылкой на сборку PCL. Его основная роль - скрывать объявления, которые не должны использоваться в профиле, который вы выбрали. Пространство имен System.IO требует скрытия, поскольку эти типы не могут использоваться, когда вы нацеливаете WinRT. Но в остальном причина, по которой он не содержит каких-либо типов, [TypeForwardedTo] сообщает компилятору, что тип поддерживается на настольном компьютере и искать объявление в другом месте, mscorlib.dll