none
Programm an Versionsnummer einer Konfigurationsdatei koppeln

    Allgemeine Diskussion

  • Hallo,

    leider fällt mir kein griffigere Titel ein, der mein Problem klar darstellt. Deshalb versuche ich es mal zu erklären. Mein Programm benutzt mehrere Konfigurationsdateien, die sich von Version zu Version ändern können und somit inkompatibel zu vorherigen Versionen des Programms werden. Um nun zu verhindern, dass das Programm mit zu alten Konfigdateien verwendet wird, hatte ich die Idee den Dateien eine Versionnummer mit zu geben und das Programm checkt ob die Version der Konfigdatei kompatible zum Code ist.

    Dafür benötige ich in den Sourcen die aktuelle Version der Konfigdatei. Um nicht jedesmal die Versionnummer in der Konfigdatei und im Sourcecode hochzuzählen, dachte ich mir man könnte vor dem kompilieren die aktuelle Versionnummer aus der Konfigdatei herauslesen und in den Sourcecode übertragen.

    Ist die mit Visual Studio 2010 Express möglich? und wenn ja wie?

    Danke schon mal für Euere Antworten!

    • Typ geändert Stefan FalzModerator Samstag, 31. März 2018 18:28 Thread inaktiv, keine weitere Aktivität
    Donnerstag, 8. März 2018 13:00

Alle Antworten

  • Hallo,

    versuch mal so:

    // AppDataPath for select the save path of config file
    public enum AppDataPath { Local, Roaming, Common, ExePath };
    
    #region AppDataPath
    /// <summary>
    /// Get Path Local, Roaming, Common or ExePath
    /// </summary>
    /// <param name="appDataPointer"></param>
    /// <returns>pstrFilename</returns>
    public static string GetAppDataPath(AppDataPath appDataPointer)
    {
        string fileName = null;
        try
        {
            switch (appDataPointer)
            {
                case AppDataPath.Local:
                    // C:\users\UserName\AppData\Local\ProductName\ProductName\ProductVersion\ProductName.Config
                    fileName = Application.LocalUserAppDataPath + "\\" + Application.ProductName + ".config";
                    break;
                case AppDataPath.Roaming:
                    // C:\users\UserName\AppData\Roaming\ProductName\ProductName\ProductVersion\ProductName.Config
                    fileName = Application.UserAppDataPath + "\\" + Application.ProductName + ".config";
                    break;
                case AppDataPath.Common:
                    // C:\ProgramData\ProductName\ProductName\ProductVersion\ProductName.Config
                    fileName = Application.CommonAppDataPath + "\\" + Application.ProductName + ".config";
                    break;
                case AppDataPath.ExePath:
                    // ProductSaveDirectory\ProductName.Config, only PortableApps
                    fileName = Path.GetDirectoryName(Application.ExecutablePath) + "\\" + Application.ProductName + ".config";
                    break;
                default: // Roaming
                    fileName = Application.UserAppDataPath + "\\" + Application.ProductName + ".config";
                    break;
            }
            return fileName;
        }
        catch
        {
            return null;
        }
    }
    #endregion

    Gruß Klaus


    Donnerstag, 8. März 2018 13:18
  • Hi,

    ich glaube es ist noch nicht ganz klar geworden was ich möchte. Wenn ich Dein Programm richtig verstehe, sucht es an in Abhängigkeit von AppDataPath nach einer Config Datei und gibt den Pfad zurück.Mein

    Programm kann bereit die Konfigdatei finden und auch einlesen. Allerdings wird das Programm und auch die Konfigdatei ständig erweitert, so dass es zu Fehlern kommt, wenn Progammversion und Konfigdatei Version nicht matchen. Deshalb soll Visual Studio for dem kompilieren die Konfigdatei parsen und die vorhandene Versionsnummer in den Source Code meines Programmes übertragen.

    Beim Start würde das Programm dann die Version der Konfigdatei mit den intern gespeicherten vergleichen.

    Donnerstag, 8. März 2018 13:33
  • Hallo,

    aber mein Code gibt den Speicherort für die Config immer in Abhängigkeit von der Version zurück. Wenn du ihn verwendest, hast du immer Zugriff auf eine Config die von der Programmversion abhängig ist. Die Version deines Programms steht in der AssemblyInfo.cs. ([assembly: AssemblyVersion("1.0.0.0")])
    Das willst du doch?

    // C:\users\UserName\AppData\Roaming\ProductName\ProductName\ProductVersion\ProductName.Config

    Donnerstag, 8. März 2018 14:00
  • Nicht ganz. Die AssemblyVersion Nummer ist doch die Version des Programms. Ich habe ein Konfigdatei die an einem ganz anderen Ort liegt und in dieser Datei soll/ist eine Versionsnummer die ich überprüfen lassen möchte.
    Donnerstag, 8. März 2018 14:21
  • Also nicht die Programmversion!?
    Donnerstag, 8. März 2018 14:36
  • Genau.

    Beispiel:

    Konfig.ini  enthält "Version 1.0"

    Prgramm enthält: Kompatible mit Version 1.1

    Überpruft beim Start: Ist Konfig.ini Version == Version 1.1 --> Nein, Fehler!

    Und bevor die Exe kompiliert wird soll ein Skript o. ähnliches (Precompile) die Version aus der Konfig.ini in den Sourcecode übertragen.

    Donnerstag, 8. März 2018 14:55