У меня есть несколько версий сборки .NET Framework 4.0 (.dll), написанной на C# (сам) ). Сборки не подписаны. Их версии задаются в файле AssemblyInfo.cs через [assembly: AssemblyVersion("X.X.X.X")]. Тег [assembly: AssemblyFileVersion("X.X.X.X")] не существует в моем файле AssemblyInfo.cs! Эти сборки используются в обычном приложении .NET Framework, они не являются специализированными модулями PowerShell и не имеют файлов манифеста.
Я использую эту сборку в некоторых сценариях PowerShell для создания объектов и вызова методов. из него.
У меня есть две версии этой сборки, скажем 1.1.1.100 и 1.2.1.100. Когда я импортирую, скажем, версию 1.1.1.100 в PowerShell через модуль импорта «D:\path\to_v1.1\MyAssembly.dll», все работает нормально. Когда я вызываю Get-Module, я вижу в списке эту импортированную сборку:
Код: Выделить всё
ModuleType Version Name
---------- ------- ----
Binary 1.1.1.100 MyAssembly
Вопрос 1. Почему не отображаются ошибки? Я ожидаю получить ошибку: я пытаюсь загрузить сборку с тем же именем, но другой версией. Я думал, что нельзя загрузить две разные версии одной и той же сборки в одном контексте. Как обрабатываются такие ситуации, какие контексты загрузки используются? Может быть, вторая версия вообще не загружена?
Q2. Get-Module теперь показывает два модуля с то же имя и версия, вот так:
Код: Выделить всё
ModuleType Version Name
---------- ------- ----
Binary 1.1.1.100 MyAssembly
Binary 1.1.1.100 MyAssembly
Q3. Моя сборка имеет некоторые зависимости от других моих сборок (в та же папка). Эти зависимости автоматически разрешаются и неявно «импортируются» в текущий сеанс (я могу без проблем использовать их типы). Каждая версия основного файла MyAssembly.dll зависит от разных версий этих вторичных сборок. Когда я импортирую другую версию MyAssembly, я также не получаю ошибок о конфликтующих версиях. Еще раз: я могу использовать только типы из самых ранних импортированных вторичных сборок. Я читал об «аде зависимостей», и это должно быть невозможно – так как же это возможно?
Я провел тот же эксперимент с пакетом NuGet Microsoft.CodeAnaанализ.CSharp.dll, версии 3.4.0 и 3.11.0. Результаты те же: версии и их зависимости импортируются без проблем, но доступна только самая ранняя импортированная версия.
Резюме
Когда я импортирую разные версии одних и тех же сборок, ошибок не возникает, доступны только самые ранние импортированные версии. Я хочу понять, почему я могу без ошибок загружать несколько версий сборки за один сеанс, как PowerShell вообще справляется с такими ситуациями и почему он показывает два модуля с одинаковыми версиями, почему я этого не делаю не попаду в ад зависимости.
Я хочу понять, что происходит, а не просто «заставить это работать».
Что мне здесь не хватает?
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/689 ... ssembly-in
Мобильная версия