У меня есть сценарий сборки, который зависит от более старой версии одного из наших модулей. Версия 1.0.1. Я добавил -MaximumVersion 1.0.1
к команде Import-Module
. Когда запускается сценарий сборки, он не работает, и ошибка показывает, что выполняется код версии 2.1.0 модуля.
Import-Module DrilQuip.Build -MaximumVersion 1.0.1 -Force
Создание следующего номера версии ... Свойство VersionFilePath не может быть найдено для этого объекта. Убедитесь, что свойство существует. В C: \ Users \ svcTFSBuildProd \ Documents \ WindowsPowerShell \ Modules \ DrilQuip.Build \ 2.1.0 \ DrilQuip.Build.psm1: 253 символа: 5
Я пробовал с переключателем -Force
и без него, но это не имеет значения.
Я использовал Get-Module DrilQuip.Build -ListAvailable
, чтобы убедиться, что на компьютере установлена версия 1.0.1.
Как я могу гарантировать, что скрипт импортирует и использует старую версию модулей?
Обновление 1
Добавлен переключатель -Verbose
, чтобы получить более подробную информацию о том, что происходит. Вот результаты:
VERBOSE: загрузка модуля из пути 'C: \ Program Files \ WindowsPowerShell \ Modules \ DrilQuip.Build \ 1.0.1 \ DrilQuip.Build.psd1'. VERBOSE: заполнение свойства RepositorySourceLocation для модуля DrilQuip.Build.
Создание следующего номера версии ... Свойство VersionFilePath не может быть найдено для этого объекта. Убедитесь, что свойство существует. В папке C: \ Users \ svcTFSBuildProd \ Documents \ WindowsPowerShell \ Modules \ DrilQuip.Build \ 2.1.0 \ DrilQuip.Build.psm1: 253 символа: 5 + $ Matches = Select-String -Path $ global : BuildConfig.VersionFilePat ...
Это показывает, что один и тот же модуль был установлен в 2 разных местах. Расположение C: \ Users \ svcTFSBuildProd ..., похоже, превосходит расположение C: \ Program Files \ WindowsPowerShell ...
Я думаю, что это связано с областью Machine vs User при установке модуля. Я вернусь и удалю модули с пользовательской областью действия и установлю все версии модуля с областью действия компьютера и посмотрю, поможет ли это.
Обновление 2
Я удалил все версии модуля из папки пользовательской области, а затем снова попробовал сценарий. Он по-прежнему не работает, но теперь обе версии модуля поступают из одной и той же папки модуля.
VERBOSE: загрузка модуля из пути 'C: \ Program Files \ WindowsPowerShell \ Modules \ DrilQuip.Build \ 1.0.1 \ DrilQuip.Build.psd1'. VERBOSE: заполнение свойства RepositorySourceLocation для модуля DrilQuip.Build. Создание следующего номера версии ... Свойство VersionFilePath не может быть найдено для этого объекта. Убедитесь, что свойство существует. В папке C: \ Program Files \ WindowsPowerShell \ Modules \ DrilQuip.Build \ 2.0.4 \ DrilQuip.Build.psm1: 251 символ: 5
Поскольку новая версия все еще превосходит максимальную версию, я попросил мою теорию о том, что область действия пользователя превосходит объем машины, не является реальной проблемой. Что-то еще происходит.
Я снова запустил Get-Module -Name DrilQuip.Build -ListAvailable
и заметил, что ModuleType отличается. В версии 1.0.1 типом является Манифест, но в версиях 1.1.1 и 2.0.4 типом является Скрипт. Возможно, эта разница является причиной проблемы.
ModuleType Version Name
---------- ------- ----
Script 2.0.4 DrilQuip.Build
Script 1.1.1 DrilQuip.Build
Manifest 1.0.1 DrilQuip.Build
Я удалю все модули и переустановлю их из репозитория.
-Verbose
к вызовуImport-Module
, чтобы убедиться, что он хотя бы утверждает, что загружает правильную версию в этот момент. Возможно, более поздний код импортирует более новую версию модуля, например с помощью оператораusing module
. - person mklement0   schedule 28.02.2019