Laden...

AssemblyVersion auslesen

Erstellt von Bossi vor 14 Jahren Letzter Beitrag vor 14 Jahren 5.754 Views
B
Bossi Themenstarter:in
28 Beiträge seit 2009
vor 14 Jahren
AssemblyVersion auslesen

Hi,

ich bin noch neu in C# aber ich hoffe ich kann mein Problem so gut wie möglich schildern 😃 also:
Ich Versuche die Inforamtionen die in der Assembly meines Projektes(Versionsnummer, Copyright etc.) auszulesen und will mir hierfür eine eigene Klasse schreiben.
Ich habe schon ziemlich viel rumgesucht und bin dann auf diese Seite hier gestoßen (http://www.programmersheaven.com/mb/csharp/281254/281254/how-to-use-assemblyinfo/)
also ich habe das in etwa so gemacht wie es da steht, nur ein wenig abgeändert damit ich es eben in meiner kleinen Klasse anwenden kann, diese sieht zZ so aus:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace OutlookImport
{
    class VerInfo
    {
        private AssemblyAlgorithmIdAttribute algID;
        private AssemblyCompanyAttribute comp;
        private AssemblyConfigurationAttribute conf;
        private AssemblyCopyrightAttribute copyright;
        private AssemblyCultureAttribute culture;
        private AssemblyDefaultAliasAttribute defAlias;
        private AssemblyDelaySignAttribute delSign;
        private AssemblyDescriptionAttribute description;
        private AssemblyFileVersionAttribute fileVersion;
        private AssemblyFlagsAttribute flags;
        private AssemblyInformationalVersionAttribute infVersion;
        private AssemblyKeyFileAttribute keyfile;
        private AssemblyKeyNameAttribute keyname;
        private AssemblyProductAttribute product;
        private AssemblyTitleAttribute title;
        private AssemblyTrademarkAttribute trademark;
        private AssemblyVersionAttribute version = new AssemblyVersionAttribute;

        public VerInfo()
        {
            Assembly asm = Assembly.GetExecutingAssembly();

            // Get Algorithm ID
            algID = (AssemblyAlgorithmIdAttribute)Attribute.GetCustomAttribute(
                                                  asm, typeof(AssemblyAlgorithmIdAttribute));
            // Get Company
            comp = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(
                                             asm, typeof(AssemblyCompanyAttribute));

            // Get Configuration
            conf = (AssemblyConfigurationAttribute)Attribute.GetCustomAttribute(
                                                   asm, typeof(AssemblyConfigurationAttribute));

            // Get Copyright
            copyright = (AssemblyCopyrightAttribute)Attribute.GetCustomAttribute(
                                                    asm, typeof(AssemblyCopyrightAttribute));

            // Get Culture
            culture = (AssemblyCultureAttribute)Attribute.GetCustomAttribute(
                                                asm, typeof(AssemblyCultureAttribute));

            // Get Default Alias
            defAlias = (AssemblyDefaultAliasAttribute)Attribute.GetCustomAttribute(
                                                      asm, typeof(AssemblyDefaultAliasAttribute));
            // Get Delay Sign
            delSign = (AssemblyDelaySignAttribute)Attribute.GetCustomAttribute(
                                                  asm, typeof(AssemblyDelaySignAttribute));

            // Get Description
            description = (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
                                                   asm, typeof(AssemblyDescriptionAttribute));

            // Get Fileversion
            fileVersion = (AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(
                                                        asm, typeof(AssemblyFileVersionAttribute));

            // Get Flags
            flags = (AssemblyFlagsAttribute)Attribute.GetCustomAttribute(
                                            asm, typeof(AssemblyFlagsAttribute));

            // Get Informational Version
            infVersion = (AssemblyInformationalVersionAttribute)Attribute.GetCustomAttribute(
                                                                asm, typeof(AssemblyInformationalVersionAttribute));
            //Get Keyfile
            keyfile = (AssemblyKeyFileAttribute)Attribute.GetCustomAttribute(
                                                asm, typeof(AssemblyKeyFileAttribute));

            // Get Keyname
            keyname = (AssemblyKeyNameAttribute)Attribute.GetCustomAttribute(
                                                asm, typeof(AssemblyKeyNameAttribute));

            // Get Product
            product = (AssemblyProductAttribute)Attribute.GetCustomAttribute(
                                                asm, typeof(AssemblyProductAttribute));

            // Get Title
            title = (AssemblyTitleAttribute)Attribute.GetCustomAttribute(
                                               asm, typeof(AssemblyTitleAttribute));

            // Get Trademark
            trademark = (AssemblyTrademarkAttribute)Attribute.GetCustomAttribute(
                                                    asm, typeof(AssemblyTrademarkAttribute));

            // Get Version
            AssemblyVersionAttribute version = (AssemblyVersionAttribute)Attribute.GetCustomAttribute(
                                                asm, typeof(AssemblyVersionAttribute));        
        }

        /// <summary>
        /// Gibt den Hashalgorithmus aus dem Inhalt eines Assemblymanifests zurück;
        /// </summary>
        public uint AlgorithmID
        {
            get
            {
                return algID.AlgorithmId;
            }
        }

        /// <summary>
        /// Gibt Informationen über den Firmennamen zurück
        /// </summary>
        public String Company
        {
            get
            {
                return comp.Company;
            }
        }

        /// <summary>
        /// Gibt Informationen über die Assemblykonfiguration zurück
        /// </summary>
        public String Configuration
        {
            get
            {
                return conf.Configuration;
            }
        }

        /// <summary>
        /// Gibt Informationen über das Copyright zurück
        /// </summary>
        public String Copyright
        {
            get
            {
                return copyright.Copyright;
            }
        }

        /// <summary>
        /// Gibt die von der Assembly untersützten Kultur zurück
        /// </summary>
        public String Culture
        {
            get
            {
                return culture.Culture;
            }
        }

        /// <summary>
        /// Gibt Informationen über den Standardalias zurück
        /// </summary>
        public String DefaultAlias
        {
            get
            {
                return defAlias.DefaultAlias;
            }
        }

        /// <summary>
        /// Gibt einen Wert zurück, der den Zustand des Attributs beschreibt
        /// </summary>
        public bool DelaySign
        {
            get
            {
                return delSign.DelaySign;
            }
        }

        /// <summary>
        /// Gibt Informationen über die Assemblybeschreibung zurück
        /// </summary>
        public String Description
        {
            get
            {
                return description.Description;
            }
        }

        /// <summary>
        /// Gibt den Namen der Dateiversionsressource zurück
        /// </summary>
        public String FileVersion
        {
            get
            {
                return fileVersion.Version;
            }
        }

        /// <summary>
        /// Gibt den Wert der Kombinationen der Flags zurück
        /// </summary>
        public int Flags
        {
            get
            {
                return flags.AssemblyFlags;
            }
        }

        /// <summary>
        /// Gibt Versionsinformationen zurück
        /// </summary>
        public String InformationalVersion
        {
            get
            {
                return infVersion.InformationalVersion;
            }
        }

        /// <summary>
        /// Gibt den Namen der Datei zurück die das Schlüsselpaar zum generieren eines starken Namens für die mit
        /// Atributen versehene Assembly enthält
        /// </summary>
        public String KeyFile
        {
            get
            {
                return keyfile.KeyFile;
            }
        }

        /// <summary>
        /// Gibt den Namen des Containers zurück der das Schlüsselpaar zum generieren eines starken Namens für
        /// die Assembly erhält
        /// </summary>
        public String KeyName
        {
            get
            {
                return keyname.KeyName;
            }
        }

        /// <summary>
        /// Gibt Informationen über den Produktnamen zurück
        /// </summary>
        public String Product
        {
            get
            {
                return product.Product;
            }
        }

        /// <summary>
        /// Gibt den Titel der Assembly zurück
        /// </summary>
        public String Title
        {
            get
            {
                return title.Title;
            }
        }

        /// <summary>
        /// Gibt den Namen der eingetragenen Marke zurück
        /// </summary>
        public String Trademark
        {
            get
            {
                return trademark.Trademark;
            }
        }

        /// <summary>
        /// Gibt die Versionsnummer der Assembly zurück
        /// </summary>
        public String Version
        {
            get
            {
                return version.Version;
            }
        }


    }
}

Ist hoffentlich nicht zu lang 😄

Bitte beachtet nur diesen kleinen Ausschnitt, da ich zZ auch nur mit diesem Teste.


            // Get Version
            AssemblyVersionAttribute version = (AssemblyVersionAttribute)Attribute.GetCustomAttribute(
                                                asm, typeof(AssemblyVersionAttribute)); 

Auf jeden fall versuche ich dann so ein Objekt meiner Klasse VerInfo zu erstellen und auf den Wert in version zuzugreifen:


        private void button1_Click(object sender, EventArgs e)
        {
            VerInfo test = new VerInfo();

            label1.Text = test.Version;
        }

Aber ich bekomme eine Fehlermeldung wenn ich auf den Button klicke:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Hmm, nur woran liegt das jetzt? Erstelle ich das Objekt meiner Klasse flasch, oder kann innerhalb meiner Klasse was nicht richtig erstellt werden? Mache ich vielleicht einen koomplett grundlegenden Fehler oder bin ich komplett auf dem Holzpfad? Hilfe butte =(

C
63 Beiträge seit 2010
vor 14 Jahren

Hey,

Das kommt einfach daher, dass

(AssemblyVersionAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyVersionAttribute));

null zurückliefert. Sprich keine Instanz. Warum kann ich dir nicht sagen tut mir Leid, damit kenne ich mich nicht aus. Das könntest du immer abfangen(z.B. mit einem kurzen if) ob denn überhaupt eine Instanz existiert sprich das ganzen ungleich null ist. Ich denke es liegt einfach daran das die Version einfach nicht bekannt ist/ausgelesen werden kann(bei mir funktioniert nur das auslesen von Product-.-).

Mfg Campac

T
381 Beiträge seit 2009
vor 14 Jahren

Ansonsten schau dir an wie du im Debugger Breakpoints setzt und den Quellcode schritt für Schritt ausführen lässt, dann hilft es manchmal noch dinge in Variablen zu schrieben bevor man sie verwendet. Dann sieht man im Debugger schnell das die Variable nach Zuweisung noch null ist, oder auch vorher das die Property null zurück gibt.

4.938 Beiträge seit 2008
vor 14 Jahren

Der Hauptfehler ist, daß eine lokale Variable gleichen Namens verwendet wird:


AssemblyVersionAttribute version = ...

statt wie bei den anderen Zuweisungen die Membervariable zu beschreiben.

Nichtsdestotrotz sollte man dann beim Zugriff vorher auf null prüfen...

C
63 Beiträge seit 2010
vor 14 Jahren

Der Hauptfehler ist, daß eine lokale Variable gleichen Namens verwendet wird:

  
AssemblyVersionAttribute version = ...  
  

Nja ich bin davon ausgegangen das das ne flüchtige Idee war die nich funktioniert hat aber noch im Quelltext is^^

Gelöschter Account
vor 14 Jahren

ich weiss nicht was du für eine ide verwendest

aber leg mal ein neues windows forms projekt an.
dann hinzuügen / about box

und schau dir den code der about box an.