创建显示更新通知的 NuGet 包

本文关键字:NuGet 通知 显示 更新 创建 | 更新日期: 2023-09-27 18:37:23

我正在创建一个 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相当烦人:当我打开项目时,它隐藏在"准备解决方案"对话框后面,并且操作直到我单击确定才完成。

创建显示更新通知的 NuGet 包

最后,我发现没有比通过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)
}

我有一个名为"Wolfpack"的开源 .net 监视解决方案,其中一个插件允许您监视一个或多个 NuGet 包的更新。您还可以跟踪多个源。

可能有点矫枉过正,但它可以完成这项工作。您还可以通过电子邮件,咆哮或滚动自己的通知机制获得通知。

此插件的说明在这里:http://wolfpackcontrib.codeplex.com/wikipage?title=WolfPack.Contrib.Checks.NuGet&referringTitle=Home

  1. 真的没什么问题...
  2. 您可以使用写主机将其推送到包管理器控制台。