2012-06-15 4 views
5

Tôi đang tạo gói NuGet và tôi muốn gói hiển thị thông báo bất cứ khi nào bản cập nhật cho gói có trong kho (là kho lưu trữ riêng tư, không phải NuGet chính thức kho).Tạo gói NuGet hiển thị thông báo cập nhật

Xin lưu ý rằng tôi không muốn gói cập nhật tự động (trong trường hợp phiên bản mới có thể giới thiệu một số vấn đề), nhưng chỉ cần thông báo cho người dùng.

Để làm điều này, tôi đã thêm này trong tập tin init.ps1 tôi trong gói:

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 
} 

Vui lòng cung trên $update.Version -gt $package.Version là cần thiết để tránh hiển thị thông báo khi các gói mới hơn đang được cài đặt.

Tôi muốn biết nếu

  1. Giải pháp này là chấp nhận được, hoặc nếu có một cách tốt hơn và "tiêu chuẩn" để làm điều này (chứ không phải pha giải pháp của riêng tôi).
  2. Có cách tốt hơn để hiển thị thông báo vì MessageBox khá khó chịu: nó ẩn đằng sau hộp thoại "chuẩn bị giải pháp" khi tôi mở dự án và thao tác không hoàn thành cho đến khi tôi nhấp OK.

Trả lời

3

Cuối cùng, tôi không tìm thấy cách nào tốt hơn để hiển thị thông báo hơn là thông qua tệp init.ps1.
Tôi cũng phát hiện ra rằng init script chỉ chạy nếu Package Manager Console có thể nhìn thấy, điều này không hoàn toàn lý tưởng cho mục đích này, nhưng tôi vẫn không thể tìm thấy gì tốt hơn.

Giới thiệu về cách thông báo cho người dùng, tôi đã tìm thấy một số phương pháp mà tôi đăng ở đây trong trường hợp chúng có thể hữu ích cho người khác.

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. Thật không có gì sai với nó ...
  2. Bạn có thể sử dụng Write-Host để đẩy nó vào quản lý gói giao diện điều khiển.
3

Tôi có một giải pháp giám sát nguồn .net mở được gọi là "Wolfpack" và một trong những plugin cho phép bạn theo dõi các bản cập nhật cho một hoặc nhiều gói NuGet. Bạn cũng có thể theo dõi trên nhiều nguồn cấp dữ liệu.

Có thể hơi quá mức nhưng sẽ thực hiện công việc. Bạn cũng có thể nhận được thông báo qua email, phát triển hoặc cuộn cơ chế thông báo của riêng bạn.

Hướng dẫn cho plugin này có tại đây: http://wolfpackcontrib.codeplex.com/wikipage?title=WolfPack.Contrib.Checks.NuGet&referringTitle=Home