You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.1 KiB
PowerShell
93 lines
3.1 KiB
PowerShell
7 months ago
|
param($installPath, $toolsPath, $package, $project)
|
||
|
|
||
|
# open json.net splash page on package install
|
||
|
# don't open if json.net is installed as a dependency
|
||
|
|
||
|
try
|
||
|
{
|
||
|
$url = "http://james.newtonking.com/json"
|
||
|
$dte2 = Get-Interface $dte ([EnvDTE80.DTE2])
|
||
|
|
||
|
if ($dte2.ActiveWindow.Caption -eq "Package Manager Console")
|
||
|
{
|
||
|
# user is installing from VS NuGet console
|
||
|
# get reference to the window, the console host and the input history
|
||
|
# show webpage if "install-package newtonsoft.json" was last input
|
||
|
|
||
|
$consoleWindow = $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow])
|
||
|
|
||
|
$props = $consoleWindow.GetType().GetProperties([System.Reflection.BindingFlags]::Instance -bor `
|
||
|
[System.Reflection.BindingFlags]::NonPublic)
|
||
|
|
||
|
$prop = $props | ? { $_.Name -eq "ActiveHostInfo" } | select -first 1
|
||
|
if ($prop -eq $null) { return }
|
||
|
|
||
|
$hostInfo = $prop.GetValue($consoleWindow)
|
||
|
if ($hostInfo -eq $null) { return }
|
||
|
|
||
|
$history = $hostInfo.WpfConsole.InputHistory.History
|
||
|
|
||
|
$lastCommand = $history | select -last 1
|
||
|
|
||
|
if ($lastCommand)
|
||
|
{
|
||
|
$lastCommand = $lastCommand.Trim().ToLower()
|
||
|
if ($lastCommand.StartsWith("install-package") -and $lastCommand.Contains("newtonsoft.json"))
|
||
|
{
|
||
|
$dte2.ItemOperations.Navigate($url) | Out-Null
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
# user is installing from VS NuGet dialog
|
||
|
# get reference to the window, then smart output console provider
|
||
|
# show webpage if messages in buffered console contains "installing...newtonsoft.json" in last operation
|
||
|
|
||
|
$instanceField = [NuGet.Dialog.PackageManagerWindow].GetField("CurrentInstance", [System.Reflection.BindingFlags]::Static -bor `
|
||
|
[System.Reflection.BindingFlags]::NonPublic)
|
||
|
$consoleField = [NuGet.Dialog.PackageManagerWindow].GetField("_smartOutputConsoleProvider", [System.Reflection.BindingFlags]::Instance -bor `
|
||
|
[System.Reflection.BindingFlags]::NonPublic)
|
||
|
if ($instanceField -eq $null -or $consoleField -eq $null) { return }
|
||
|
|
||
|
$instance = $instanceField.GetValue($null)
|
||
|
if ($instance -eq $null) { return }
|
||
|
|
||
|
$consoleProvider = $consoleField.GetValue($instance)
|
||
|
if ($consoleProvider -eq $null) { return }
|
||
|
|
||
|
$console = $consoleProvider.CreateOutputConsole($false)
|
||
|
|
||
|
$messagesField = $console.GetType().GetField("_messages", [System.Reflection.BindingFlags]::Instance -bor `
|
||
|
[System.Reflection.BindingFlags]::NonPublic)
|
||
|
if ($messagesField -eq $null) { return }
|
||
|
|
||
|
$messages = $messagesField.GetValue($console)
|
||
|
if ($messages -eq $null) { return }
|
||
|
|
||
|
$operations = $messages -split "=============================="
|
||
|
|
||
|
$lastOperation = $operations | select -last 1
|
||
|
|
||
|
if ($lastOperation)
|
||
|
{
|
||
|
$lastOperation = $lastOperation.ToLower()
|
||
|
|
||
|
$lines = $lastOperation -split "`r`n"
|
||
|
|
||
|
$installMatch = $lines | ? { $_.StartsWith("------- installing...newtonsoft.json ") } | select -first 1
|
||
|
|
||
|
if ($installMatch)
|
||
|
{
|
||
|
$dte2.ItemOperations.Navigate($url) | Out-Null
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
# stop potential errors from bubbling up
|
||
|
# worst case the splash page won't open
|
||
|
}
|
||
|
|
||
|
# yolo
|