Skip to content

[BUG] .NET Tools that have capital letters in id crashes the corresponding package manager #4177

@Taron-art

Description

@Taron-art

Please confirm these before moving forward

  • I have searched for my issue and have not found a work-in-progress/duplicate/resolved issue.
  • I have tested that this issue has not been fixed in the latest (beta or stable) release.
  • I have checked the FAQ section for solutions.
  • This issue is about a bug (if it is not, please use the correct template).

UniGetUI Version

3.3.5

Windows version, edition, and architecture

Windows 11 Pro 25H2

Describe your issue

When there is a tool installed that has an ID with capital letters, .Net Tool package manager:

  1. Silently crash while searching for updates;
  2. Installation options for the package cannot be changed.

Steps to reproduce the issue

  1. Install older version DiffEngineTray .NET tool using UniGetUI;
  2. Restart UniGetUI;
  3. Navigate to Installed Packages and search for DiffEngineTray;
  4. Open Package Details;
  5. Remove "Ignore future updates for this package";
  6. Save changes and close the dialog;
  7. Open the dialog again

Expected:
"Ignore future updates for this package" is not set;

Actual:
"Ignore future updates for this package" is set; Log contains exception messages.

UniGetUI Log

[12.10.2025 13:19:04]    __  __      _ ______     __  __  ______
                        / / / /___  (_) ____/__  / /_/ / / /  _/
                       / / / / __ \/ / / __/ _ \/ __/ / / // /
                      / /_/ / / / / / /_/ /  __/ /_/ /_/ // /
                      \____/_/ /_/_/\____/\___/\__/\____/___/
                          Welcome to UniGetUI Version 3.3.5
[12.10.2025 13:19:04]
[12.10.2025 13:19:04] Build 103
[12.10.2025 13:19:04] Data directory C:\Users\<redacted>\AppData\Local\UniGetUI
[12.10.2025 13:19:04] Encoding Code Page set to 866
[12.10.2025 13:19:04] Loaded language locale: en
[12.10.2025 13:19:04] Lang files were updated successfully from GitHub
[12.10.2025 13:19:05] Scoop is not enabled
[12.10.2025 13:19:05] Npm is not enabled
[12.10.2025 13:19:05] Pip is not enabled
[12.10.2025 13:19:05] vcpkg is not enabled
[12.10.2025 13:19:05] PowerShell7 is not enabled
[12.10.2025 13:19:05] PowerShell is enabled and was found on C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
[12.10.2025 13:19:05] Cargo is enabled and was found on C:\Users\<redacted>\.cargo\bin\cargo.exe
[12.10.2025 13:19:05] Chocolatey is enabled and was found on C:\ProgramData\chocolatey\bin\choco.exe
[12.10.2025 13:19:05] Winget is enabled and was found on C:\Users\<redacted>\AppData\Local\Microsoft\WindowsApps\winget.exe
[12.10.2025 13:19:05] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: Cargo (aka Cargo)
                      █ Executable name: "cargo.exe"
                      █ Executable path: "C:\Users\<redacted>\.cargo\bin\cargo.exe"
                      █ Call arguments: ""
                      █ Version: cargo 1.86.0 (adf9b6ad1 2025-02-28)
                      █          
                      █ Cargo is enabled and ready to go.
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[12.10.2025 13:19:05] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: WinGet (aka Winget)
                      █ Executable name: "winget.exe"
                      █ Executable path: "C:\Users\<redacted>\AppData\Local\Microsoft\WindowsApps\winget.exe"
                      █ Call arguments: ""
                      █ Version: System WinGet (CLI) Version: v1.11.510
                      █          Using Native WinGet helper (COM Api)
                      █          
                      █ WinGet is enabled and ready to go.
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[12.10.2025 13:19:05] .NET Tool is enabled and was found on C:\Program Files\dotnet\dotnet.exe
[12.10.2025 13:19:05] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: .NET Tool (aka .NET Tool)
                      █ Executable name: "dotnet tool"
                      █ Executable path: "C:\Program Files\dotnet\dotnet.exe"
                      █ Call arguments: "tool "
                      █ Version: 9.0.305
                      █          
                      █ .NET Tool is enabled and ready to go.
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[12.10.2025 13:19:05] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: PowerShell 5.x (aka PowerShell)
                      █ Executable name: "powershell.exe"
                      █ Executable path: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
                      █ Call arguments: " -NoProfile -Command"
                      █ Version: Name                           Value                                                                                   
                      █          ----                           -----                                                                                   
                      █          PSVersion                      5.1.26100.6725                                                                          
                      █          PSEdition                      Desktop                                                                                 
                      █          PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                 
                      █          BuildVersion                   10.0.26100.6725                                                                         
                      █          CLRVersion                     4.0.30319.42000                                                                         
                      █          WSManStackVersion              3.0                                                                                     
                      █          PSRemotingProtocolVersion      2.3                                                                                     
                      █          SerializationVersion           1.1.0.1
                      █          
                      █ PowerShell 5.x is enabled and ready to go.
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[12.10.2025 13:19:06] ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
                      █▀▀▀▀▀▀▀▀▀▀▀▀▀ MANAGER LOADED ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                      █ Name: Chocolatey (aka Chocolatey)
                      █ Executable name: "choco.exe"
                      █ Executable path: "C:\ProgramData\chocolatey\bin\choco.exe"
                      █ Call arguments: ""
                      █ Version: 2.5.1
                      █          
                      █ Chocolatey is enabled and ready to go.
                      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
[12.10.2025 13:19:07] LoadComponentsAsync finished executing. All managers loaded. Proceeding to interface.
[12.10.2025 13:19:07] Found 0 available updates from Cargo
[12.10.2025 13:19:07] Found 3 installed packages from Cargo
[12.10.2025 13:19:07] Dependency cargo-update for manager Cargo is present
[12.10.2025 13:19:07] Downloaded new icons and screenshots successfully!
[12.10.2025 13:19:07] Found 3 installed packages from .NET Tool
[12.10.2025 13:19:07] Found 3 installed packages from .NET Tool
[12.10.2025 13:19:07] Dependency cargo-binstall for manager Cargo is present
[12.10.2025 13:19:08] Integrity check passed successfully!
[12.10.2025 13:19:08] Found 2 installed packages from Chocolatey
[12.10.2025 13:19:08] Manager .NET Tool failed to list available updates with exception KeyNotFoundException: The given key 'DiffEngineTray' was not present in the dictionary.
[12.10.2025 13:19:08] Since this was the first attempt, .NET Tool.AttemptFastRepair() will be called and the procedure will be restarted
[12.10.2025 13:19:08] Found 0 available updates from Chocolatey
[12.10.2025 13:19:08] Found 3 installed packages from .NET Tool
[12.10.2025 13:19:09] Error finding updates on manager .NET Tool
[12.10.2025 13:19:09] System.AggregateException: One or more errors occurred. (The given key 'DiffEngineTray' was not present in the dictionary.)
                       ---> System.Collections.Generic.KeyNotFoundException: The given key 'DiffEngineTray' was not present in the dictionary.
                         at System.Collections.Generic.Dictionary`2.get_Item(TKey)
                         at UniGetUI.PackageEngine.Managers.PowerShellManager.BaseNuGet.<>c__DisplayClass4_0.<GetAvailableUpdates_UnSafe>b__0(Package p) in C:\SomePrograms\WingetUI-Store\src\UniGetUI.PackageEngine.Managers.Generic.NuGet\BaseNuGet.cs:line 218
                         at System.Linq.Enumerable.WhereListIterator`1.ToArray()
                         at UniGetUI.PackageEngine.Managers.PowerShellManager.BaseNuGet.GetAvailableUpdates_UnSafe() in C:\SomePrograms\WingetUI-Store\src\UniGetUI.PackageEngine.Managers.Generic.NuGet\BaseNuGet.cs:line 218
                         at System.Threading.Tasks.Task`1.InnerInvoke()
                         at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread, ExecutionContext, ContextCallback, Object)
                      --- End of stack trace from previous location ---
                         at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread, ExecutionContext, ContextCallback, Object)
                         at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task&, Thread )
                         --- End of inner exception stack trace ---
                         at System.Threading.Tasks.Task.Wait(Int32, CancellationToken)
                         at System.Threading.Tasks.Task.Wait(TimeSpan, CancellationToken)
                         at System.Threading.Tasks.Task.Wait(TimeSpan)
                         at UniGetUI.PackageEngine.ManagerClasses.Manager.PackageManager._getAvailableUpdates(Boolean SecondAttempt) in C:\SomePrograms\WingetUI-Store\src\UniGetUI.PackageEngine.PackageManagerClasses\Manager\PackageManager.cs:line 279
[12.10.2025 13:19:09] Found 1 installed packages from PowerShell
[12.10.2025 13:19:09] Found 1 installed packages from PowerShell
[12.10.2025 13:19:09] Found 0 available updates from PowerShell
[12.10.2025 13:19:09] Found 264 installed packages from Winget
[12.10.2025 13:19:09] Backup saved to <redacted>
[12.10.2025 13:19:10] Found 3 available updates from Winget
[12.10.2025 13:19:10] Could not parse Images array from Microsoft Store response
[12.10.2025 13:19:10] Could not parse Images array from Microsoft Store response
[12.10.2025 13:19:11] Successfully updated Gist ID: 064db724505e53a756aff6a7be288708
[12.10.2025 13:19:11] Cloud backup completed successfully to gist Taron-art/064db724505e53a756aff6a7be288708
[12.10.2025 13:19:11] Cloud backup succeeded
[12.10.2025 13:19:20] Found 0 screenshots for package Id=diffenginetray
[12.10.2025 13:19:20] Loaded details for package diffenginetray on manager .NET Tool
[12.10.2025 13:19:20] Loaded operation parameters for package id=diffenginetray on manager .NET Tool and operation Uninstall: uninstall diffenginetray --global
[12.10.2025 13:19:20] Loaded operation parameters for package id=diffenginetray on manager .NET Tool and operation Uninstall: uninstall diffenginetray --global
[12.10.2025 13:19:27] Found 0 screenshots for package Id=diffenginetray
[12.10.2025 13:19:27] Loaded operation parameters for package id=diffenginetray on manager .NET Tool and operation Uninstall: uninstall diffenginetray --global
[12.10.2025 13:19:28] Loaded operation parameters for package id=diffenginetray on manager .NET Tool and operation Uninstall: uninstall diffenginetray --global

Package Managers Logs

Manager .NET Tool with version:
9.0.305

——————————————————————————————————————————


Logged subprocess-based task on manager .NET Tool. Task type is ListInstalledPackages
Subprocess executable: "C:\Program Files\dotnet\dotnet.exe"
Command-line arguments: "tool  list"
Process start time: 12.10.2025 13:19:07
Process end time:   12.10.2025 13:19:07

-- Process STDOUT
  Package Id      Version      Commands      Manifest
  ---------------------------------------------------

Return code: SUCCESS (0)

——————————————————————————————————————————

Logged native task on manager .NET Tool. Task type is ListUpdates
Process start time: 12.10.2025 13:19:07
Process end time:   12.10.2025 13:19:08

-- Task information
  Found package DiffEngineTray version 16.7.2 on source nuget.org

The task reported success

——————————————————————————————————————————

Logged subprocess-based task on manager .NET Tool. Task type is ListInstalledPackages
Subprocess executable: "C:\Program Files\dotnet\dotnet.exe"
Command-line arguments: "tool  list --global"
Process start time: 12.10.2025 13:19:07
Process end time:   12.10.2025 13:19:07

-- Process STDOUT
  Package Id                 Version      Commands             
  -------------------------------------------------------------
  diffenginetray             5.0.0        DiffEngineTray       
  dotnet-tools-outdated      0.7.1        dotnet-tools-outdated
  wix                        6.0.2        wix                  

Return code: SUCCESS (0)

——————————————————————————————————————————

Logged native task on manager .NET Tool. Task type is ListUpdates
Process start time: 12.10.2025 13:19:08
Process end time:   12.10.2025 13:19:09

-- Task information
  Found package DiffEngineTray version 16.7.2 on source nuget.org

The task reported success

——————————————————————————————————————————

Logged subprocess-based task on manager .NET Tool. Task type is ListInstalledPackages
Subprocess executable: "C:\Program Files\dotnet\dotnet.exe"
Command-line arguments: "tool  list"
Process start time: 12.10.2025 13:19:08
Process end time:   12.10.2025 13:19:08

-- Process STDOUT
  Package Id      Version      Commands      Manifest
  ---------------------------------------------------

Return code: SUCCESS (0)

——————————————————————————————————————————

Logged subprocess-based task on manager .NET Tool. Task type is ListInstalledPackages
Subprocess executable: "C:\Program Files\dotnet\dotnet.exe"
Command-line arguments: "tool  list --global"
Process start time: 12.10.2025 13:19:08
Process end time:   12.10.2025 13:19:08

-- Process STDOUT
  Package Id                 Version      Commands             
  -------------------------------------------------------------
  diffenginetray             5.0.0        DiffEngineTray       
  dotnet-tools-outdated      0.7.1        dotnet-tools-outdated
  wix                        6.0.2        wix                  

Return code: SUCCESS (0)

——————————————————————————————————————————

Logged native task on manager .NET Tool. Task type is LoadPackageDetails
Process start time: 12.10.2025 13:19:20
Process end time:   12.10.2025 13:19:20

-- Task information
  <?xml version="1.0" encoding="utf-8"?><entry xml:base="https://www.nuget.org/api/v2" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"><id>https://www.nuget.org/api/v2/Packages(Id='DiffEngineTray',Version='5.0.0')</id><category term="NuGetGallery.OData.V2FeedPackage" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /><link rel="edit" href="https://www.nuget.org/api/v2/Packages(Id='DiffEngineTray',Version='5.0.0')" /><link rel="self" href="https://www.nuget.org/api/v2/Packages(Id='DiffEngineTray',Version='5.0.0')" /><title type="text">DiffEngineTray</title><updated>2020-08-29T02:37:06Z</updated><author><name>https://github.com/VerifyTests/DiffEngine/graphs/contributors</name></author><content type="application/zip" src="https://www.nuget.org/api/v2/package/DiffEngineTray/5.0.0" /><m:properties><d:Id>DiffEngineTray</d:Id><d:Version>5.0.0</d:Version><d:NormalizedVersion>5.0.0</d:NormalizedVersion><d:Authors>https://github.com/VerifyTests/DiffEngine/graphs/contributors</d:Authors><d:Copyright>Copyright 2020. All rights reserved</d:Copyright><d:Created m:type="Edm.DateTime">2020-08-29T02:37:06.057+00:00</d:Created><d:Dependencies></d:Dependencies><d:Description>A utility that runs in the windows tray and handles the results of file differences.</d:Description><d:DownloadCount m:type="Edm.Int64">109433</d:DownloadCount><d:GalleryDetailsUrl>https://www.nuget.org/packages/DiffEngineTray/5.0.0</d:GalleryDetailsUrl><d:IconUrl>https://api.nuget.org/v3-flatcontainer/diffenginetray/5.0.0/icon</d:IconUrl><d:IsLatestVersion m:type="Edm.Boolean">false</d:IsLatestVersion><d:IsAbsoluteLatestVersion m:type="Edm.Boolean">false</d:IsAbsoluteLatestVersion><d:IsPrerelease m:type="Edm.Boolean">false</d:IsPrerelease><d:Language m:null="true" /><d:LastUpdated m:type="Edm.DateTime">2020-08-29T02:37:06.057+00:00</d:LastUpdated><d:Published m:type="Edm.DateTime">2020-08-29T02:37:06.057+00:00</d:Published><d:PackageHash>gYAw+5fP3MH5dNd64XldPtAP8azZwUPo2hYH4PWuJuZ1GEryi7YUxDHWivdDMh0B9x2p8NP5TTJdbKP9gdb9jg==</d:PackageHash><d:PackageHashAlgorithm>SHA512</d:PackageHashAlgorithm><d:PackageSize m:type="Edm.Int64">296828</d:PackageSize><d:ProjectUrl>https://github.com/VerifyTests/DiffEngine</d:ProjectUrl><d:ReportAbuseUrl>https://www.nuget.org/packages/DiffEngineTray/5.0.0/ReportAbuse</d:ReportAbuseUrl><d:ReleaseNotes>https://github.com/VerifyTests/DiffEngine/releases/tag/5.0.0</d:ReleaseNotes><d:RequireLicenseAcceptance m:type="Edm.Boolean">false</d:RequireLicenseAcceptance><d:Summary></d:Summary><d:Tags>Json Testing Verify Snapshot Approvals</d:Tags><d:Title>DiffEngineTray</d:Title><d:VersionDownloadCount m:type="Edm.Int64">642</d:VersionDownloadCount><d:MinClientVersion m:null="true" /><d:LastEdited m:type="Edm.DateTime">2020-08-29T02:39:12.56+00:00</d:LastEdited><d:LicenseUrl>https://www.nuget.org/packages/DiffEngineTray/5.0.0/license</d:LicenseUrl><d:LicenseNames m:null="true" /><d:LicenseReportUrl m:null="true" /></m:properties></entry>

The task reported success

——————————————————————————————————————————

Relevant information

I think the problem is in dotnet tool list --global that returns lower case in diffenginetray, but web request returns (Id='DiffEngineTray',Version='5.0.0') Since these ids are case insensitive, comparing this way should fix the problem. I could try to resolve it if you OK with that (it is a complex part of the solution).

Screenshots and videos

No response

Metadata

Metadata

Assignees

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions