Skip to content

Upgrade to .NET 4.8, fix CI workflows, add tests#435

Open
niklas2233 wants to merge 11 commits into
indiff:masterfrom
niklas2233:ci-and-net48-improvements
Open

Upgrade to .NET 4.8, fix CI workflows, add tests#435
niklas2233 wants to merge 11 commits into
indiff:masterfrom
niklas2233:ci-and-net48-improvements

Conversation

@niklas2233

Copy link
Copy Markdown

Summary

  • Upgrades all projects from .NET 4.5 to .NET 4.8 with WiX Burn bootstrapper installer
  • Fixes build errors introduced by the .NET 4.8 migration
  • Fixes CodeQL workflow: switched to windows-latest runner (ubuntu can't build this .sln) and adds required security-events: write permission
  • Replaces the old broken CI workflow with a modern one: proper MSBuild setup, NuGet restore, build, tests, and artifact upload — all passing
  • Adds 31 unit tests covering BindAction enum ordinals (so refactors can't accidentally break saved user settings) and XmlSerializableFont
  • Fixes SolutionDir undefined error when building .csproj directly
  • Updates action-gh-release to v2 (Node 24 compatible)
  • Cleans up outdated root-level files and improves the restart-explorer batch script

CI status

All 31 tests pass on windows-latest. CodeQL analysis runs cleanly. The original repo's CodeQL has been failing every week since at least February 2025 due to the ubuntu/MSBuild mismatch — this fixes that.

🤖 Generated with Claude Code

niklas2233 and others added 11 commits June 18, 2026 03:56
- Upgrade all 17 C# projects from .NET 3.5/4.0 to .NET 4.8, eliminating
  the requirement to separately install the unmaintained .NET 3.5 runtime.
  .NET 4.8 ships pre-installed on Windows 10 (1903+) and Windows 11.
- Update installer to require NETFRAMEWORK48 instead of NETFRAMEWORK35
- Update COM registration RuntimeVersion from v2.0.50727 to v4.0.30319
- Add WiX Burn bootstrapper (Bundle.wxs / Bundle.wixproj) that automatically
  downloads and installs .NET 4.8 from Microsoft if not already present,
  then installs QTTabBar — produces a single setup.exe for end users
- Add graphify-out/ and .claude/ to .gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace MSHTML and SHDocVw COM references with assembly references to fix
  64-bit MSBuild incompatibility (cannot resolve 32-bit type libraries)
- Add System.Xaml reference (IComponentConnector moved from WindowsBase in .NET 4+)
- Fix NotifyPropertyWeaver task: use AfterBuild with explicit TargetPath and
  References params (AfterCompile + no params fails on modern MSBuild)
- Fix Installer.wxs: replace PropertyRef NETFRAMEWORK48 (undefined in NuGet
  WixNetFxExtension) with custom registry AppSearch; remove InstallerHelper
  binary/CustomActions (C++ not built, no toolchain)
- Add Microsoft.mshtml.dll interop assembly from VS PublicAssemblies

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rovements

- Fix options dialog crash: add Dispatcher.UnhandledException handler and
  comprehensive try-catch in ThreadEntry() for .NET 4+ unhandled exception behavior
- Fix empty options window: cache assemblies in AssemblyResolve handler to prevent
  Ricciolo.Controls.TreeListView from loading twice into incompatible LoadNeither contexts
- Bars off by default: remove auto-ShowBrowserBar calls from AutoLoader.ActivateIt()
- Installer: wire WIXUI_EXITDIALOGOPTIONALCHECKBOX to restart Explorer via three
  sequential actions (kill, wait, WixShellExec) for correct timing and de-elevation
- Bump version to 1.5.6.2 across AssemblyInfo, QTUtility, Installer.wxs, Bundle.wxs
- Update README for .NET 4.8, VS 2022, WiX 3.14 build instructions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add @echo off, use start for non-blocking launch, and wait loop to
confirm Explorer is running before exiting.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Build scripts: 01build_release.bat (VS2010), 02build_sonar.bat (hardcoded
  SonarQube token + VS2019), BUILD.txt (obsolete instructions)
- Docs: CHANGES.txt (corrupted encoding), CONTRIBUTING.md (empty),
  TODOS.txt (original author notes), SECURITY.md (template with wrong versions)
- CI: appveyor.yml (VS2015/2010, not used), _config.yml (GitHub Pages theme)
- Binaries: Votive2010.vsix (WiX VS2010 extension), QTTabBar.doc (old Word doc),
  image.png (unused), url.txt (single URL)
- Directories: InstallerMini/ (unused alternate installer), Test/ (empty test files)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Update QTTabBar.yml: trigger on master, action versions to v4/v2,
  add test run step with TRX results, fix artifact path
- Fix ql.yml: switch to windows-latest, add MSBuild build step so
  CodeQL can actually analyze the compiled C# code
- Add QTTabBar.Tests project with 30 MSTest tests covering BindAction
  enum contract and XmlSerializableFont round-trip serialization
- Register QTTabBar.Tests in solution with full configuration mappings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The full solution build fails on the runner because libMinHook and
InstallerHelper use Platform Toolset v100 (VS 2010), which is not
installed. The C# code all compiled fine. Fix: build QTTabBar.Tests
(which pulls BandObjectLib, QTPluginLib, QTTabBar via project refs)
and skip the native/installer projects entirely.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When building QTTabBar.Tests.csproj without the .sln file,
$(SolutionDir) is undefined so the NotifyPropertyWeaver task path
resolves to *Undefined*. Pass SolutionDir explicitly from
GITHUB_WORKSPACE to fix the post-build weaving step.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Required for the CodeQL action to upload SARIF results to
GitHub Security tab.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

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.

1 participant