92 Commits
Author SHA1 Message Date
Christoph Wille c2d51a80b9 Remove DiasymReader from restore entirely (update other NuGet packages as well) 2026-10-05 08:01:59 +02:00
Siegfried Pammer 1332609cb5 Remove the DEBUG-only Pdb2Xml command and its DiaSymReader packages
Microsoft.DiaSymReader.Converter.Xml was the only reason the app referenced
the DiaSymReader chain, and it dragged the NETStandard.Library 1.6.1 shim set
with it: 77 packages in ILSpy's lock file, several of them needing security
overrides to keep NuGet audit quiet. The command itself only ever ran on
Windows, because the converter reaches into native COM.

Nothing is lost that the tooling cannot do without it. ilspycmd prints the
metadata tables, and Mono.Cecil's symbol readers - already a dependency, and
already what DebugInfoUtils falls back to for a Windows PDB - read both PDB
formats in managed code on every OS.

Assisted-by: Claude:claude-opus-5:Claude Code
2026-10-02 07:44:55 +02:00
Christoph Wille 067122455a NuGet September 2026 Updates including .NET 11 RC1 with nearest Roslyn 2026-09-09 07:15:11 +02:00
Christoph Wille 7a08c6c57d Update NuGet packages; adapt to Dock.Serializer.SystemTextJson 12.1.0.6
Dock 12.1.0.6 removed the public JsonConverterFactoryList/JsonConverterList<T>
converters from Dock.Serializer.SystemTextJson that ILSpyDockJson used to
deserialize IList<T> into ObservableCollection<T>. Dock now does the same
substitution with an internal JsonTypeInfo modifier that swaps CreateObject
for IList<T> enumerables. ILSpyDockJson mirrors that technique in its own
modifier chain, which also removes the per-element JsonSerializer.Serialize
side effect the old converter had.

Also bumps Xaml.Behaviors.Avalonia, ProDataGrid, AwesomeAssertions, CliWrap,
NUnit3TestAdapter, and the decompiler minor version to 11.1.

Assisted-by: Claude:claude-fable-5:Claude Code
2026-08-29 21:10:25 +02:00
Christoph Wille cdeae656fe NuGet August 2026 Updates (#3981)
* Set v11 RTM
* Update features in README.md
* Remove the two 900-iteration process-list scroll tests
* Keep Svg.Controls.Skia.Avalonia at 12.0.0.13
* 10.0.11 and Roslyn for net11p7
* Fix module-scan test failing when PowerShell's NGen images are stale
* Opt Pack NuGets out of the MSBuild server to fix SBOM generation
2026-08-11 21:56:11 +02:00
Christoph Wille bc8b1d1893 Avalonia 12.1.1 and Dock 12.1.0 2026-08-01 10:47:42 +02:00
Christoph Wille b888153f24 NuGet 07/26 updates and .NET 11 P6 Roslyn 2026-07-14 20:46:08 +02:00
Christoph Wille 71b71b5534 Avalonia 12.1 2026-07-10 17:18:57 +02:00
Siegfried Pammer 17b3539a20 Add a per-assembly target-framework override for reference resolution
ILSpy resolves an assembly's references against the target framework it
detects from the TargetFrameworkAttribute. When that attribute is missing,
wrong, or the user wants to force a different framework, there was no way to
hint the correct one, so references could resolve against the wrong runtime
pack or framework directory.

A LoadedAssembly can now carry a TargetFrameworkIdOverride that short-circuits
detection (it is the single value every LoadedAssembly-based resolution path
reads), is persisted in the assembly-list XML, and is carried across a reload
so a runtime change re-resolves against the new framework. The "Set Target
Framework" context-menu entry edits it through a dialog with a free-form text
box and an always-visible list of common monikers to pick from (the app forces
overlay popups, so a dropdown would be clamped inside the small dialog); input
is validated and converted from the short TFM users know (net48) to the long
FrameworkName form the resolver consumes (.NETFramework,Version=v4.8) via
NuGet. The direct DetectTargetFrameworkId callers in the decompiler core
(project export, language version) intentionally keep reading the real
attribute; only reference resolution is overridden.

Resurrects a 2020 prototype (branch tfmoverride) re-implemented against the
current ILSpyX/Avalonia code, whose surrounding structures no longer matched.

Assisted-by: Claude:claude-opus-4-8:Claude Code
2026-07-01 05:50:11 +02:00
Siegfried Pammer 51aafa0fd9 Move ILSpy UI code back to the ICSharpCode.ILSpy root namespace
The Avalonia port had placed the UI app in an ILSpy.* namespace tree,
while the csproj RootNamespace and every prior release (through 10.1)
use ICSharpCode.ILSpy.*. Restoring the historical namespace reduces the
public API diff against release/10.1 for plugin authors and removes the
shadowing that forced global:: qualifiers in the test project. The
Images class and AccessOverlayIcon enum move back into the root
namespace (as in 10.1), since an ICSharpCode.ILSpy.Images namespace
would shadow the Images class for all code inside ICSharpCode.ILSpy.

Assisted-by: Claude:claude-fable-5:Claude Code
2026-06-12 21:12:07 +02:00
Christoph Wille 358ec20dd9 Add Open from NuGet feed dialog for browsing and opening packages
Opening a package from a feed previously meant downloading the .nupkg by
hand and using File > Open (#2313). The new File menu command searches any
public V3 feed (editable package-source list, persisted as an MRU in the
ILSpy settings), offers the latest 100 versions in a dropdown, and downloads
into the NuGet global packages folder so the cache is shared with every
other NuGet consumer on the machine and nothing is fetched twice. The cached
.nupkg is then opened exactly like the regular Open command. Feed access
sits behind INuGetFeedClient so the headless test suite covers search,
paging, version selection, download, cancellation, and error surfacing
without touching the network.

Assisted-by: Claude:claude-fable-5:Claude Code
2026-06-10 21:51:56 +02:00
Christoph Wille da57bad452 Merge pull request #3758 from icsharpcode/christophwille/nu0626
NuGet June 2026 Updates
2026-06-10 16:21:11 +02:00
Siegfried Pammer 87748e0cde Override vulnerable transitive packages from the DiaSymReader chain
The Microsoft.DiaSymReader / .PortablePdb packages pull NETStandard.Library
1.6.1, which drags in 4.3.0 builds of System.Net.Http, System.Private.Uri
and System.Text.RegularExpressions, all carrying known advisories (NU1902/
NU1903). They are framework-provided at runtime on net10.0; pin the patched
4.3.4 / 4.3.2 / 4.3.1 via central transitive pinning so NuGet audit passes.
Enabling transitive pinning also aligns a handful of other transitive
packages to their declared central versions.

Assisted-by: Claude:claude-opus-4-8:Claude Code
2026-06-10 00:11:56 +02:00
Siegfried Pammer 8488e5e214 Reference DiaSymReader on every OS so the lock file is OS-stable
The Pdb2Xml command (ILSpy) and the PDB round-trip tests (Decompiler.Tests)
reference Microsoft.DiaSymReader*, previously gated on the build host being
Windows. That made dotnet restore resolve a different graph on Windows than
on Linux -- the packages (and their transitive tail: DiaSymReader.PortablePdb,
the legacy NETCore.Platforms/Win32 packages) appear only on Windows, and
DiaSymReader.Native flips between Direct and CentralTransitive. So a checkout
could not be developed across OSes without the committed packages.lock.json
churning on every Windows restore.

Drop the OS gate (keep Debug-only) so the restored graph, and the committed
lock, are identical on every OS. The consuming code is still gated by DEBUG
and WINDOWS, so on non-Windows the packages are restored but never compiled
in; the native asset only resolves for win-* RIDs.

The "Verify package contents" step (which checks the committed *.filelist
snapshots still match the built VSIX/MSI contents) had been excluding
packages.lock.json from its git diff to tolerate that per-OS churn. With the
locks now identical across OSes the carve-out is unnecessary, so it goes back
to a plain git diff --exit-code.

Assisted-by: Claude:claude-opus-4-8:Claude Code
2026-06-10 00:11:55 +02:00
Siegfried Pammer 667f6ad5f8 Add pwsh dev scripts, repo-wide lock files, and CI NuGet caching
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
2026-06-09 00:58:19 +02:00
Siegfried Pammer 461faeda58 Port the sample plugin to Avalonia
TestPlugin was still WPF (net10.0-windows, UseWpf, System.Windows,
TomsToolbox, the old ICSharpCode.ILSpy namespace), so it could not load
into the cross-platform app. Re-target it to net10.0 and map each
extension point onto the port's contracts: the custom Language, About-page
addition, context-menu entry, main-menu/toolbar command, and an Avalonia
options page whose view the ViewLocator resolves by naming convention. The
command needs [ImportingConstructor] for System.Composition to satisfy its
service dependency. Reference it build-only from the tests (no DLL copied
into the test output) so a composition test can load it without the
headless app auto-loading the plugin into every other test.

Assisted-by: Claude:claude-opus-4-8:Claude Code
2026-06-08 18:34:56 +02:00
tom-englert 1cfc5e740b Do not use ObservableObject when ObservableObjectBase is sufficient. (#3644)
* Do not use ObservableObject when ObservableObjectBase is sufficient.
2025-12-25 12:30:43 +01:00
Peter Crabtree e1e16b64f5 dev: Strip BOM mark from text files 2025-08-28 20:56:19 -04:00
Siegfried Pammer b6dc9fcfa9 Move more of the settings infrastructure to ILSpyX for reuse. 2025-07-06 17:39:06 +02:00
Siegfried Pammer e4ebe20602 Upgrade dotnet target framework to net10 2025-07-04 19:08:07 +02:00
tom-englert 560d89a42f Get rid of singletons, replace with DI: MainWindow, Settings and Language service 2024-10-26 10:48:27 +02:00
tom-englert 0be506bd4e Get rid of the heavy System.ComponentModel.Composition, replace with the lightweight System.Composition.AttributedModel 2024-10-22 05:41:52 +02:00
tom-englert da0117680b Fix some minor design flaws in new code. 2024-09-14 15:03:54 +02:00
tom-englert 2454cd3a99 Consolidate all options/settings to use a consistent WFP MVVM pattern. 2024-09-14 14:29:31 +02:00
tom-englert 8fe9514dfe refactor DecompilerSettings to MVVM model first design 2024-09-14 14:29:31 +02:00
tom-englert ca687e2394 Refactor OptionsDialog to use MVVM style 2024-09-14 14:29:30 +02:00
tom-englert 152f70e789 ILSpyX: remove InternalsVisibleTo for ILSpy + remove some redundant code. 2024-09-14 14:29:30 +02:00
tom-englert 0c1c5cecd7 Decouple AssemblyListPane from MainWindow 2024-09-14 14:29:30 +02:00
tom-englert 610b0c2ed5 Annotate service lifetime explicitly. 2024-08-19 15:06:13 +02:00
Christoph Wille d1c7a51a1d Remove dangling project references for SharpTreeView (#3245) 2024-07-29 18:24:42 +02:00
Siegfried Pammer ca78d4a14d Use MetadataFile instead of PEFile in TypeSystem. 2024-03-24 15:35:13 +01:00
Siegfried PammerandChristoph Wille a94d66561a Move to .NET 8.0 (#3119)
* Basics of net8.0. Breaking unit tests expected.

* Missed that TestRunner project was already upgraded to net7.0 (search and replace fail)

* Use Preview 6 locally

* Use .NET 8.0 RTM

* Final fixups

---------

Co-authored-by: Christoph Wille <[email protected]>
2023-11-17 20:23:38 +01:00
Christoph Wille 003a2b45b4 Move Settings to ILSpyX (#2869)
* Move ILSpySettings to ILSpyX
* Make settings file path configurable using a static provider interface
* Move MiscSettings to ILSpyX, rename existing to MiscSettingsVieModel
* Introduce static Load for DecompilerSettings on interface
* Add path provider for ilspycmd parameter scenario
* Allow for saving of MiscSettingsPanel
* Rename DisplaySettings to DisplaySettingsViewModel
* Add SaveDecompilerSettings
2022-12-19 07:40:06 +01:00
Charlie Lin 65d1cbcdd5 Add EnableWindowsTargeting propery to csprojs targeting net6.0-windows 2022-07-16 19:34:54 -05:00
Daniel Grunwald 08ceffc3ad Upgrade dotnet-format from version 5 to the version included with the .NET (6) SDK. 2022-07-15 12:09:13 +02:00
Siegfried Pammer 9b36f33f5c Fix CA1416: Properly specify SupportedOSPlatform in all platform-specific assemblies. 2022-03-07 14:44:54 +01:00
Christoph Wille a794a56a10 Fix up ILSpy.Tests + <Project> tag for all projects 2022-02-07 20:18:23 +01:00
Siegfried Pammer 9e54b44b11 Move ILSpy to net6.0-windows 2022-02-06 17:34:30 +01:00
Siegfried Pammer f7be178d18 Fixes #2605: Add possibility to add submenu items 2022-01-24 12:25:24 +01:00
Christoph Wille ecec2075d8 Go back to single tfm (net472) 2021-02-28 19:02:04 +01:00
Christoph Wille 1c26331bbd Clean up project files for Windows SDK Desktop style (maybe some resource are wacky) 2021-02-27 14:02:30 +01:00
Christoph Wille a0aeac5628 Doesn't work:
* plugin loading in App.xaml.cs (#if NET472)
* OSVersionHelper bombs with PlatformNotSupportedException (#if NET472)
* ILSpyTraceListener - this needs something different in net5
2021-02-27 09:58:38 +01:00
Siegfried Pammer 43143a0cb7 Update the following nuget packages to the latest stable version:
* Dirkster.AvalonDock
* System.Composition
* OSVersionHelper
* DataGridExtensions
* Microsoft.Xaml.Behaviors.Wpf
2021-02-22 16:59:26 +01:00
dotnet format 0d9f871a4f #2128: Reformat the whole code base. 2020-08-28 01:05:38 +02:00
Siegfried Pammer 8991861f4d Fix TestPlugin/CustomOptionPage 2019-12-10 16:10:36 +01:00
Christoph Wille 28be4a755b Switch to net472, of note:
* app.config.template fewer asm redirects, but coll.immutable is necessary
2019-09-02 13:13:48 +02:00
Oren Novotny 8a31bf30bc IDE cleanup 2019-06-05 10:43:52 -04:00
Oren Novotny b88d8b047f Switch to UseWpf for compat with Extras 2.x and .NET Core SDK 3 2019-06-04 16:41:28 -04:00
Christoph Wille 29e05778c6 See #1416. Also upgraded Cecil to .3 (from .1) 2019-02-14 10:41:43 +01:00
Sam Harwell ea930e025c Switch to MSBuild.Sdk.Extras for WPF support 2019-01-16 11:09:09 -06:00