示例#1
0
        public VersionModel ParseAppVersion(string appVersion)
        {
            AeroContext.Information($"VersionService.ParseAppVersion. Action: Start, AppVersion: {appVersion}");

            var model = new VersionModel();

            var match = new Regex(AppVersionRegEx).Match(appVersion);

            //Group 0 is the full match, 1-4 are the parts and 5 is the -preview
            if (!match.Success || match.Groups.Count < 4 || match.Groups.Count > 6)
            {
                AeroContext.Error($"VersionService.ParseAppVersion. Action: RegExFail, AppVersion: {appVersion}, GroupCount: {match.Groups?.Count}");
                throw new Exception("AppVersion RegEx Failed");
            }

            try
            {
                model.AssemblyVersion = new Version(
                    Convert.ToInt32(match.Groups[1].Value),
                    Convert.ToInt32(match.Groups[2].Value),
                    Convert.ToInt32(match.Groups[3].Value),
                    Convert.ToInt32(match.Groups[4].Value)
                    );
            }
            catch (Exception ex)
            {
                AeroContext.Error($"VersionService.ParseAppVersion. Action: VersionObjectCreationFailed, AppVersion: {appVersion}, {ex.ToLogString()}");
                throw;
            }

            //If we have a valid regex and we successfully created a version object then we can just set the Version to the appVersion and it will
            //work for either 1.2.3.4 or 1.2.3.4-preview
            model.Version = appVersion;

            if (match.Groups.Count == 6 && !string.IsNullOrWhiteSpace(match.Groups[5].Value))
            {
                var versionSuffix = $"{match.Groups[5]}.{model.AssemblyVersion.Revision}";
                model.NuGetPackageVersion = $"{model.AssemblyVersion.Major}.{model.AssemblyVersion.Minor}.{model.AssemblyVersion.Build}{versionSuffix}";
                //model.NuGetFileName = model.NuGetPackageVersion;
            }
            else
            {
                model.NuGetPackageVersion = $"{model.AssemblyVersion.Major}.{model.AssemblyVersion.Minor}.{model.AssemblyVersion.Build}+{model.AssemblyVersion.Revision}";
                //model.NuGetFileName = $"{model.AssemblyVersion.Major}.{model.AssemblyVersion.Minor}.{model.AssemblyVersion.Build}";
            }

            //With the release of one of the following, the fileName changed: .Net 6, VS2022, MSBUild 2022
            model.NuGetFileName = appVersion;

            AeroContext.Information($"VersionService.ParseAppVersion. Action: Stop, AppVersion: {appVersion}, {model.ToLogString()}");
            return(model);
        }
示例#2
0
        public VersionModel ParseAppVersion()
        {
            //Accept a default value of empty string and then explicitly check so we can provide a better error message
            var appVersion = AeroContext.Argument(Cake.WellKnown.ArgumentNames.AppVersion, string.Empty);

            if (string.IsNullOrWhiteSpace(appVersion))
            {
                AeroContext.Error($"VersionService.ParseAppVersion. Action: AppVersionNull, Message: This method requires a context with  an argument named {nameof(Cake.WellKnown.ArgumentNames.AppVersion)}");
                throw new Exception("AppVersion argument missing");
            }

            return(ParseAppVersion(appVersion));
        }