2017-01-23 27 views
7

Mamy aplikację .Net, która używa ClickOnce do automatycznej aktualizacji. Problem z Click Once polega jednak na tym, że wszystkie zestawy otrzymują aktualizacje, niezależnie od tego, czy w projekcie wystąpią jakieś zmiany, czy też nie. Zastanawiam się, aby zaktualizować ręcznie tylko zmienionych bibliotek dll do poprzedniego opublikowanego folderu ClickOnce i aktualizowania pliku manifestu przy użyciu MageUI.exe. Zastanawiam się również, aby zwiększała liczbę zmontowanych zespołów, abyśmy mogli śledzić, które złożeń uległy zmianie, patrząc na folder pamięci podręcznej użytkownika, w którym zainstalowana jest aplikacja ClickOnce. Chciałbym wiedzieć, czy jest to podejście dopuszczalne? Dzięki.Konserwacja wersji zespołu w ClickOnce?

+0

Brzmi jak problem czekający na zdarzenie, jeśli mnie zapytasz. Co się stanie, jeśli jeden klient przegapi określoną aktualizację "pomiędzy". Otrzyma nową wersję, ale może nie zawierać niektórych zmian wprowadzonych w poprzedniej wersji, których nie otrzymał. – user1429080

+0

Tak więc, po kliknięciu raz instalacji sprawdzimy poprawną wersję # wszystkich bibliotek dll. Tak więc, jeśli aktualizacja 1 ma bibliotekę dll z wersją # 1.1.1.1 i aktualizacją 2 ma inną bibliotekę dll w wersji 1.1.1.2, to zaktualizuj 3 kliknięcia, gdy instalacja powinna mieć bibliotekę dll 1 z wersją 1.1.1.1 i biblioteką dll 2 z wersją 1.1.1.2 ze zmianami, które zostaną wprowadzone w aktualizacji 3. W rzeczywistości najnowsze wydanie jednego kliknięcia byłoby zaktualizowane, aby dodać przyrostowe biblioteki dll za pomocą interfejsu użytkownika magów, a wszyscy klienci otrzymaliby tę samą wersję, więc jeśli klient jest w starszej wersji, on również dostanie zaktualizowany do najnowszego. –

+0

Ale czy to nie oznacza, że ​​każde wydanie będzie musiało mieć wszystko we wszystkich poprzednich wydaniach + zmiany w bieżącej wersji? Co oznacza, że ​​każde wydanie będzie "grubsze", dopóki w pewnym momencie kolejne wydanie nie będzie musiało zawierać wszystkiego?W każdym razie, o ile mogę powiedzieć, jedynym sposobem na wsparcie aktualizacji z * dowolnej * starej wersji do bieżącej wersji jest uwzględnienie wszystkiego w każdym wydaniu. Jeśli masz ograniczoną liczbę użytkowników i jesteś w stanie kontrolować ich regularną aktualizację, to może uda się to zrobić do pracy ... – user1429080

Odpowiedz

4

Myślę, że to nie jest konieczne. Choć dialogowe aktualizacji dostarczanych przez ClickOnce nie powiedzieć, tak, ClickOnce nie będą pobierać pliki, gdy spełnione są następujące warunki: hash

  • pliku jest taka sama
  • datownik pliku jest taka sama.
  • Dla zespołów, może być konieczne silne nazwać je

Zamiast będzie skopiować pliki z poprzedniej wersji.

Więc jeśli użyjesz silnych nazw i nie odbudujesz złożeń, gdy się nie zmienią, ClickOnce powinien zrobić dokładnie to, co chcesz.

Zobacz odniesienia dla here i here.

Here jest oficjalnym źródłem mówiąc

Podczas aktualizowania aplikacji ClickOnce nie pobiera wszystkich plików do nowej wersji aplikacji, chyba że pliki zostały zmienione. Zamiast tego porównuje haszowane podpisy plików określonych w manifeście aplikacji dla bieżącej aplikacji z sygnaturami w manifeście dla nowej wersji. Jeśli sygnatury pliku są różne, ClickOnce pobiera nową wersję. Jeśli podpisy są zgodne, plik nie zmienił się z jednej wersji do drugiej. W takim przypadku ClickOnce skopiuje istniejący plik i użyje go w nowej wersji aplikacji. Takie podejście uniemożliwia ClickOnce ponowne pobranie całej aplikacji, nawet jeśli zmieniono tylko jeden lub dwa pliki.

+0

Tak, to prawda, ale gdy rozwiązanie zostanie skompilowane, wszystkie manifesty zmian złożenia nie mają znaczenia są w nim jakiekolwiek zmiany kodu, czy też nie. –

+0

Tak, masz rację. Będziesz musiał umieścić projekty w różnych rozwiązaniach i ręcznie aktualizować odniesienia zespołów w twoim "głównym" projekcie. Zgadzam się, że jest to znacznie mniej wygodne niż posiadanie ich wszystkich w jednym rozwiązaniu. Ale nadal IMO jest znacznie lepsze niż próba zmuszenia ClickOnce do częściowej aktualizacji, gdy zmienią się sygnatury skrótu. – wkl

+0

Dla naszej aplikacji musieliśmy również ustawić flagę Full-trust application w ustawieniach projektu dla częściowej aktualizacji dll, nie tylko silnie nazywać – VMAtm

Powiązane problemy