Как отладить install.ps1 script пакета NuGet
Таким образом, мы можем включить скрипты install/uninstall powershell в пакет NuGet. Я попытался, но мой install.ps1 не работает. Есть ли возможность узнать почему? Отладка, ведение журнала, что-нибудь?
Обновление
Обратите внимание, что script выполняется как часть процесса установки пакета Nuget. Это может быть очень Nuget-специфическим.
Ответы
Ответ 1
Возможно, я опаздываю на вечеринку, но вот решение для отладки конкретных сценариев NuGet, пакета NuGet NuGetDebugTools. Его script Add-Debugger.ps1 добавляет простой и вместе с тем эффективный отладчик в консоль диспетчера пакетов NuGet.
Пример сценария:
(или установите более конкретные точки останова, см. help Set-PSBreakpoint
)
- откройте решение Visual Studio или вызовите Install-Package XYZ для уже открытого
- диалог ввода отладчика появляется на любом вызове init.ps1 и install.ps1
-
введите? как ввод отладчика и посмотреть, что вы можете сделать:
s, StepInto Step to the next statement into functions, scripts, etc.
v, StepOver Step to the next statement over functions, scripts, etc.
o, StepOut Step out of the current function, script, etc.
c, Continue Continue operation (also on empty input).
q, Quit Stop operation and exit the debugger.
?, h Display this help message.
r Display PowerShell command history.
k Display call stack (Get-PSCallStack).
<number> Show debug location in context of <number> lines.
+<number> Set location context preference to <number> lines.
<command> Invoke any PowerShell <command> and write its output.
-
введите другие команды отладчика и PowerShell и посмотрите вывод в консоли NuGet
v1.4.0. Новый коммутатор ReadHost
сообщает использовать Read-Host
для ввода вместо поля ввода графического интерфейса по умолчанию.
Ответ 2
Вот как мне удалось выполнить шаг за шагом install.ps1 с помощью PowerShell ISE:
Чтобы выполнить выполнение установки script с помощью PowerShell ISE, выполните следующие действия:
Включить выполнение сборок, построенных с помощью .Net 4
Либо
C:\Windows\System32\WindowsPowerShell\v1.0
Или
C:\Windows\SysWOW64\WindowsPowerShell\v1.0
В зависимости от того, какую версию PS вы используете
Если файлов нет, создайте их
В любом
C:\Windows\System32\WindowsPowerShell\v1.0
Или
C:\Windows\SysWOW64\WindowsPowerShell\v1.0
В зависимости от какой версии PS вы используете
Если файлов конфигурации нет, создайте их
powershell.exe.config:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
powershell_ise.exe.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0.30319" />
</startup>
</configuration>
Чтобы иметь возможность запускать сценарии PowerShell, входящие в пакет NuGet, выполнение
политика должна быть изменена:
Set-ExecutionPolicy RemoteSigned -Scope Process
Скопируйте install.ps1, который вы хотите отлаживать и изменять его содержимое следующим образом:
удалить блок параметров
param(
[Parameter(Mandatory=$true)] [string] $installPath,
[Parameter(Mandatory=$true)] [string] $toolsPath,
[Parameter(Mandatory=$true)] $package,
[Parameter(Mandatory=$true)] $project
)
импортировать модуль, который позволяет использовать командлеты nuget вне хост-процесса VS
Загрузить http://community.sharpdevelop.net/blogs/mattward/NuGet/NuGetOutsideVisualStudio.zip Извлеките содержимое папки bin в какое-то место, а затем импортируйте PackageManagement.Cmdlets.dll
так:
import-module "C:\dev\NuGetOutsideVisualStudio\bin\PackageManagement.Cmdlets.dll"
теперь вы можете вручную установить все параметры:
$toolsPath="C:\dev\demo-solution\packages\X1.Registration.DbUpdate.0.4\tools"
$installPath="C:\dev\demo-solution\packages\X1.Registration.DbUpdate.0.4"
set-project DemoSolution.Logic C:\dev\demo-solution\DemoSolution.sln
$project = Get-Project -name DemoSolution.Logic
Это все еще оставляет объект пакета $package unset, но я обнаружил, что script на самом деле не ссылается на этот параметр
Литература:
http://community.sharpdevelop.net/blogs/mattward/archive/2011/06/12/InstallingNuGetPackagesOutsideVisualStudio.aspx
Ответ 3
Используйте Set-PsDebug -trace 2
, чтобы увидеть, что происходит.
Ответ 4
Запустите свои скрипты через консоль диспетчера пакетов в VS (подробности на консоли https://docs.nuget.org/ndocs/tools/package-manager-console) - и все, что вызывает ошибку по пути будут выписаны красным цветом.
Кроме того, вы можете написать диагностическую информацию о типе трассировки с помощью Write-Host на той же консоли.
Ответ 5
Вы можете вызвать Start-Transcript
в начале установки script и Stop-Transcript
в конце. Вы, вероятно, обернете установочный код следующим образом:
try {
$ErrorActionPreference = 'stop' # stop on error
Start-Transcript c:\a.txt
...
}
catch {
write-host $_
}
finally {
Stop-Transcript
}
Также возможно работать $ErrorActionPreference = 'inquire'
(вместо остановки). Тем не менее, нет никакой возможности попробовать это сейчас. См. http://tasteofpowershell.blogspot.com/2008/07/handling-errors-in-powershell.html