2012-06-15 21 views
5

NuGetパッケージを作成しています。パッケージの更新がリポジトリに存在する場合は通知を表示したいと考えています(公式のNuGetリポジトリ)。更新通知を表示するNuGetパッケージを作成する

パッケージが自動的に更新されることはありません(新しいバージョンで問題が発生する場合があります)が、ユーザーに通知するだけであることにご注意ください。

はこれを行うには、私はパッケージに私のinit.ps1ファイルでこれを追加しました:

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 
} 

$update.Version -gt $package.Version上のチェックは、新しいパッケージがインストールされているときに通知が表示されないようするために必要とされます。

私は、このソリューションが許容さ

  1. た場合、またはより良く、「標準」これを行う方法(というよりも、私の独自のソリューションを醸造)があるかどうかを知りたいです。
  2. MessageBoxは迷惑なので、通知を表示するより良い方法があります:私はプロジェクトを開いたときに「準備中の解決策」ダイアログの後ろに隠れています。

答えて

3

最後に、私はinit.ps1ファイルよりも通知を表示する良い方法が見つかりませんでした。
私は、パッケージマネージャコンソールが表示されている場合にのみinitスクリプトが実行されることも発見しましたが、これはまさにこの目的には理想的ではありません。

ユーザーに通知する方法について、いくつかの方法を見つけました。これらの方法は、他のユーザーにとって役立つ場合があるため、ここに投稿しています。

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. 本当にそれと間違って何もありません...
  2. あなたは、パッケージマネージャコンソールにそれをプッシュする書き込みホストを使用することができます。
3

私は「Wolfpack」と呼ばれるオープンソースの.NET監視ソリューションを持っているとプラグインの一つは、あなたが一つ以上のNuGetパッケージの更新を監視することができます。また、複数のフィードにわたってトラッキングすることもできます。

少し残虐かもしれないが、それは仕事をするだろう。電子メールで通知を受け取ったり、独自の通知メカニズムを構築したり、ロールしたりすることもできます。

関連する問題