Разрешение сборок во время разработки

Когда вы добавляете ссылку на сборку с помощью вкладки .NET или диалога добавления ссылки, эта ссылка указывает на промежуточную базовую сборку, которая содержит всю информацию о типах и сигнатурах, но не обязательно включает программный код. На вкладке .NET перечислены все базовые сборки, соответствующие сборкам среды выполнения в платформе .NET Framework. Кроме того, в этот список включены ссылочные сборки, соответствующие сборкам среды выполнения в зарегистрированных папках AssemblyFoldersEx, используемых сторонними разработчиками.

Настройка для различных версий

Visual Studio позволяет нацеливаться на версии .NET Framework, которые выполняются в нескольких версиях .NET Framework. Когда будет выпущена новая версия платформы .NET Framework, эту платформу можно будет установить с помощью пакета нацеливания, и тогда она автоматически будет включена в список целевых платформ в Visual Studio.

Как работает разрешение типов

Во время выполнения среда CLR разрешает типы в сборке, просматривая глобальный кэш сборок, каталог bin и все проверочные пути. Эту функцию выполняет fusion-загрузчик. Как же fusion-загрузчик узнает, что нужно искать? Это зависит от разрешения, выполненного во время разработки при сборке приложения.

Компилятор при сборке разрешает типы приложений, используя ссылочные сборки. В платформе .NET Framework версий 2.0, 3.0, 3.5, 4, 4.5 и 4.5.1 базовые сборки устанавливаются вместе с самой платформой .NET Framework.

Ссылочные сборки предоставляются пакетом нацеливания, который прилагается к соответствующей версии пакета SDK для .NET Framework. Сама платформа предоставляет только сборки среды выполнения. Чтобы создавать приложения, следует установить и платформу .NET Framework, и соответствующий пакет SDK для .NET Framework.

Когда вы нацеливаетесь на определенную платформу .NET Framework, система сборки разрешает все типы с помощью ссылочных сборок из пакета нацеливания. Во время выполнения fusion-загрузчик разрешает эти же типы по сборкам среды выполнения, которые обычно размещаются в глобальном кэше сборок.

Если базовые сборки недоступны, система сборки разрешает типы сборок, используя сборки среды выполнения. Поскольку сборки среды выполнения, размещенные в глобальном кэше сборок, не различаются по дополнительным номерам версий, такое разрешение может привести к использованию неправильной сборки. Такое возможно, например, если при нацеливании на .NET Framework версии 3.0 используется новый метод, представленный только в версии 3.5. Сборка пройдет успешно и приложение будет запускаться на компьютере, где проходила сборка, но завершится сбоем, если его развернуть на компьютере, на котором не установлена версия 3.5.

Целевой пакет, который теперь поставляется с .NET Framework SDK, включает список всех сборок среды выполнения в соответствующей версии платформы, который называется списком перераспределения, благодаря чему система сборки не может разрешать типы по неправильным версиям сборки.