2016-12-02 6 views
5

मैं कोर कोड के साथ एक माइक्रोस्कोप आर्किटेक्चर के साथ काम कर रहा हूं जिसे एक nuget पैकेज के माध्यम से साझा किया जाता है। दुर्लभ-आश अवसरों को छोड़कर यह सब बहुत अच्छा काम करता है कि मुझे अपने कोर न्यूज पैकेजों में से एक को अपडेट करने की आवश्यकता है और फिर नवीनतम के लिए 10+ समाधान भी अपडेट करें। विजुअल स्टूडियो को लोड करने के लिए हमेशा के लिए लेना है, मैं nuget पैकेज प्रबंधक से अद्यतन-पैकेज कमांड चलाने के लिए बस में जाना नहीं चाहता हूं और प्रत्येक को खोलना नहीं चाहता हूं।कमांडलाइन से पैकेज को स्थापित/अपडेट करने के लिए मैं विजुअल स्टूडियो के बाहर nuget पैकेज प्रबंधक का उपयोग कैसे कर सकता हूं?

मैं nuget.exe कमांड लाइन का उपयोग कर में देखा लेकिन स्थापित विकल्प केवल पैकेज को डाउनलोड करता है बजाय यह मेरी परियोजना में स्थापित करें। मैंने विजुअल स्टूडियो के बाहर पैकेज मैनेजर को चलाने के तरीके की खोज करने की कोशिश की है, लेकिन निकटतम चीज this post ढाई साल पहले कह रही थी कि यह एक पुराने लिंक के साथ रोडमैप पर है। मैं इस साइट पर अद्यतनों के लिए पूछने के तरीके से अपरिचित हूं।

किसी को भी अगर वहाँ है कि मैं सिर्फ याद किया nuget में से कुछ सुविधा है पता है? यदि किसी को भी हर समय भयानक विजुअल स्टूडियो लोड समय के बिना इंतजार किए बिना कई समाधानों के लिए एक nuget पैकेज को अद्यतन करने के किसी भी वैकल्पिक तरीके से पता चलता है?

+0

कैसे nuget cli के बारे में? https://docs.nuget.org/ndocs/tools/nuget.exe-cli-reference एक जवाब के लिए बहुत छोटा: पी – TigOldBitties

+2

कर एक "स्थापित nuget My.Nuget.Package" केवल मेरे समाधान के संकुल/फ़ोल्डर में डाउनलोड करता है। यह वास्तव में संकुल.जेसन फ़ाइल में उस पैकेज के किसी भी उपयोग को अद्यतन नहीं करता है और न ही csproj फ़ाइल में संकेतों को अद्यतन करता है। उन 2 फ़ाइलों को मैन्युअल रूप से अद्यतन करते समय दृश्य स्टूडियो खोलने से तेज़ हो सकता है, यह थोड़ा और त्रुटि प्रवण है (और मुझे त्रुटियां करने के लिए जाना जाता है)। –

+1

एक साधारण वीएस शॉर्टकट क्यों है जो वीएस के बाहर फ़ाइलों को इतना हास्यास्पद बनाता है? "nuget.exe इंस्टॉल करें" और अधिक विशेष रूप से "nuget.exe अद्यतन" मुझे वहां से अधिकतर तरीके से प्राप्त करें। वास्तव में केवल एकमात्र चीज़ "install" कमांड के लिए संकुल.config/*। Csproj फ़ाइल में प्रविष्टि जोड़ने के लिए है और * .csproj फ़ाइल में हिंटपाथ को अद्यतन करने के लिए "अद्यतन" कमांड के लिए है। मैं आदेश चलाने के लिए एक त्वरित स्क्रिप्ट कर सकता हूं और जो चाहता हूं वह कर सकता हूं, लेकिन मुझे लगा कि यह अब तक हल हो गई समस्या होनी चाहिए और इसके तुरंत समाधान नहीं मिलने के बाद मैंने सोचा कि मैं इस पर आने वाले किसी और के लिए पूछ सकता हूं। –

उत्तर

5

मैं अपने समस्या को हल करने के लिए एक त्वरित powershell स्क्रिप्ट लिखने समाप्त हो गया। यहां यह किसी और को दिलचस्पी है:

param(
    [Parameter(Mandatory=$true)]$package, 
    $solution = (Get-Item *.sln), 
    $nuget = "nuget.exe" 
) 

& $nuget update "$solution" -Id "$package" 

$sln = Get-Content $solution 
[regex]$regex = 'Project\("{.*?}"\) = ".*?", "(.*?\.csproj)", "{.*?}"' 
$csprojs = $sln | Select-String $regex -AllMatches | 
        % {$_.Matches} | 
        % {$_.Groups[1].Value} 

Foreach ($csproj_path in $csprojs) { 
    $csproj_path = Get-Item $csproj_path 
    Write-Host "Updating csproj: $csproj_path" 

    [xml]$csproj = Get-Content $csproj_path 
    Push-Location (Get-Item $csproj_path).Directory 
    $reference = $csproj.Project.ItemGroup.Reference | ? {$_.Include -like "$package,*"} 

    $old_include = [string]$reference.Include 
    $old_hintpath = [string]$reference.HintPath 
    $old_version = $old_include | Select-String 'Version=([\d\.]+?),' | 
            % {$_.Matches} | 
            % {$_.Groups[1].Value} 

    $all_packages = Get-ChildItem $old_hintpath.Substring(0, $old_hintpath.IndexOf($package)) 
    $new_package_dir = $all_packages | ? {$_.Name -like "$package.[0-9.]*"} | 
             ? {$_.Name -notlike "$package.$old_version"} | 
             Select -First 1 
    $new_version = $new_package_dir | Select-String "$package.([\d\.]+)" | 
            % {$_.Matches} | 
            % {$_.Groups[1].Value} 

    $dll = Get-ChildItem -Path $new_package_dir.FullName -Recurse -Include *.dll | Select -First 1 
    $reference.HintPath = [string](Get-Item $dll.FullName | Resolve-Path -Relative) 
    $reference.Include = $reference.Include.Replace("Version=$old_version","Version=$new_version") 

    Pop-Location 
    $csproj.Save($csproj_path) 
} 
+0

अच्छा, अच्छा लग रहा है। – TigOldBitties

+0

@ पॉल मिला यहां अपना समाधान साझा करने के लिए धन्यवाद। कृपया अपना उत्तर चिह्नित करें जो अन्य समुदायों के लिए लाभकारी है जिनके पास एक ही समस्या है। –

+0

चेतावनी! यह असेंबली बाध्यकारी रीडायरेक्ट को संबोधित नहीं करता है। यदि आपके पास प्रोजेक्ट में विवादित ट्रांजिटिव निर्भरताएं हैं तो आपको बाध्यकारी रीडायरेक्ट को रीफ्रेश करने की आवश्यकता होगी। https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions – bartonm

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