Dziękuję za pytanie - więc nie jestem sam. Dużo czasu poświęcałem zapewnieniu, że wszystkie projekty w moim rozwiązaniu używają tej samej wersji pakietu. Interfejs użytkownika NuGet (a także interfejs wiersza poleceń) również przyczynia się do posiadania różnych wersji wśród projektów w ramach rozwiązania. W szczególności, gdy do rozwiązania dodaje się nowy projekt i pakiet X zostanie dodany do nowego projektu, NuGet jest zbyt chciwy, aby pobrać najnowszą wersję z nuget.org zamiast najpierw użyć wersji lokalnej, która byłaby lepszą obsługą domyślną .
Całkowicie zgadzam się z tobą, że NuGet powinien ostrzegać, jeśli różne wersje pakietu są używane w rozwiązaniu. I powinno to pomóc uniknąć tego i naprawić taki labirynt wersji.
Najlepszym znalazłem zrobić to wyliczyć wszystkie pliki w folderze packages.config roztworze (swoje projekty-root), które wyglądają jak
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net451" />
...
</packages>
następnie sortowania XML węzłów id i analizowanie numery wersji.
Jeśli wystąpi którykolwiek pakiet z różnymi numerami wersji, dzięki czemu wszyscy równi, a następnie uruchomienie komendy Nuget
Update-Package -ProjectName 'acme.lab.project' -Reinstall
powinien naprawić błędne wersje pakietów.
(Od Nuget jest open source z pewnością byłoby fajne rzeczy, aby uzyskać nasze ręce brudne i wdrożenie brakującą użyteczność unikania wersja konfliktu.)
Dobrym punktem wyjścia jest 'Zarządzanie Nuget Pakiety dla dialogu Solution' w Visual Studio. Wyświetla listę pakietów dla każdej wersji, dzięki czemu można łatwo zauważyć wiele wersji. Nie zapewnia to jednak mechanizmu egzekwowania tego. – theDmi
Czy rozważałeś zamiast tego używanie Paketu (https://fsprojects.github.io/Paket/) jako klienta nuget? Nadal możesz używać tych samych starych serwerów nuget, ale otrzymujesz nowoczesny, dobrze zaprojektowany klient zamiast tego, który domyślnie będzie wymuszał tę samą zależność od wersji w twoim rozwiązaniu (jak również daje mnóstwo innych wspaniałych funkcji, których domyślny klient nuget nie będzie działał dać ci). – wasatz