web-dev-qa-db-ja.com

NuGetパッケージのinstall.ps1スクリプトをデバッグする方法

そのため、NuGetパッケージにPowerShellスクリプトのインストール/アンインストールを含めることができます。試しましたが、install.ps1が機能しません。理由を知る可能性はありますか?デバッグ、ロギング、何か?

更新

スクリプトは、Nugetパッケージのインストールプロセスの一部として実行されることに注意してください。それは非常にNuget固有である可能性があります。

43
dkl

おそらく私はパーティーに遅れていますが、NuGet固有のスクリプトをデバッグするためのソリューションであるNuGetパッケージ NuGetDebugTools があります。そのスクリプト Add-Debugger.ps1 は、シンプルでありながら効果的なデバッガーをNuGetパッケージマネージャーコンソールに追加します。

サンプルシナリオ:

  • visualStudioを起動します
  • nuGetコンソールを開き、コマンドを入力します

    PM> Add-Debugger [-ReadHost]
    PM> Set-PSBreakpoint -Command init
    PM> Set-PSBreakpoint -Command install
    

(または、より具体的なブレークポイントを設定します。help Set-PSBreakpointを参照してください)

  • visual Studioソリューションを開くか、既に開いているInstall-PackageXYZを呼び出します
  • デバッガー入力ダイアログは、呼び出された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は、デフォルトのGUI入力ボックスの代わりにRead-Hostを入力に使用するように指示します。

27
Roman Kuzmin

これが、PowerShellISEを使用してinstall.ps1をステップスルーする方法です。

PowerShell ISEを使用してインストールスクリプトの実行をステップスルーできるようにするには、次の手順に従います。Net4でビルドされたアセンブリの実行を有効にする

どちらか

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>

NuGetパッケージに含まれているPowerShellスクリプトを実行できるようにするには、実行ポリシーを変更する必要があります。

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
)

vSホストプロセスの外部でnugetコマンドレットを使用できるようにするモジュールをインポートします

ダウンロード 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オブジェクトは未設定のままですが、スクリプトが実際にはそのパラメーターを参照していないことがわかりました

参照: http://community.sharpdevelop.net/blogs/mattward/archive/2011/06/12/InstallingNuGetPackagesOutsideVisualStudio.aspx

8
ambidexterous

使用する Set-PsDebug -trace 2何が起こっているかを確認します。

4
manojlds

VSのパッケージマネージャーコンソールからスクリプトを実行します(コンソールの詳細は https://docs.nuget.org/ndocs/tools/package-manager-console )-および途中のエラーは赤で書き出されます。

また、Write-Hostを使用して診断トレースタイプ情報を同じコンソールに書き込むことができます。

4
Ethan J. Brown

インストールスクリプトの最初にStart-Transcriptを呼び出し、最後に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 を参照してください

1
stej