PowerShell: Почему я могу загружать несколько версий одной и той же сборки .NET за один сеанс, а также «обходной зависимC#

Место общения программистов C#
Ответить
Anonymous
 PowerShell: Почему я могу загружать несколько версий одной и той же сборки .NET за один сеанс, а также «обходной зависим

Сообщение Anonymous »

Я работаю в Windows 10 x64, PowerShell версия 5.1. < /p>
У меня есть несколько версий .NET Framework 4.0 Assembly (.dll), написанные в C# (сам). Собрание не подписаны. Их версии устанавливаются в AssemblyInfo.cs через [Assembly: Assemblyversion ("x.x.x.x")] . [Assembly: AssemblyFileVersion ("x.x.x.x")] Tag не существует в My AssemblyInfo.cs ! Эти сборки используются в регулярном приложении .NET Framework, они не специализированные модули PowerShell, и не имеют манифестных файлов.
Я использую эту сборку в некоторых сценариях PowerShell для создания объектов и методов вызова из нее. Когда я импортирую, скажем, 1.1.1.100 версия PowerShell через импорт-модуль "D: \ path \ to_v1.1 \ myassembly.dll" , он работает просто хорошо. Когда я вызову get-module Я вижу эту импортированную сборку в списке:

Код: Выделить всё

ModuleType Version    Name
---------- -------    ----
Binary     1.1.1.100  MyAssembly
< /code>
Теперь все начинает становиться интересными. Я импортирую другую версию импортного модуля Ассамблеи "D: \ ore \ path \ to_v1.2 \ myassembly.dll" 
. Это снова работает просто отлично. Итак, здесь мои вопросы:
Q1. Почему не отображаются ошибки? Я ожидаю получить ошибку: я пытаюсь загрузить сборку с тем же именем, но другой версией. Я думал, что вы не сможете загрузить две разные версии одной и той же сборки в одном контексте. Как обрабатываются эти ситуации, какие контексты загрузки используются? Может быть, вторая версия вообще не загружена?

Код: Выделить всё

ModuleType Version    Name
---------- -------    ----
Binary     1.1.1.100  MyAssembly
Binary     1.1.1.100  MyAssembly
< /code>
Не имеет значения, какую версию я импортирую в первую очередь. Во втором импортном модуле 
самая ранняя импортная версия дублируется в списке Get-Module . Я могу использовать только типы/методы из самой ранней импортированной версии сборки.
Q3. Эти зависимости автоматически разрешаются и неявно «импортируются» в текущий сеанс (я могу использовать из них типы без проблем). Каждая версия основной Myassembly.dll зависит от разных версий этих вторичных сборок. Когда я импортирую еще одну версию Myassembly , я тоже не получаю ошибки в отношении конфликтующих версий. Еще раз, я могу использовать только типы из самых ранних импортируемых вторичных собраний. Я читал о «зависимости ада», и это должно быть невозможно - так как это возможно? Результаты одинаковы: версии и их зависимости импортируются без проблем, но доступна только самая ранняя импортированная версия. Я хочу понять , почему я могу загрузить несколько версий сборки за один сеанс без ошибок, как PowerShell обрабатывает эти ситуации в целом и почему на нем изображены два модуля с одинаковыми версиями, почему я не получаю зависимость, а не просто, что я не просто заставляю » я хочу понять, что происходит , а не просто". Здесь?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/689 ... ssembly-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»