Nie można automatycznie zaktualizować pakietu NuGet do najnowszej wersji podczas kompilacji

Mamy dwa oddzielne rozwiązania .NET:

Uruchomienie kompilacji dla pierwszego rozwiązania produkuje nasz produkt końcowy: zbiór bibliotek DLL. Te biblioteki DLL są dostarczane do naszych klientów za pośrednictwem pakietu NuGet.Drugie rozwiązanie służy jako rozwiązanie do testowania produktu: pakiet NuGet jest do niego zainstalowany i jest budowany i wykonywany - dzięki czemu korzysta z naszego produktu dokładnie tak samo, jak robiliby to nasi klienci.

Wyzwaniem jest tutaj sposób, w jaki nasz najnowszy pakiet NuGet zostanie automatycznie zainstalowany w rozwiązaniu testowym produktu, najlepiej podczas tworzenia tego rozwiązania testowego produktu.

Na podstawie pomysłów zpodobne pytanie, Doszedłem tak daleko od konfiguracji rozwiązania testowania produktu:

Najpierw włączyłem Przywracanie pakietów NuGet. Pozwala to całkowicie pozbyć się katalogu „pakietów” z VCS, ponieważ pakiet z wersją zdefiniowaną w pliku packages.config zostanie automatycznie pobrany przez NuGet przed budowaniem.Następnie w Visual Studio dodałem następujące wydarzenie poprzedzające kompilację:$(SolutionDir).nuget\nuget update -prerelease $(ProjectDir)packages.config. To pozwala mi pobrać najnowszą wersję naszego pakietu NuGet podczas kompilacji.

Obecnie używam powyższego scenariusza do uruchamiania lokalnych kompilacji przy użyciu Visual Studio i nienadzorowanych kompilacji przy użyciu TeamCity. Rozwiązanie wydaje się działać w obu scenariuszach od pierwszego wejrzenia, ale w rzeczywistościnie daje oczekiwanego rezultatu: kiedy budowane jest rozwiązanie testowania produktu, wbin katalog Nie mam najnowszej wersji bibliotek DLL, tylko najnowsza wersja-1.

Problem polega na tym, że chociażnuget update polecenie aktualizuje wszystko zgodnie z oczekiwaniami, w tympackages.config i.csproj plik, ichNowa treść nie jest wychwytywany przez kompilację, a więc - jak sądzę -HintPath ustawienia z.csproj plik nadal odzwierciedla stan „przed kompilacją”, dlatego stare biblioteki DLL są kopiowane do plikubin informator. Zakładam.csproj plik jest przetwarzany tylko raz: przed wyzwoleniem zdarzenia poprzedzającego kompilację, a zmiany wprowadzone przez zdarzenie przed kompilacją są ignorowane aż do następnej kompilacji.

Rozważałem następujące rozwiązania:

Podobno pre-build nie jest wystarczający. Gdyby był jeszcze wcześniejszy punkt, mógłbym wstawićnuget update polecenie, moje powyższe rozwiązanie prawdopodobnie zadziała.Czytałem, że mogę przesłonić HintPath-s w pliku .csproj, definiując ReferencePath. Ale wątpię, czy mógłbym łatwo znaleźć właściwą ścieżkę, albo mogłem ustawić ją wystarczająco wcześnie, aby kompilacja ją podniosła.Jako obejście mogłem uruchomić kompilacje dwa razy: zduplikować krok kompilacji dla rozwiązania testowania produktu w TeamCity i zawsze mogę zbudować rozwiązanie dwukrotnie lokalnie w Visual Studio.

Czy ktoś zorientował się, jak automatycznie aktualizować pakiet NuGet do najnowszej wersji podczas kompilacji?

questionAnswers(3)

yourAnswerToTheQuestion