Jak wyświetlić numer wersji ClickOnce w formularzach Windows

Mam aplikację Windows forms, która jest rozmieszczona w dwóch różnych lokalizacjach.

  • Intranet-ClickOnce
  • Internet - zainstalowany na farmie citrix przez Instalator Windows

Wyświetlam Numer wersji click-po uruchomieniu wersji ApplicationDeployment.IsNetworkDeployed.

if (ApplicationDeployment.IsNetworkDeployed)
        return ApplicationDeployment.CurrentDeployment.CurrentVersion;

Ale dla aplikacji bez kliknięć, nie jestem pewien, jak odzyskać wersję clickonce, chyba że koduję na twardo numer wersji w informacji o montażu.

Czy istnieje automatyczny sposób pobierania Numer wersji ClickOnce dla wersji wdrożonej bez clickonce?

Author: Dawid Wekwejt, 2009-07-08

9 answers

Nie wierzę, że jest jakiś sposób. Wierzę, że informacje ClickOnce pochodzą z manifestu, który będzie dostępny tylko w wdrożeniu ClickOnce. Myślę, że twarde kodowanie numeru wersji jest najlepszą opcją.

 10
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-08 13:40:55
  1. Dodaj odniesienie do zestawu System.Deployment do swojego projektu.

  2. Importuj przestrzeń nazw w pliku klasy:

    VB.NET:

    Imports System.Deployment
    

    C#:

    using System.Deployment;
    
  3. Pobranie wersji ClickOnce z właściwości CurrentVersion.

    Bieżącą wersję można uzyskać z właściwości ApplicationDeployment.CurrentDeployment.CurrentVersion. To zwraca System.Version obiekt.

    Uwaga (z MSDN):

    CurrentVersion Wola różnią się od UpdatedVersion jeśli nowa aktualizacja ma został zainstalowany, ale nie wywołałeś jeszcze Restart. Jeśli rozmieszczenie manifest jest skonfigurowany do wykonywania automatycznych aktualizacji, można porównać te dwie wartości określają, czy należy ponownie uruchomić aplikację.

    Uwaga: właściwość statyczna CurrentDeployment jest ważna tylko wtedy, gdy aplikacja została wdrożona za pomocą ClickOnce. Dlatego przed uzyskaniem dostępu do tej właściwości należy najpierw sprawdzić właściwość ApplicationDeployment.IsNetworkDeployed. Zawsze zwróci fałszywą w środowisku debugowania.

    VB.NET:

    Dim myVersion as Version
    
    If ApplicationDeployment.IsNetworkDeployed Then
       myVersion = ApplicationDeployment.CurrentDeployment.CurrentVersion
    End If
    

    C#:

    Version myVersion;
    
    if (ApplicationDeployment.IsNetworkDeployed)
       myVersion = ApplicationDeployment.CurrentDeployment.CurrentVersion;
    
  4. Użyj obiektu Version:

    Od tej chwili możesz użyć informacji o wersji w etykiecie, powiedzmy na formularzu" O", w ten sposób:

    VB.NET:

    versionLabel.Text = String.Concat("ClickOnce published Version: v", myVersion)
    

    C#:

    versionLabel.Text = string.Concat("ClickOnce published Version: v", myVersion);
    

    (Version obiekty są formatowane jako czteroczęściowy numer (dur.drobne.buduj.revision).)

 85
Author: cpg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-21 08:38:50

Chciałbym po prostu zrobić wersję assembly głównego montażu taką samą jak Wersja CLickOnce za każdym razem, gdy wydajesz nową wersję. Następnie, gdy działa jako aplikacja bez kliknięć, wystarczy użyć Reflection, aby wybrać wersję złożenia.

 8
Author: RobinDotNet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-21 10:46:23

Wypróbuj weryfikację wątku:

if (ApplicationDeployment.IsNetworkDeployed)
        {
            if (ApplicationDeployment.CurrentDeployment.CurrentVersion != ApplicationDeployment.CurrentDeployment.UpdatedVersion)
            {
                Application.ExitThread();
                Application.Restart();
            }
        }
 3
Author: Vitor Guerreiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-11 15:56:10

Hard code, or... Śledź swoje wersje (plik, montaż, wdrożenie) w bazie danych. Wykonaj połączenie z bazą danych za pomocą zestawu i uzyskaj wersję wdrożenia.

Zakłada to, że zwiększasz swoje wersje w logiczny sposób, tak że każdy typ wersji ma związek. To dużo pracy jak na tak mały problem. Osobiście wybrałbym rozwiązanie Jareda; chociaż nienawidzę twardego kodowania czegokolwiek.

 2
Author: Billy Coover,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-08 14:16:30

Nie, żeby to miało znaczenie trzy lata później, ale skończyło się na tym, że analizowałem plik manifestu za pomocą czytnika xml.

 2
Author: gev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-05 22:12:41

Aby rozszerzyć rozwiązanie RobinDotNet:

Protip: możesz automatycznie uruchomić program lub skrypt, aby zrobić to za Ciebie z wewnątrz .plik CSPROJ Konfiguracja MSBuild za każdym razem, gdy budujesz. Zrobiłem to dla jednej aplikacji internetowej, którą obecnie prowadzę, wykonując skrypt powłoki Cygwin bash, aby wykonać pewną kontrolę wersji h4x, aby obliczyć numer wersji z historii Gita, a następnie wstępnie przetworzyć plik źródłowy informacji o montażu skompilowany do wyjścia kompilacji.

Podobny można to zrobić, aby przetworzyć Numer wersji ClickOnce z pliku projektu, tj. Project.PropertyGroup.ApplicationRevision i Project.PropertyGroup.ApplicationVersion (aczkolwiek Nie wiem, co oznacza ciąg wersji, ale możesz zgadywać, aż się zepsuje i naprawić) i wstawić tę informację o wersji do informacji o złożeniu.

Nie wiem, kiedy zostanie pobrana wersja ClickOnce, ale prawdopodobnie po procesie budowania, więc być może będziesz musiał majstrować z tym rozwiązaniem, aby uzyskać nowy numer skompilowany. chyba jest zawsze /*h4x*/ +1.

Użyłem Cygwina, ponieważ skrypty *nix są o wiele lepsze niż Windows i zinterpretowany kod oszczędza ci kłopotu zzbudowaniem programu pre-build przed zbudowaniem , ale możesz napisać program za pomocą dowolnej technologii (w tym C#/. Net). wiersz poleceń dla pre-procesora znajduje się wewnątrz PreBuildEvent:

<PropertyGroup>
  <PreBuildEvent>
    $(CYGWIN_ROOT)bin\bash.exe --login -c refresh-version
  </PreBuildEvent>
</PropertyGroup>

Jak można sobie wyobrazić, dzieje się to przed etapem budowania, więc można skutecznie przetworzyć kod źródłowy tuż przed / align = "left" / Nie chciałem automatycznie edytować pliku Properties\AssemblyInfo.cs, aby odtworzyć go bezpiecznie, co zrobiłem, to stworzyłem plik Properties\VersionInfo.base.cs, który zawierał szablon tekstowy klasy z informacjami o wersji i był oznaczony jako BuildAction=None w ustawieniach projektu, aby nie został skompilowany z projektem:

using System.Reflection;
using EngiCan.Common.Properties;

[assembly: AssemblyVersion("0.$REVNUM_DIV(100)$.$REVNUM_MOD(100)$.$DIRTY$")]
[assembly: AssemblyRevisionIdentifier("$REVID$")]
Dla uproszczenia/złożoności została użyta bardzo brudna, biedna składnia zastępcza przypominająca zmienne środowiskowe systemu Windows z dodatkiem H4X]}

AssemblyRevisionIdentifierAttribute był Niestandardowy atrybut, który stworzyłem, aby trzymać GIT SHA1, ponieważ jest o wiele bardziej znaczący dla programistów niż a.b.c.D.

Mój program refresh-version skopiowaĺ 'ten plik do Properties\VersionInfo.cs, a nastÄ ™ pnie wykonaĹ' zastÄ ™ powanie informacji o wersji, ktĂłrÄ ... juĹź obliczyĺ '/przetworzyĺ '(uĺźyĺ 'em sed(1) do zastÄ ™ powania, co byĹ' o kolejną korzyĹ " ciÄ ... uĹźycia Cygwina). Properties\VersionInfo.cs został skompilowany do programu. Ten plik może zaczynać się od pustego i należy go zignorować przez system kontroli wersji, ponieważ automatycznie się zmienia, a informacje do wygenerowania są już przechowywane w innym miejscu.

 2
Author: bambams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-25 22:57:13

Używając komponentu build, możesz odczytać wersję click-once z pliku projektu i zapisać ją automatycznie do informacji o złożeniu, aby oba były zsynchronizowane.

 1
Author: Wilhelm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-10 00:57:05

Zrób weryfikację wątku, wstaw kod...

 1
Author: Lg999,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 19:59:58