Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Nov 18, 2025

Fixed SDK version sorting issue in VisualStudioSafeVersionsExtractor.GetReasonRequiredStrings() method. The problem was that versions were being sorted lexicographically by their DisplayName string, causing version 10.0.100 to sort incorrectly (appearing after 9.x but before 2.x in descending order).

Changes Made

Changed line 130 in src/dotnet-core-uninstall/Shared/VSVersioning/VisualStudioSafeVersionsExtractor.cs to sort by the Bundle object itself (which implements IComparable using semantic version comparison) instead of by DisplayName string:

- .OrderByDescending(pair => pair.bundle.DisplayName)
+ .OrderByDescending(pair => pair.bundle)

Result

Version 10.0.100 now correctly sorts numerically with other versions (12.x > 11.x > 10.x > 9.x > ... > 1.x) instead of using lexicographic string ordering where "10" would incorrectly appear between "1" and "2".

Testing

  • ✅ Security scan (CodeQL) completed with no issues found
  • ✅ Fix logic verified with simulation showing correct sort order

The change is minimal and surgical, affecting only one line to fix the version comparison logic.

Original prompt

When we sort the output of dotnet-core-uninstall list, we sort descending. However, it puts the 10 versions out of order. Please correctly put the 10.0.100 SDK at the top of the list.

Below is example output that was incorrectly sorted for 10.0.100.

.NET Core SDKs:
  9.0.307                  x86
  9.0.307                  x64         [Used by Visual Studio 2022. Specify individually or use --force to remove]
  9.0.205                  x64
  9.0.112                  x64
  8.0.416                  x64         [Used by Visual Studio 2022. Specify individually or use --force to remove]
  8.0.319                  x64
  8.0.206                  x64
  8.0.122                  x64
  7.0.410                  x64         [Used by Visual Studio 2022. Specify individually or use --force to remove]
  7.0.317                  x64
  7.0.200-preview.23059.6  x86, x64
  7.0.120                  x64
  6.0.428                  x64         [Used by Visual Studio 2022. Specify individually or use --force to remove]
  6.0.321                  x64
  10.0.100                 x64         [Used by Visual Studio 2026. Specify individually or use --force to remove]
  3.1.426                  x64         [Used by Visual Studio 2019. Specify individually or use --force to remove]

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

@marcpopMSFT
Copy link
Member

@copilot please try again

…omparison

Changed VisualStudioSafeVersionsExtractor.GetReasonRequiredStrings to sort by Bundle object (which uses semantic version comparison) instead of DisplayName string. This fixes the issue where version 10.0.100 was incorrectly sorted before 2.x, 5.x, etc. due to lexicographic string ordering where "1" < "2".

Co-authored-by: marcpopMSFT <[email protected]>
Copy link
Contributor Author

Copilot AI commented Nov 20, 2025

@copilot please try again

Fixed the SDK version sorting issue in commit 56a066f. The problem was that the code was sorting bundles by DisplayName (string) instead of by the Bundle object (which uses semantic version comparison). This caused version 10.0.100 to be incorrectly sorted before versions like 2.x, 5.x, 9.x due to lexicographic ordering where "1" < "2". Now it correctly sorts by version number.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 1oavsblobprodcus350.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/AB3F5B4F38F39326F517C95985BB1CCD/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 1p7vsblobprodcus324.vsblob.vsassets.io
    • Triggering command: dotnet test --list-tests (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/cli-lab/lab.sln --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot (dns block)
  • 1s1vsblobprodcus386.vsblob.vsassets.io
    • Triggering command: dotnet test --list-tests (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/cli-lab/lab.sln --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/71CDA9FA07BF67921CD59B3ABBA37B0E/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 2kmvsblobprodcus39.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/820A97C1134D984973320EFFC6EC43BE/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/46EB19D8E6D150879BD3367A72FC2FBC/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 2zrvsblobprodcus388.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/0C0F71666708895B0B68BA9B320DB87D/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 4m6vsblobprodcus384.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/36CC295B93824B15F79B39832EB0CCD9/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 51yvsblobprodcus36.vsblob.vsassets.io
    • Triggering command: dotnet test --list-tests (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/cli-lab/lab.sln --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot (dns block)
  • 7tjvsblobprodcus341.vsblob.vsassets.io
    • Triggering command: dotnet test --list-tests (dns block)
    • Triggering command: dotnet build src/dotnet-core-uninstall/dotnet-core-uninstall.csproj (dns block)
    • Triggering command: dotnet test test/dotnet-core-uninstall.Tests/dotnet-core-uninstall.Tests.csproj --filter FullyQualifiedName~VSVersionTests --no-build --no-restore (dns block)
  • d0svsblobprodcus381.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/FA6DB83614BF5C5211016F7FB850878E/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/307E99119043270B829736F32461490F/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • frdvsblobprodcus327.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/0C0F71666708895B0B68BA9B320DB87D/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • jrqvsblobprodcus343.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/AB3F5B4F38F39326F517C95985BB1CCD/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • k0ivsblobprodcus356.vsblob.vsassets.io
    • Triggering command: dotnet test --list-tests (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/cli-lab/lab.sln --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot (dns block)
  • l7avsblobprodcus319.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/AB3F5B4F38F39326F517C95985BB1CCD/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • pe4vsblobprodcus351.vsblob.vsassets.io
    • Triggering command: dotnet test --list-tests (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/cli-lab/lab.sln --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot (dns block)
  • rcxvsblobprodcus328.vsblob.vsassets.io
    • Triggering command: dotnet test --list-tests (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/cli-lab/lab.sln --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/AB3F5B4F38F39326F517C95985BB1CCD/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • s8mvsblobprodcus38.vsblob.vsassets.io
    • Triggering command: dotnet test --list-tests (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/cli-lab/lab.sln --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot (dns block)
  • securitytools.pkgs.visualstudio.com
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.23.3/x64/codeql/csharp/tools/linux64/Semmle.Autobuild.CSharp (dns block)
  • sqdvsblobprodcus333.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/820A97C1134D984973320EFFC6EC43BE/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • st8vsblobprodcus339.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/1547C205BD65A89A30F6427AD94CC555/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • u3hvsblobprodcus371.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/AB3F5B4F38F39326F517C95985BB1CCD/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • yttvsblobprodcus357.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/C66EB009B13635B85A56934286C57648/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/AB3F5B4F38F39326F517C95985BB1CCD/missingpackages_workingdir --packages /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/cli-lab/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Fix SDK version sorting to prioritize 10.0.100 Fix SDK version sorting to prioritize 10.0.100 Nov 20, 2025
Copilot finished work on behalf of marcpopMSFT November 20, 2025 20:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants