2016-12-02 17 views
5

Tôi đang làm việc với kiến ​​trúc microservice với mã lõi được chia sẻ qua gói nuget. Điều này tất cả các công trình khá tốt, ngoại trừ những dịp hiếm hoi-ish mà tôi cần phải cập nhật một trong các gói nuget lõi của tôi và sau đó cũng cập nhật 10 + giải pháp mới nhất. Với visual studio mất mãi mãi để tải lên, tôi không muốn phải đi vào và mở từng cái một chỉ để chạy lệnh Update-Package từ trình quản lý gói nuget.Làm cách nào tôi có thể sử dụng Trình quản lý Gói của bên ngoài Visual Studio để cài đặt/cập nhật một gói từ dòng lệnh?

Tôi đã xem xét sử dụng dòng lệnh nuget.exe nhưng tùy chọn cài đặt chỉ tải xuống gói thay vì cài đặt nó vào dự án của tôi. Tôi đã thử tìm cách chạy trình quản lý gói bên ngoài studio trực quan, nhưng điều gần nhất là this post hai năm rưỡi trước đây nói rằng đó là trên lộ trình có liên kết lỗi thời. Tôi cũng không quen với cách yêu cầu cập nhật hoạt động trên trang web này.

Có ai biết nếu có một số tính năng của nuget mà tôi vừa bỏ qua không? Nếu không ai biết về bất kỳ cách thay thế để cập nhật một gói nuget cho nhiều giải pháp mà không cần phải chờ đợi thông qua thời gian tải Visual Studio khủng khiếp mỗi lần?

+0

Làm thế nào về nuget cli? https://docs.nuget.org/ndocs/tools/nuget.exe-cli-reference quá ngắn cho một câu trả lời: P – TigOldBitties

+2

Làm một "nuget install My.Nuget.Package" chỉ tải nó vào gói/thư mục của giải pháp của tôi. Nó không thực sự cập nhật bất kỳ tập quán nào cho gói đó trong tệp packages.json và cũng không cập nhật các đường dẫn gợi ý cho nó trong tệp csproj. Trong khi việc cập nhật 2 tệp đó theo cách thủ công có thể nhanh hơn việc mở cửa phòng thu trực quan thì dễ xảy ra lỗi hơn một chút (và tôi được biết là mắc lỗi). –

+1

Tại sao có một lối tắt VS đơn giản chỉnh sửa các tệp bên ngoài VS rất tỉ mỉ? "cài đặt nuget.exe" và cụ thể hơn "cập nhật nuget.exe" giúp tôi tận dụng tối đa cách đó. Thực sự điều duy nhất còn lại là cho lệnh "install" để thêm một mục trong tệp packages.config/*. Csproj và cho lệnh "update" để cập nhật đường dẫn gợi ý trong tệp * .csproj. Tôi có thể thực hiện một kịch bản nhanh để chạy lệnh và làm những gì tôi muốn, nhưng tôi đã nhận ra đây là một vấn đề được giải quyết ngay bây giờ và sau khi không tìm được giải pháp ngay lập tức cho nó. –

Trả lời

5

Tôi đã kết thúc viết kịch bản PowerShell nhanh để giải quyết vấn đề của mình. Ở đây nó là bất cứ ai khác quan tâm:

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

Đẹp, có vẻ tốt. – TigOldBitties

+0

@Paul Milla Cảm ơn bạn đã chia sẻ giải pháp của mình tại đây. Vui lòng đánh dấu câu trả lời của bạn là lợi ích cho các cộng đồng khác có cùng vấn đề. –

+0

Cảnh báo! Điều này không giải quyết chuyển hướng ràng buộc lắp ráp. Nếu dự án của bạn có các phụ thuộc chuyển tiếp xung đột, bạn vẫn cần phải làm mới chuyển hướng ràng buộc. https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions – bartonm

Các vấn đề liên quan