Ошибка сборки с таким именем уже загружена при выполнении Import-Module в функции Azure - PullRequest
1 голос
/ 20 июня 2020

В функции Azure Я пытаюсь загрузить модуль PowerShell, но получаю сообщение об ошибке Сборка с тем же именем уже загружена.

Пример кода

Import-Module "D:\home\site\wwwroot\HelloWorld\modules\MsrcSecurityUpdates\1.7.2\MsrcSecurityUpdates.psd1"

Сообщение об ошибке

Import-Module : Assembly with same name is already loaded
At C:\home\site\wwwroot\HelloWorld\run.ps1:25 char:5
+     Import-Module "D:\home\site\wwwroot\HelloWorld\modules\MsrcSecuri ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Import-Module], FileLoadException
+ FullyQualifiedErrorId : FormatXmlUpdateException,Microsoft.PowerShell.Commands.ImportModuleCommand

Дополнительный фон ..

Этот код работал вчера. Я внес много изменений, поэтому не могу четко указать, что тот же код, который работал вчера, теперь дает сбой.

Я редактирую код напрямую через браузер.

Я перезапустил веб-приложение , чтобы потенциально вывести sh любые сборки, загруженные во время моего кода. Не имеет значения.

Я проверил, доступен ли модуль со следующим, который возвращает MsrcSecurityUpdates НЕ установлен.

if (-not (Get-Module -Name "MsrcSecurityUpdates"))
{
    Write-Output "MsrcSecurityUpdates NOT installed";
}
else
{
    Write-Output "MsrcSecurityUpdates YES installed";
}

Я загрузил модуль с помощью

Save-Module -Name MsrcSecurityUpdates -Path "C:\TEMP" -Force

и впоследствии загружены в Azure Function File Share с помощью консоли Kudo. В соответствии с шагами, описанными в этом вопросе по стеку

1 Ответ

1 голос
/ 21 июня 2020

Кажется, этот модуль конфликтует с другими модулями в вашем приложении или со сборками, явно загруженными из вашего кода. Также возможно, что содержимое модуля повреждено.

Прежде всего, я бы рекомендовал полагаться на функцию Управляемые зависимости вместо загрузки модуля через Kudu. Просто включите ссылку на свой модуль в файл requirements.psd1 в root вашего приложения:

@{
    ...
    'MsrcSecurityUpdates' = '1.*'
}

Если вы редактируете этот файл на портале, вам может потребоваться перезапустить приложение. В следующий раз, когда вы вызовете любую функцию, последняя версия этого модуля будет автоматически установлена ​​из галереи PowerShell и будет доступна в PSModulePath, поэтому вы можете импортировать ее, не указывая путь:

Import-Module MsrcSecurityUpdates

Попробуйте это в совершенно новом приложении без каких-либо других модулей: будет загружен MsrcSecurityUpdates. Однако, если вы все еще получаете ту же ошибку, это означает, что MsrcSecurityUpdates конфликтует с другими модулями, которые использует ваше приложение. Вы можете сузить его, удалив другие модули из своего приложения (включая очистку модулей, загруженных через Kudu) и сократив код.

[ОБНОВЛЕНИЕ] Возможные обходные пути:

  • Попробуйте импортировать (Import-Module) модули в определенном фиксированном порядке, чтобы убедиться, что сначала загружаются более свежие версии сборки. Это может помочь, а может и не помочь, в зависимости от конструкции модулей.
  • Попробуйте выполнить команды из одного из модулей в отдельном процессе (используя задания или сеансы PowerShell, или даже вызовите pw sh .exe) .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...