@@ -33,73 +33,111 @@ function Get-LatestAspNetVersion {
3333 # Separate release and preview versions
3434 $releaseVersions = @ ()
3535 $previewVersions = @ ()
36+ $rcVersions = @ ()
3637
3738 foreach ($ver in $versions ) {
39+ Write-Host " Processing version: $ver "
3840 if ($ver -match ' -preview' ) {
41+ Write-Host " -> Detected preview version"
3942 $previewVersions += $ver
43+ } elseif ($ver -match ' -rc' ) {
44+ Write-Host " -> Detected rc version"
45+ $rcVersions += $ver
4046 } else {
47+ Write-Host " -> Detected release version"
4148 $releaseVersions += $ver
4249 }
4350 }
4451
4552 # If we have release versions, get the latest
4653 if ($releaseVersions.Count -gt 0 ) {
4754 $verObjects = @ ()
48-
4955 foreach ($ver in $releaseVersions ) {
56+ Write-Host " Attempting to parse release version: $ver "
5057 try {
5158 $verObj = New-Object PSObject
5259 Add-Member - InputObject $verObj - MemberType NoteProperty - Name " OriginalVersion" - Value $ver
53-
54- # Convert to Version object for proper comparison
5560 $versionObj = [Version ]$ver
5661 Add-Member - InputObject $verObj - MemberType NoteProperty - Name " Version" - Value $versionObj
57-
5862 $verObjects += $verObj
5963 } catch {
60- Write-Host " Warning: Could not parse version $ver , skipping."
64+ Write-Host " Warning: Could not parse release version $ver , skipping."
6165 }
6266 }
63-
64- # Sort by version (descending) and get the first one
6567 $sortedVersions = $verObjects | Sort-Object - Property Version - Descending
66-
6768 if ($sortedVersions.Count -gt 0 ) {
6869 $latestVersion = $sortedVersions [0 ].OriginalVersion
6970 } else {
7071 $latestVersion = $null
7172 }
7273 }
74+ # Otherwise get the latest rc version
75+ elseif ($rcVersions.Count -gt 0 ) {
76+ $rcObjs = @ ()
77+ $maxRcParts = 0
78+ foreach ($ver in $rcVersions ) {
79+ Write-Host " Attempting to parse rc version: $ver "
80+ if ($ver -match ' ^(\d+)\.(\d+)\.(\d+)-rc\.(.+)$' ) {
81+ Write-Host " -> RC regex matched"
82+ $major = [int ]$matches [1 ]
83+ $minor = [int ]$matches [2 ]
84+ $patch = [int ]$matches [3 ]
85+ $rcParts = $matches [4 ] -split ' \.'
86+ $rcNumbers = $rcParts | ForEach-Object { [int ]$_ }
87+ Write-Host " -> RC numeric parts: $ ( $rcNumbers -join ' ,' ) "
88+ if ($rcNumbers.Count -gt $maxRcParts ) { $maxRcParts = $rcNumbers.Count }
89+ $rcObj = New-Object PSObject
90+ Add-Member - InputObject $rcObj - MemberType NoteProperty - Name " OriginalVersion" - Value $ver
91+ Add-Member - InputObject $rcObj - MemberType NoteProperty - Name " Major" - Value $major
92+ Add-Member - InputObject $rcObj - MemberType NoteProperty - Name " Minor" - Value $minor
93+ Add-Member - InputObject $rcObj - MemberType NoteProperty - Name " Patch" - Value $patch
94+ for ($i = 0 ; $i -lt $rcNumbers.Count ; $i ++ ) {
95+ Add-Member - InputObject $rcObj - MemberType NoteProperty - Name (" RC$i " ) - Value $rcNumbers [$i ]
96+ }
97+ $rcObjs += $rcObj
98+ } else {
99+ Write-Host " -> RC regex did NOT match"
100+ }
101+ }
102+ # Pad missing RC fields with 0 for sorting
103+ foreach ($obj in $rcObjs ) {
104+ for ($i = 0 ; $i -lt $maxRcParts ; $i ++ ) {
105+ if (-not ($obj.PSObject.Properties.Name -contains (" RC$i " ))) {
106+ Add-Member - InputObject $obj - MemberType NoteProperty - Name (" RC$i " ) - Value 0
107+ }
108+ }
109+ }
110+ $sortProps = @ (" Major" , " Minor" , " Patch" ) + @ (for ($i = 0 ; $i -lt $maxRcParts ; $i ++ ) { " RC$i " })
111+ Write-Host " Sorting RCs by: $ ( $sortProps -join ' , ' ) "
112+ $sortedRCs = $rcObjs | Sort-Object - Property $sortProps - Descending
113+ if ($sortedRCs.Count -gt 0 ) {
114+ $latestVersion = $sortedRCs [0 ].OriginalVersion
115+ } else {
116+ $latestVersion = ($rcVersions | Sort-Object )[-1 ]
117+ }
118+ }
73119 # Otherwise get the latest preview version
74120 elseif ($previewVersions.Count -gt 0 ) {
75- # For preview versions like "10.0.0-preview.5.25277.114"
76121 $previewObjs = @ ()
77-
78122 foreach ($ver in $previewVersions ) {
79123 if ($ver -match ' (\d+)\.(\d+)\.(\d+)-preview\.(\d+)' ) {
80124 $major = [int ]$matches [1 ]
81125 $minor = [int ]$matches [2 ]
82126 $patch = [int ]$matches [3 ]
83127 $preview = [int ]$matches [4 ]
84-
85128 $previewObj = New-Object PSObject
86129 Add-Member - InputObject $previewObj - MemberType NoteProperty - Name " OriginalVersion" - Value $ver
87130 Add-Member - InputObject $previewObj - MemberType NoteProperty - Name " Major" - Value $major
88131 Add-Member - InputObject $previewObj - MemberType NoteProperty - Name " Minor" - Value $minor
89132 Add-Member - InputObject $previewObj - MemberType NoteProperty - Name " Patch" - Value $patch
90133 Add-Member - InputObject $previewObj - MemberType NoteProperty - Name " Preview" - Value $preview
91-
92134 $previewObjs += $previewObj
93135 }
94136 }
95-
96- # Sort by version components
97137 $sortedPreviews = $previewObjs | Sort-Object - Property Major, Minor, Patch, Preview - Descending
98-
99138 if ($sortedPreviews.Count -gt 0 ) {
100139 $latestVersion = $sortedPreviews [0 ].OriginalVersion
101140 } else {
102- # Fallback - just take the last one alphabetically
103141 $latestVersion = ($previewVersions | Sort-Object )[-1 ]
104142 }
105143 }
0 commit comments