프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

markus / packages / Newtonsoft.Json.10.0.3 / tools / install.ps1 @ 29cf2c0c

이력 | 보기 | 이력해설 | 다운로드 (3.65 KB)

1 787a4489 KangIngu
param($installPath, $toolsPath, $package, $project)
2
3
# open json.net splash page on package install
4
# don't open if json.net is installed as a dependency
5
6
try
7
{
8
  $url = "http://www.newtonsoft.com/json/install?version=" + $package.Version
9
  $dte2 = Get-Interface $dte ([EnvDTE80.DTE2])
10
11
  if ($dte2.ActiveWindow.Caption -eq "Package Manager Console")
12
  {
13
    # user is installing from VS NuGet console
14
    # get reference to the window, the console host and the input history
15
    # show webpage if "install-package newtonsoft.json" was last input
16
17
    $consoleWindow = $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow])
18
19
    $props = $consoleWindow.GetType().GetProperties([System.Reflection.BindingFlags]::Instance -bor `
20
      [System.Reflection.BindingFlags]::NonPublic)
21
22
    $prop = $props | ? { $_.Name -eq "ActiveHostInfo" } | select -first 1
23
    if ($prop -eq $null) { return }
24
  
25
    $hostInfo = $prop.GetValue($consoleWindow)
26
    if ($hostInfo -eq $null) { return }
27
28
    $history = $hostInfo.WpfConsole.InputHistory.History
29
30
    $lastCommand = $history | select -last 1
31
32
    if ($lastCommand)
33
    {
34
      $lastCommand = $lastCommand.Trim().ToLower()
35
      if ($lastCommand.StartsWith("install-package") -and $lastCommand.Contains("newtonsoft.json"))
36
      {
37
        $dte2.ItemOperations.Navigate($url) | Out-Null
38
      }
39
    }
40
  }
41
  else
42
  {
43
    # user is installing from VS NuGet dialog
44
    # get reference to the window, then smart output console provider
45
    # show webpage if messages in buffered console contains "installing...newtonsoft.json" in last operation
46
47
    $instanceField = [NuGet.Dialog.PackageManagerWindow].GetField("CurrentInstance", [System.Reflection.BindingFlags]::Static -bor `
48
      [System.Reflection.BindingFlags]::NonPublic)
49
50
    $consoleField = [NuGet.Dialog.PackageManagerWindow].GetField("_smartOutputConsoleProvider", [System.Reflection.BindingFlags]::Instance -bor `
51
      [System.Reflection.BindingFlags]::NonPublic)
52
53
    if ($instanceField -eq $null -or $consoleField -eq $null) { return }
54
55
    $instance = $instanceField.GetValue($null)
56
57
    if ($instance -eq $null) { return }
58
59
    $consoleProvider = $consoleField.GetValue($instance)
60
    if ($consoleProvider -eq $null) { return }
61
62
    $console = $consoleProvider.CreateOutputConsole($false)
63
64
    $messagesField = $console.GetType().GetField("_messages", [System.Reflection.BindingFlags]::Instance -bor `
65
      [System.Reflection.BindingFlags]::NonPublic)
66
    if ($messagesField -eq $null) { return }
67
68
    $messages = $messagesField.GetValue($console)
69
    if ($messages -eq $null) { return }
70
71
    $operations = $messages -split "=============================="
72
73
    $lastOperation = $operations | select -last 1
74
75
    if ($lastOperation)
76
    {
77
      $lastOperation = $lastOperation.ToLower()
78
79
      $lines = $lastOperation -split "`r`n"
80
81
      $installMatch = $lines | ? { $_.StartsWith("------- installing...newtonsoft.json ") } | select -first 1
82
83
      if ($installMatch)
84
      {
85
        $dte2.ItemOperations.Navigate($url) | Out-Null
86
      }
87
    }
88
  }
89
}
90
catch
91
{
92
  try
93
  {
94
    $pmPane = $dte2.ToolWindows.OutputWindow.OutputWindowPanes.Item("Package Manager")
95
96
    $selection = $pmPane.TextDocument.Selection
97
    $selection.StartOfDocument($false)
98
    $selection.EndOfDocument($true)
99
100
    if ($selection.Text.StartsWith("Attempting to gather dependencies information for package 'Newtonsoft.Json." + $package.Version + "'"))
101
    {
102
      # don't show on upgrade
103
      if (!$selection.Text.Contains("Removed package"))
104
      {
105
        $dte2.ItemOperations.Navigate($url) | Out-Null
106
      }
107
    }
108
  }
109
  catch
110
  {
111
    # stop potential errors from bubbling up
112
    # worst case the splash page won't open  
113
  }
114
}
115
116
# still yolo
클립보드 이미지 추가 (최대 크기: 500 MB)