そのため、NuGetパッケージにPowerShellスクリプトのインストール/アンインストールを含めることができます。試しましたが、install.ps1が機能しません。理由を知る可能性はありますか?デバッグ、ロギング、何か?
更新
スクリプトは、Nugetパッケージのインストールプロセスの一部として実行されることに注意してください。それは非常にNuget固有である可能性があります。
おそらく私はパーティーに遅れていますが、NuGet固有のスクリプトをデバッグするためのソリューションであるNuGetパッケージ NuGetDebugTools があります。そのスクリプト Add-Debugger.ps1 は、シンプルでありながら効果的なデバッガーをNuGetパッケージマネージャーコンソールに追加します。
サンプルシナリオ:
nuGetコンソールを開き、コマンドを入力します
PM> Add-Debugger [-ReadHost]
PM> Set-PSBreakpoint -Command init
PM> Set-PSBreakpoint -Command install
(または、より具体的なブレークポイントを設定します。help Set-PSBreakpoint
を参照してください)
タイプ?デバッガー入力として、何ができるかを確認してください。
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
を入力に使用するように指示します。
これが、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オブジェクトは未設定のままですが、スクリプトが実際にはそのパラメーターを参照していないことがわかりました
使用する Set-PsDebug -trace 2
何が起こっているかを確認します。
VSのパッケージマネージャーコンソールからスクリプトを実行します(コンソールの詳細は https://docs.nuget.org/ndocs/tools/package-manager-console )-および途中のエラーは赤で書き出されます。
また、Write-Hostを使用して診断トレースタイプ情報を同じコンソールに書き込むことができます。
インストールスクリプトの最初に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 を参照してください