Как надежно ссылаться на внешние сборки .NET в модуле PowerShell v3? - программирование
Подтвердить что ты не робот

Как надежно ссылаться на внешние сборки .NET в модуле PowerShell v3?

Я работаю над модулем PowerShell v3, который должен работать с типами, которые содержатся в нескольких внешних сборках .NET.

Я хотел бы, чтобы этот модуль был достаточно автономным для простоты развертывания, и я не хочу полагаться на эти сборки, загружаемые в GAC. В идеале я хотел бы разместить требуемую сборку dll в папке модуля, а затем использовать PowerShell для автоматической загрузки этих сборок при загрузке модуля.

Я знаю, что я мог бы использовать команду Add-Type для принудительной загрузки таких сборок:

Add-Type -AssemblyName "Some.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=sometoken"

Но я все прочитал о требуемом свойстве сборки в манифесте модуля, и я надеюсь, что этот подход может устранить, казалось бы, хрупкий код Add-Type:

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()

Каков наиболее надежный способ ссылки на внешние сборки в модуле? Объявит ли зависимость в манифесте неявно загружать сборки при загрузке модуля? Если я воспользовался манифестом модуля, чтобы перечислить необходимые сборки, мне все равно придется писать код, который загружает сборки?

Я действительно не ищу простое решение "получить его на работу", поскольку у меня уже есть это, чтобы работать с использованием подхода Add-Type... Я ищу руководство и рекомендации для наиболее надежного способа сделать это.

4b9b3361

Ответ 1

Документация New-ModuleManifest для параметра -RequiredAssemblies соглашается:

Указывает файлы сборки (DLL), которые требуется модулю. Введите имена файлов сборки. Windows PowerShell загружает указанные сборки перед обновлением типов или форматов, импортирует вложенные модули или импортирует файл модуля, указанный в значении ключа RootModule.

Используйте этот параметр, чтобы отобразить все сборки, которые требуются модулю, включая сборки, которые необходимо загрузить, для обновления любых файлов форматирования или типа, перечисленных в ключах FormatsToProcess или TypeToProcess.

И я не могу найти ничего другого (например, MSDN).