Public/VersionFunctions.ps1

using namespace System.Text.RegularExpressions
function Get-XpandVersion { 
    param(
        $XpandPath,
        [switch]$Latest,
        [switch]$Release,
        [switch]$Lab,
        [switch]$Next
    )
    if ($Next) {
        $official = Get-XpandVersion -Release
        $labVersion = Get-XpandVersion -Lab 
        $revision = 0
        if ($official.Build -eq $labVersion.Build) {
            $revision = $labVersion.Revision + 1
            if ($labVersion.Revision -eq -1) {
                $revision = 1
            }
        }
        return New-Object System.Version($official.Major, $official.Minor, $official.Build, $revision)
    }
    if ($XpandPath) {
        $assemblyInfo = "$XpandPath\Xpand\Xpand.Utils\Properties\XpandAssemblyInfo.cs"
        $matches = Get-Content $assemblyInfo -ErrorAction Stop | Select-String 'public const string Version = \"([^\"]*)'
        if ($matches) {
            return New-Object System.Version($matches[0].Matches.Groups[1].Value)
        }
        else {
            Write-Error "Version info not found in $assemblyInfo"
        }
        return
    }
    if ($Latest) {
        $official = Get-XpandVersion -Release
        $labVersion = Get-XpandVersion -Lab 
        if ($labVersion -gt $official) {
            $labVersion
        }
        else {
            $official
        }
        return
    }
    if ($Lab) {
        (& nuget list eXpand -Source https://xpandnugetserver.azurewebsites.net/nuget|ConvertTo-PackageObject -LatestVersion|Sort-Object -Property Version -Descending |Select-Object -First 1).Version
        return
    }
    if ($Release) {
        $c = New-Object System.Net.WebClient
        $c.Headers.Add("User-Agent", "Xpand");
        New-Object System.Version (($c.DownloadString("https://api.github.com/repos/eXpand/eXpand/releases/latest")|ConvertFrom-Json).tag_Name)
        $c.Dispose()
    }
}

function Get-VersionFromFile([parameter(mandatory)][string]$assemblyInfo) {
    $matches = Get-Content $assemblyInfo -ErrorAction Stop | Select-String 'public const string Version = \"([^\"]*)'
    if ($matches) {
        $matches[0].Matches.Groups[1].Value
    }
    else {
        throw "Version info not found in $assemblyInfo"
    }
}
function Get-DevExpressVersion {
    [CmdletBinding()]
    param (
        [parameter(Mandatory, ParameterSetName = "version")]
        [string]$Version,
        [parameter(ParameterSetName = "version")]
        [switch]$Build,
        [parameter(ParameterSetName = "latest")]
        [switch]$Latest,
        [parameter(Mandatory,ParameterSetName = "latest")]
        [string[]]$Sources
    )
    
    begin {
    }
    
    process {
        if ($PSCmdlet.ParameterSetName -eq "version") {
            $v = New-Object System.Version $version
            if (!$build) {
                "$($v.Major).$($v.Minor)"
            }    
            else {
                "$($v.Major).$($v.Minor).$($v.Build.ToString().Substring(0,1))"
            }
        }
        else{
            (Get-NugetPackageSearchMetadata -Name DevExpress.ExpressApp -Sources $Sources|Select-Object -ExpandProperty metadata).Version.ToString()
        }
        
    }
    
    end {
    }
}
function Get-DXVersion([string]$Version, [switch]$Build, [switch]$Latest) {
    
}

function Update-AssemblyInfoBuild($path) {
    if (!$path) {
        $path = get-location
    }
    Get-ChildItem -path $path -filter "*AssemblyInfo.cs" -Recurse|ForEach-Object {
        $c = Get-Content $_.FullName
        $value = [System.text.RegularExpressions.Regex]::Match($c, "[\d]{1,2}\.[\d]{1}\.[\d]*(\.[\d]*)?").Value
        $version = New-Object System.Version ($value)
        $newBuild = $version.Build + 1
        $newVersion = new-object System.Version ($version.Major, $version.Minor, $newBuild, 0)
        "$_ new version is $newVersion "
        $result = $c -creplace 'Version\("([^"]*)', "Version(""$newVersion"
        Set-Content $_.FullName $result
    }
}
function Update-AssemblyInfoVersion([parameter(mandatory)]$version, $path) {
    if (!$path) {
        $path = "."
    }
    Get-ChildItem -path $path -filter "*AssemblyInfo.cs" -Recurse|ForEach-Object {
        $c = Get-Content $_.FullName
        $result = $c -creplace 'Version\("([^"]*)', "Version(""$version"
        Set-Content $_.FullName $result
    }
}

Function Update-SpecificVersions {
    [cmdletbinding()]
    Param (
        [parameter(ValueFromPipeline, Mandatory)]
        [string]$fiLeName,
        [parameter(Mandatory)]
        [string]$filter,
        [parameter()]
        [string]$binPath
    )

    Process {
        $project = [xml](Get-Content $fiLeName)
        $ns = New-Object System.Xml.XmlNamespaceManager($project.NameTable)
        $ns.AddNamespace("ns", $project.DocumentElement.NamespaceURI)
        $xPath = "//ns:Reference[contains(@Include,$filter)]"
        $references = $project.SelectNodes($xPath, $ns)
        $references | ForEach-Object {
            $assemblyName = $_.Include
            if ($_.Include.IndexOf(",") -gt 0) {
                $assemblyName = $_.Include.Substring(0, $_.Include.IndexOf(","))
                if ($_.Include -imatch '.*Version=([^,]*),.*') {
                    $version = $Matches[1]
                    $_.Include = $_.Include.Replace($version, $(Get-XpandVersion))
                }
            }
            $n = $_.SelectSingleNode("ns:SpecificVersion", $ns)
            if (!$n) {
                $n = $project.CreateElement("SpecificVersion", $project.DocumentElement.NamespaceURI)
                $_.AppendChild($n)
            }
            $n.InnerText = "False"

            $n = $_.SelectSingleNode("ns:HintPath", $ns)
            if (Test-Path $binpath) {
                if (!$n) {
                    $n = $project.CreateElement("HintPath", $project.DocumentElement.NamespaceURI)
                    $_.AppendChild($n)
                }
            
                $n.InnerText = "$binPath\$assemblyName.dll"
            }
            else {
                if ($n) {
                    $n.ParentNode.RemoveChild($n)
                }
            }
        }
        
        $project.Save($fiLeName)
    }
}

function Get-XpandPath() {
    $dllPath = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432node\Microsoft\.NETFramework\AssemblyFoldersEx\Xpand').'(default)'
}

function Get-DotNetCoreVersion {
    param(
        [validateset("Runtime", "SDK")]
        [string]$Type
    )
    if ($type -eq "Runtime") {
        dotnet --list-runtimes|ForEach-Object {
            $r = new-object Regex ("(?<Name>[^ ]*) (?<Version>[^ ]*) \[(?<Path>[^\]]*)")
            $m = $r.Match($_)
            [PSCustomObject]@{
                Name    = $m.Groups["Name"].Value
                Version = $m.Groups["Version"].Value
                Path    = $m.Groups["Path"].Value
            }
        }
    }
    else {
        dotnet --list-sdks|ForEach-Object {
            $r = new-object Regex ("(?<Name>[^ ]*) \[(?<Path>[^\]]*)")
            $m = $r.Match($_)
            [PSCustomObject]@{
                Name    = $m.Groups["Name"].Value
                Version = $m.Groups["Name"].Value
                Path    = $m.Groups["Path"].Value
            }
        }
    }
}