6

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。これはかなり煩わしいためです。プロジェクトを開くと[ソリューションの準備]ダイアログの後ろに隠れ、[OK]をクリックするまで操作は完了しません。
4

3 に答える 3

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)
}
于 2012-07-15T14:22:26.953 に答える
3

「 Wolfpack 」と呼ばれるオープンソースの.net監視ソリューションがあり、プラグインの1つを使用すると、1つ以上のNuGetパッケージの更新を監視できます。複数のフィードを追跡することもできます。

少しやり過ぎかもしれませんが、それは仕事をします。また、電子メール、唸り声、または独自の通知メカニズムを使用して通知を受け取ることもできます。

このプラグインの手順は次のとおりです:http ://wolfpackcontrib.codeplex.com/wikipage?title = WolfPack.Contrib.Checks.NuGet&referringTitle = Home

于 2013-01-29T16:14:27.160 に答える
0
  1. 本当に何も悪いことはありません...
  2. Write-Hostを使用して、パッケージマネージャーコンソールにプッシュできます。
于 2012-07-10T03:54:23.857 に答える