Laden...

Programm zum Anpassen der Versionsinfo einer VS-Solution

Erstellt von mabo vor 12 Jahren Letzter Beitrag vor 12 Jahren 4.266 Views
M
mabo Themenstarter:in
334 Beiträge seit 2007
vor 12 Jahren
Programm zum Anpassen der Versionsinfo einer VS-Solution

Mit dieses Programm kann man die AssemblyVersion und AssemblyFileVersion für alle Projekte in einer Solution direkt setzen.

Das Programm sucht per Regex den Pfad zu den einzelnen Projekten in der Solution und sucht dann die Datei AssemblyInfo.cs im Unterverzeichnis Properties. Dann werden die Zeilen, die mit [assembly: AssemblyVersion( und [assembly: AssemblyFileVersion( beginnen ersetzt.

Das Programm ist nicht perfekt, aber es tut was es soll. 😁 Ich hoffe dass es jemand brauche kann. Ich habe es für Solution-Dateien von VS2010 entwickelt, ich weiß nicht ob es für 2003/2005 auch funktioniert.


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace VersionInfoFix
{
    class Program
    {
        // Project\(".*"\) = ".*", "(.*)\\.*",
        static Regex _projectRegex = new Regex("Project\\(\".*\"\\) = \".*\", \"(.*)\\\\.*\",");

        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("Unzureichende Argumente");
                Console.WriteLine("Aufruf: VersionInfoFix [Pfad zur .sln] [Version]");
                Console.ReadLine();
                return;
            }
                
            String filename = args[0];
            if (!filename.EndsWith(".sln"))
            {
                Console.WriteLine("keine .sln angegeben");
                Console.ReadLine();
                return;
            }

            String versionString = args[1];
            Version theVersion = new Version();

            if (!Version.TryParse(versionString, out theVersion))
            {
                Console.WriteLine("Version konnte nicht geparst werden");
                Console.ReadLine();
                return;
            }

            string[] lines = File.ReadAllLines(filename);
            foreach (var line in lines)
            {
                Match m = _projectRegex.Match(line);
                if (!m.Success) continue;
                Group path = m.Groups[1];                
                string assemblyInfoPath = Path.Combine(new FileInfo(filename).DirectoryName, path.Value, "Properties", "AssemblyInfo.cs");
                if (File.Exists(assemblyInfoPath))
                    UpdateAssemblyVersion(assemblyInfoPath, theVersion);
                else
                    Console.WriteLine("Keine AssemblyInfo unter " + assemblyInfoPath + " gefunden!");
            }

            Console.WriteLine("Fertig, Taste drücken.");
            Console.ReadLine();
        }

        private static void UpdateAssemblyVersion(string assemblyInfoPath, Version version)
        {
            string[] lines = File.ReadAllLines(assemblyInfoPath);
            for (int index = 0; index < lines.Length; index++)
            {
                string line = lines[index];
                if (line.StartsWith("[assembly: AssemblyVersion("))
                    lines[index] = "[assembly: AssemblyVersion(\"" + version + "\")]";
                if (line.StartsWith("[assembly: AssemblyFileVersion("))
                    lines[index] = "[assembly: AssemblyFileVersion(\"" + version + "\")]";
            }
            File.WriteAllLines(assemblyInfoPath, lines);
        }
    }
}


Schlagwörter: AssemblyInfo, Version, AssemblyVersion, AssemblyFileVersion

T
64 Beiträge seit 2010
vor 12 Jahren

Hallo,

ich mach das etwas anders.
Ich habe mir ein Projekt "dummy" in der Solution erstellt und geben in jedem Projekt einen Verweis auf dieses Projekt an.
In der Projekt befindet sich nichts außer einer Klasse mit den Constanten für Assembly Version, File Version, Company.
In den andren Projekten geb ich dann nur die Konstante in der AssemblyInfo.cs an.


[assembly: AssemblyCompany(libdummy.Constants.StringCompany)]
[assembly: AssemblyVersion(libdummy.Constants.StringAssemblyVersion)]
[assembly: AssemblyFileVersion(libdummy.Constants.StringAssemblyFileVersion)]

trotzdem danke für das Tool.

Gruß

T
574 Beiträge seit 2008
vor 12 Jahren

Ich habs noch etwas anders:

Ich hab die beiden Version zeilen aus (je)der AssemblyInfo.cs herausgenommen und in eine eigene AssemblyInfo.Version.cs verschoben. In den einzelnen Projekten habe ich diese Datei per "Add as Link" hinzugefügt.