Replace the Windows-only .bat helpers (clean / debugbuild / releasebuild /
restore / updatedeps and BuildTools/format) with cross-platform pwsh
scripts at the repo root: restore.ps1, build.ps1 (-Configuration), clean.ps1,
updatedeps.ps1 and BuildTools/format.ps1, alongside the existing publish.ps1.
Enable a packages.lock.json for every project by hoisting
RestorePackagesWithLockFile into the root Directory.Build.props (the four
core libraries set it individually before) and commit the generated locks,
so restores are repeatable and CI can cache packages off them.
Cache the NuGet packages folder in the three setup-dotnet workflows
(build-ilspy, build-frontends, codeql-analysis), keyed on the lock files
per the setup-dotnet caching guidance.
Scope the Debug "Verify package contents" check to the *.filelist outputs
it actually generates. A project's packages.lock.json is keyed only by
(framework, RID), with no host-OS axis, so a lock produced on Linux
legitimately differs from one produced on Windows whenever an OS-conditional
PackageReference applies (Debug+Windows pulls Microsoft.DiaSymReader*). The
Windows restore then rewrites those locks; that churn must not fail a step
whose job is to police the VSIX/MSI file lists.
Also drop the dead ILSpy.BamlDecompiler publish line from
publishlocaldev.ps1, mirroring the earlier publish.ps1 fix.
Assisted-by: Claude:claude-opus-4-8:Claude Code
Decompiler.Tests targeted net11.0-windows only because
Microsoft.DiaSymReader.Native is Win-only and Tester.cs hardcoded ilasm.exe
/ ildasm.exe filenames. Both are narrow problems: gate the Native package
to Windows, replace the ".exe" suffix with an OS-aware helper, and drop
the -windows TFM. The Microsoft.NETCore.IL{,D}Asm metapackages' RID graph
already ships ilasm/ildasm for linux + osx via per-RID runtime sub-packages
when RuntimeIdentifier resolves dynamically, so the tool just lands in the
test output dir with the right suffix on every host.
Windows-only test fixtures (RoundtripAssembly + the RunWithTestRunner,
SignAssembly, FindMSBuild call sites) gate via Assert.Ignore +
[Platform("Win")] so they skip on non-Windows instead of failing. CA1416
joins NoWarn -- the analyzer can't see the runtime guards, and the test
inputs (Console.CapsLock, Registry access) are decompilation targets, not
infrastructure.
BuildTools/pre-commit learns to find dotnet-format on non-Windows (XDG
basedir + no .exe suffix) so the hook can run wherever the build now does.
Assisted-by: Claude:claude-opus-4-7:Claude Code
* Start work on a GH Action build for ILSpy
* Proper dotnet tool install
* Add a bit more of the tasks
* Add dotnet test and upload msix artefact
* Update upload-artifact
* Try adding VSIX
* Missing Uploads sketched
* Fix 7z
* Update upload for VSIX, NuGet and MSIX
* add ghactions-install.ps1
* Add github.workspace to make MSIX drop directory absolute path
* Fix naming of zip to keep it with AppVeyor
* Fix branch handling in ghactions-install.ps1
* Match zipping to https://github.com/icsharpcode/ILSpy/blob/master/appveyor.yml#L30
* Set ReleaseChannel for update-assemblyinfo
* channel is on matrix not env
* Skeleton for GH packages NuGet upload
* Write version number to ILSPY_VERSION file
* Try passing version as output
* Syntax for ::set-output on Windows
* Make dotnet test more readable with env vars
* ::set-output with Write-Output
* Modify version step as per https://github.com/mstum/Simplexcel/blob/master/.github/workflows/cibuild.yml
* Build all branches on push
* Collect ILSpy artifact for Debug too
* Error on no files found for upload
Co-authored-by: Siegfried Pammer <siegfriedpammer@gmail.com>