2012-06-15 16 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

मैं एक खुला स्रोत .net निगरानी समाधान "Wolfpack" और प्लग इन में से एक आप एक या अधिक NuGet पैकेज को अद्यतन के लिए नजर रखने के लिए अनुमति देता है कहा जाता है। आप कई फीड में भी ट्रैक कर सकते हैं।

थोड़ा अधिक हो सकता है लेकिन यह काम करेगा। आप ईमेल के माध्यम से अधिसूचित भी हो सकते हैं, अपनी खुद की अधिसूचना तंत्र को बढ़ा सकते हैं या रोल कर सकते हैं।

इस प्लगइन के लिए निर्देश यहां हैं: http://wolfpackcontrib.codeplex.com/wikipage?title=WolfPack.Contrib.Checks.NuGet&referringTitle=Home

संबंधित मुद्दे