AssemblyVersion per Code setzen



  • Hallo,

    ich scheitere daran die AssemblyVersion per Code festzulegen.

    Ich bekomme immer die Meldung:

    The expression being assigned to 'LibraryHelper.CurrentVersion' must be constant	10
    

    Wenn ich es stat const als static readonly kennzeichne, dann funktioniert es ebenfalls nicht,
    weil dann die Meldung von der AssemblyInfo.cs kommt, dass der Ausdruck const sein muss.

    Das muss doch möglich sein. Alle Informationen die ich hier Abfrage stehen zur Kompilierzeit fest. Mir ist klar, dass es das Problem ist, dass der Compiler dies nicht weiß, aber ich muss es ihm doch irgendwie mitteilen können?!

    internal static class LibraryHelper
    {
        internal static int MajorVersion = 1;
        internal const string CurrentVersion = _BuildVersionNUmber();
    
        private static string _BuildVersionNUmber()
        {
            int modules, classes, methods = 0;
    
            Assembly thisAssembly = Assembly.GetExecutingAssembly();
    
            modules = thisAssembly.GetModules().Length;
    
            Type[] exportedTypes = thisAssembly.GetExportedTypes();
            classes = exportedTypes.Length;
    
            foreach (Type type in exportedTypes)
            {
                methods += type.GetMethods().Length;
            }
    
            return string.Format("{0}.{1}.{2}.{3}", MajorVersion, modules, classes, methods);
        }
    
        static LibraryHelper()
        {
    
        }
    }
    


  • Hast du versucht, CurrentVersion readonly zu machen und im statischen Konstruktor zuzuweisen?



  • hwj schrieb:

    Hast du versucht, CurrentVersion readonly zu machen und im statischen Konstruktor zuzuweisen?

    Ja, habe ich.

    An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type	35
    


  • Achso, du willst das AssemblyVersion Attribut damit befüllen?
    Das kann doch allein deshalb schon nicht gehen, weil das Teil des strong name eines Assemblys ist. 😕



  • Das ist ne Konstante deine Currentversion. Aus deiner Funktion kommt aber kein Konstanter Wert deshalb der Fehler.

    So wird ein Schuh draus:

    internal static readonly string CurrentVersion = _BuildVersionNUmber();
    


  • Firefighter schrieb:

    So wird ein Schuh draus:

    internal static readonly string CurrentVersion = _BuildVersionNUmber();
    

    Nein, so hatte ich das auch schon - selbr Fehler. Ist übrigens nicht anderes als dein Vorredner bereits sagte (spielt keine Rolle ob im static Konstruktor oder hier im Code).



  • FrEEzE2046 schrieb:

    Firefighter schrieb:

    So wird ein Schuh draus:

    internal static readonly string CurrentVersion = _BuildVersionNUmber();
    

    Nein, so hatte ich das auch schon - selbr Fehler. Ist übrigens nicht anderes als dein Vorredner bereits sagte (spielt keine Rolle ob im static Konstruktor oder hier im Code).

    Komisch bei mir Compiliert es ohne Probleme.

    internal static class LibraryHelper
        {
            internal static int MajorVersion = 1;
            internal static readonly string CurrentVersion = _BuildVersionNUmber();
    
            private static string _BuildVersionNUmber()
            {
                int modules, classes, methods = 0;
    
                Assembly thisAssembly = Assembly.GetExecutingAssembly();
    
                modules = thisAssembly.GetModules().Length;
    
                Type[] exportedTypes = thisAssembly.GetExportedTypes();
                classes = exportedTypes.Length;
    
                foreach (Type type in exportedTypes)
                {
                    methods += type.GetMethods().Length;
                }
    
                return string.Format("{0}.{1}.{2}.{3}", MajorVersion, modules, classes, methods);
            }
    
            static LibraryHelper()
            {
    
            }
        }
    


  • Firefighter schrieb:

    Komisch bei mir Compiliert es ohne Probleme.

    Nun, der Code kompiliert bei mir natürlich auch ohne Probleme. Aber glaubst du wirklich ich will die AssemblyVersion per Code bilden und dann nicht setzen?

    Hieran scheiterts dann:

    [assembly: AssemblyVersion(LibraryHelper.CurrentVersion)]
    


  • Hallo Freeze,

    die Fehlermeldung ist doch eindeutig:

    An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

    Du kannst keine Methodenaufrufe dort hinterlegen (egal für welches Attribut)!



  • Th69 schrieb:

    die Fehlermeldung ist doch eindeutig:
    Du kannst keine Methodenaufrufe dort hinterlegen (egal für welches Attribut)!

    😉 Natürlich ist die Fehlermeldung eindeutig. Aber evtl. gibt es ja einen Weg das ganze dennoch umzusetzen. Per Pre-Build-Script etc.



  • Vllt. kannst du dich ja hiervon http://www.mycsharp.de/wbb2/thread.php?threadid=84612 inspirieren lassen...


Anmelden zum Antworten