2012-06-15 9 views
5

Tworzę pakiet NuGet i chciałbym, aby pakiet wyświetlał powiadomienie, gdy aktualizacja pakietu jest obecna w repozytorium (które jest prywatnym repozytorium, a nie oficjalnym NuGet magazyn).Utwórz pakiet NuGet, który pokazuje powiadomienia o aktualizacjach

Należy pamiętać, że nie chcę, aby pakiet aktualizował się automatycznie (w przypadku, gdy nowa wersja może powodować pewne problemy), ale wystarczy powiadomić użytkownika.

Aby to zrobić, dodałem to w moim pliku init.ps1 w opakowaniu:

param($installPath, $toolsPath, $package, $project) 
$PackageName = "MyPackage" 
$update = Get-Package -Updates | Where-Object { $_.Id -eq $PackageName } 
if ($update -ne $null -and $update.Version -gt $package.Version) { 
    [System.Windows.Forms.MessageBox]::Show("New version $($update.Version) available for $($PackageName)") | Out-Null 
} 

jest potrzebna kontrola $update.Version -gt $package.Version aby uniknąć wyświetlania powiadomienia, gdy jest zainstalowany nowszy pakiet.

Chciałbym wiedzieć, czy

  1. To rozwiązanie jest do zaakceptowania, czy istnieje lepszy i „standardowy” sposób to zrobić (zamiast warzenia moje własne rozwiązanie).
  2. Istnieje lepszy sposób wyświetlania powiadomienia, ponieważ MessageBox jest dość irytujący: ukrywa się za oknem "przygotowanie rozwiązania" po otwarciu projektu, a operacja nie zostanie zakończona, dopóki nie kliknę przycisku OK.

Odpowiedz

3

W końcu nie znalazłem lepszego sposobu na wyświetlenie powiadomienia niż poprzez plik init.ps1.
Odkryłem także, że skrypt init jest uruchamiany tylko wtedy, gdy konsola Package Manager jest widoczna, co nie jest idealnie idealne do tego celu, ale nadal nie mogłem znaleźć nic lepszego.

W jaki sposób powiadomić użytkownika, znalazłem kilka metod, które publikuję tutaj, na wypadek, gdyby były przydatne dla kogoś innego.

param($installPath, $toolsPath, $package, $project) 
if ($project -eq $null) { 
    $projet = Get-Project 
} 

$PackageName = "MyPackage" 
$update = Get-Package -Updates -Source 'MySource' | Where-Object { $_.Id -eq $PackageName } 
# the check on $u.Version -gt $package.Version is needed to avoid showing the notification 
# when the newer package is being installed 
if ($update -ne $null -and $update.Version -gt $package.Version) { 

    $msg = "An update is available for package $($PackageName): version $($update.Version)" 

    # method 1: a MessageBox 
    [System.Windows.Forms.MessageBox]::Show($msg) | Out-Null 
    # method 2: Write-Host 
    Write-Host $msg 
    # method 3: navigate to a web page with EnvDTE 
    $project.DTE.ItemOperations.Navigate("some-url.html", [EnvDTE.vsNavigateOptions]::vsNavigateOptionsNewWindow) | Out-Null 
    # method 4: show a message in the Debug/Build window 
    $win = $project.DTE.Windows.Item([EnvDTE.Constants]::vsWindowKindOutput) 
    $win.Object.OutputWindowPanes.Item("Build").OutputString("Update available"); 
    $win.Object.OutputWindowPanes.Item("Build").OutputString([Environment]::NewLine) 
} 
0
  1. Naprawdę nic złego ...
  2. Można użyć Write-Host pchnąć go do konsoli menedżera pakietów.
3

Mam otwarte rozwiązanie do monitorowania źródło .net nazwie „Wolfpack” i jedna z wtyczek pozwala na monitorowanie aktualizacje dla jednej lub większej liczby opakowań Nuget. Możesz także śledzić w wielu kanałach.

Może to być trochę przesada, ale wykona to zadanie. Możesz również otrzymywać powiadomienia pocztą e-mail, warknąć lub przetasować własny mechanizm powiadamiania.

Instrukcje dla tej wtyczki znajdują się tutaj: http://wolfpackcontrib.codeplex.com/wikipage?title=WolfPack.Contrib.Checks.NuGet&referringTitle=Home