The installer's managed custom actions called JObject.ToString(Formatting),
which binds to a single-argument overload added only in Newtonsoft.Json 13.0.4.
Because every Newtonsoft.Json 13.x release shares AssemblyVersion 13.0.0.0, the
CLR loads whatever 13.x copy is in the GAC ahead of the one bundled in the SFXCA
payload. When an older 13.x is present in the GAC (commonly installed by RDM,
PowerShell 7, Dell Command, and similar products), the call throws
MissingMethodException and the entire installation rolls back.
Forcing the two-argument ToString(Formatting, params JsonConverter[]) overload,
which exists in every 13.x release, makes the custom actions immune to whichever
13.x wins assembly resolution.
Issue: DGW-XXXX
Fixes a failure where installing or reconfiguring the Devolutions Agent could roll back with a
MissingMethodExceptionon machines that already have an older Newtonsoft.Json in the Global Assembly Cache (GAC).The installer's managed (DTF) custom actions formatted
agent.jsonviaJObject.ToString(Formatting). That single-argument overload was introduced in Newtonsoft.Json 13.0.4, and the installer references 13.0.4. However, every Newtonsoft.Json 13.x release ships the sameAssemblyVersion(13.0.0.0), so the CLR loads whichever 13.x copy is registered in the GAC in preference to the one bundled in the custom-action (SFXCA) payload. When an older 13.x is present in the GAC — commonly installed by Remote Desktop Manager, PowerShell 7, Dell Command, and many other products — the call fails with:and the whole MSI transaction rolls back during
ConfigureFeatures.The fix forces the two-argument
ToString(Formatting, params JsonConverter[])overload (by passing an empty converter array) at all three call sites. That overload exists in every 13.x release, so the custom actions now behave correctly no matter which 13.x wins assembly resolution. This required no version change and no change to what ships in the package.Affected: Agent 2026.2.2 (first build to reference 13.0.4).
The Gateway installer (
package/WindowsManaged) was checked as well. It references 13.0.3 and makes noToString(Formatting)calls, so it is not affected today — though it shares the same structural exposure (strong-named Newtonsoft loaded by DTF custom actions, subject to GAC precedence) and should adopt the same overload discipline if it is ever bumped to 13.0.4+.Reference: JamesNK/Newtonsoft.Json#3084
Issue: DGW-396