Создайте пакет 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 необходимо, чтобы не показывать уведомление при установке более нового пакета.

Я хотел бы знать, если

This solution is acceptable, or if there is a better and "standard" way to do this (rather than brewing my own solution). There is a better way to show a notification, as the MessageBox is rather annoying: it hides behind the "preparing solution" dialog when I open the project, and the operation does not complete until I click ok.

Ответы на вопрос(3)

Really nothing wrong with it... You can use Write-Host to push it to the package manager console.
Решение Вопроса

я не нашел лучшего способа показать уведомление, чем черезinit.ps1 файл.
Я также обнаружил, что сценарий инициализации запускается только в том случае, если консоль диспетчера пакетов видна, что не совсем подходит для этой цели, но все же я не смог найти ничего лучше.

Что касается способа уведомления пользователя, я нашел несколько способов, которые я публикую здесь, на случай, если они могут быть полезны для кого-то еще.

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)
}

названием & quot;Волчья стая& Quot; и один из плагинов позволяет отслеживать обновления одного или нескольких пакетов NuGet. Вы также можете отслеживать несколько каналов.

Может быть немного излишним, но это сделает работу. Вы также можете получать уведомления по электронной почте, рычать или свернуть свой собственный механизм уведомления.

Инструкции для этого плагина здесь:http://wolfpackcontrib.codeplex.com/wikipage?title=WolfPack.Contrib.Checks.NuGet&referringTitle=Home

Ваш ответ на вопрос