none
Wieso funktioniert das Auslesen der Versionsnummer nicht RRS feed

  • Frage

  • Hallo,

    ich habe (als Neuling) mal ein bisschen VB.net 2010 programmiert und einen Splashscreen eingebaut. Dazu habe ich die im MS_Beispiel-Code verwendete Technik zum Bestimmen der Versionsnr einfach mal so gelassen:

    Version.Text = System.String.Format(Version.Text, My.Application.Info.Version.Major, My.Application.Info.Version.Minor, My.Application.Info.Version.Build, My.Application.Info.Version.Revision)

    Nur leider tut das nix. Es wird im Splashscreen konsequent 1.0.0.0 angezeigt und die Variable My.Application.Info.Version... enthält auch wirklich nichts anderes. Dabei aber wird die Nummer doch automatisch beim Veröffentlichen hochgezählt und ist auch unter Projekt-> Eigenschaften -> Veröffentlichen als 1.0.1.12 verzeichnet. Aber auf diese Werte wird offenbar nicht zugegriffen.

    Was mache ich falsch?

    Gruß
    Thomas

    Microsoft Visual Studio 2010
    Version 10.0.40219.1 SP1Re
    Windows7-64l

    Montag, 11. Juni 2012 20:16

Antworten

  • Hallo Thomas,

    Ellens Code funktioniert schon, wenn Du ihn entsprechend anwendest. Wenn Deine TextBox version heisst,
    so wäre das:

     version.Text = String.Format(" Version {0}.{1:00} (c) er 2012 build {2} rev {3}", _
                                        My.Application.Info.Version.Major, _
                                        My.Application.Info.Version.Minor, _
                                        My.Application.Info.Version.Build, _
                                        My.Application.Info.Version.Revision)

    Da man das sehr häufig nutzen kann, schau Dir dazu mal an:Kombinierte Formatierung

    zu 2.)
    Click Once Veröffentlichungsversion hat keinen Bezug zur Assembly Version,
    siehe dazu: Versionsnummer abfragen

    Die Veröffentlichungsversionsnummer hat aber für .NET keinerlei Bedeutung.
    Sinnvoll wäre dort, dass Du die Versionsnummer der Anwendung anpasst, wenn Du Änderungen vornimmst.
    Dann hat die Nummer auch Aussagekraft, wenn die Anwendung nicht über ClickOnce Installiert wird.

    Gruß Elmar

    Dienstag, 12. Juni 2012 07:04
    Beantworter

Alle Antworten

  • Natürlich finde ich sofort nach dem Posten (und vorherigem langem Suchen) die eine Antwort: es wird die Assemblyinformation, Projekt -> Eigenschaften -> Anwendung -> [Assemblyinformationen] angezeigt. Die will ich aber nicht, ich will die anderen, denn da muss ich nicht ans Eintragen denken, wozu sind die auch sonst da ?
    Montag, 11. Juni 2012 20:26
  • Hallo Thomas,

    habe Deinen code korrigiert:

           Dim VersionText As String = String.Format(" Version {0}.{1:00} (c) er 2012 build {2} rev {3}", _
                                        My.Application.Info.Version.Major, _
                                        My.Application.Info.Version.Minor, _
                                        My.Application.Info.Version.Build, _
                                        My.Application.Info.Version.Revision)

    Völlig falsche Verwendung der string.format Methode

    Und wenn ganz einfach aussehen soll (ohne Zusatztext) dann so:

       VersionText = My.Application.Info.Version.ToString

    Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010


    Dienstag, 12. Juni 2012 05:52
  • Hallo Ellen, danke.

    Aber

    1) Kann die Verwendung von String.Format nicht dennoch richtig gewesen sein, denn der Code wendete die ja auf eine Textbox "Version" an, also Version.text . In diesem stand dann als Text: Version {0}.{1}.{2}

    2) wie gesagt, der Code ist der, den MS mit VS ausliefert und den man bekommt, wenn man eine Form "Begrüßungsbildschirm" anlegt

    Die entscheidende Frage, wieso die Werte der AssemblyVersionAttribute statt der automatisch hochgezählten Werte der Veröffentlichungsversion verwendet werden, habe ich jetzt eben besser als gestern abend gegoogelt und damit gelöst: Man muss My.Application.Deployment.CurrentVersion nehmen. Die werden nur bei veröffentlichten Versionen sichtbar, sind dann aber die automatisch erzeugten :-)

    Dienstag, 12. Juni 2012 06:43
  • Hallo Thomas,

    Habe den splashscreen aufgerufen.

    Dein code ist doch ok. Die Format Methode hat mehrere Überladungungen:

    http://msdn.microsoft.com/de-de/library/system.string.format(v=VS.80).aspx

    Zu Deiner Frage 2

    Das ist doch in Ordnung so. Die eigentliche Programmversion vergibst Du und nicht das System. Z.B. 2.13 .... 2.14 usw. Das ist die Version an den Kunden. Für interne Zwecke nutzt man dann noch build und revision zur Dokumentation der Entwicklung.

    Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Dienstag, 12. Juni 2012 06:59
  • Hallo Thomas,

    Ellens Code funktioniert schon, wenn Du ihn entsprechend anwendest. Wenn Deine TextBox version heisst,
    so wäre das:

     version.Text = String.Format(" Version {0}.{1:00} (c) er 2012 build {2} rev {3}", _
                                        My.Application.Info.Version.Major, _
                                        My.Application.Info.Version.Minor, _
                                        My.Application.Info.Version.Build, _
                                        My.Application.Info.Version.Revision)

    Da man das sehr häufig nutzen kann, schau Dir dazu mal an:Kombinierte Formatierung

    zu 2.)
    Click Once Veröffentlichungsversion hat keinen Bezug zur Assembly Version,
    siehe dazu: Versionsnummer abfragen

    Die Veröffentlichungsversionsnummer hat aber für .NET keinerlei Bedeutung.
    Sinnvoll wäre dort, dass Du die Versionsnummer der Anwendung anpasst, wenn Du Änderungen vornimmst.
    Dann hat die Nummer auch Aussagekraft, wenn die Anwendung nicht über ClickOnce Installiert wird.

    Gruß Elmar

    Dienstag, 12. Juni 2012 07:04
    Beantworter
  • Hallo Elmar,

    danke für 2.). Deine Ausführliche Erklärung in dem Link lässt mich durchblicken. Auch wenn ich das alles seltsam finde, denn aus den Dialogen geht der Zusammenhang nicht hervor und man liest ja bei jedem Menüpunkt ununterbrochen Hilfen - zumal die ja jetzt im Internet sind und hier auf dem Dorf mit einem langsamen DSL manchmal besonders träge erscheinen ;-)

    zu 1: ich wollte Ellens Code nicht kritisieren, sondern nur hervorheben, dass er von MS ist, also stimmen muss ;-)

    Danke und Gruß

    Thomas

    Dienstag, 12. Juni 2012 07:19
  • Hallo Thomas,

    zu 1: ich wollte Ellens Code nicht kritisieren, sondern nur hervorheben, dass er von MS ist, also stimmen muss ;-)

    bei Microsoft arbeiten Menschen und Menschen sind niemals perfekt, was auch für deren Codebeispiele gilt.
    Somit empfiehlt sich immer ein zweiter Blick, wenn etwas nicht funktioniert.

    Konkreter Problemfall bei dem Beispielcode, den Du verwendet hast:

    Version.Text wird für die Formatanweisung und als Empfänger verwendet,
    so dass der Code nur bei einmaligen Durchlauf funktionieren kann.
    Somit hängt die Verwendung von den Ausführungspfaden des Codes ab -
    was man i. a. vermeiden sollte - beim SplashScreen funktioniert es im konkreten Fall.

    Ich würde hier eine Stringkonstante oder besser eine String-Ressource verwenden,
    anstatt den Eintrag aus dem Formular zu übernehmen.
    Das schützt vor irrtümlicher Änderung und macht den Code unabhängig von Änderungen
    (bzw. man muss dabei weniger nachdenken ;-)

    Gruß Elmar

    Dienstag, 12. Juni 2012 09:19
    Beantworter