Uh oh!
There was an error while loading. Please reload this page.
Switch from Newtonsoft to MessagePack restore in fsi tests - #20205
Conversation
✅ No release notes required |
The two FsiCliTests that exercise `#r "nuget:"` restore hardcoded Newtonsoft.Json 13.0.3. After central package management with transitive pinning was enabled, only the centrally-pinned version is restored into the offline cache used by the internal signed build, so requesting 13.0.3 failed there (version-resolution NUxxxx diagnostics on stdout). Instead of hardcoding a version (which would silently drift on every central bump), bake the centrally-pinned version into the test assembly via AssemblyMetadata and read it at runtime. Switch the target package from Newtonsoft.Json (a removal candidate) to MessagePack, which is actively maintained, published on public nuget.org (so online public CI restore works) and centrally pinned + restored transitively by the product (so it is present in the internal offline cache). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d1550-25ab-4466-ae43-8c7f106f4e49
T-Gro
left a comment
There was a problem hiding this comment.
🤖 This review was generated by AI (@expert-reviewer agent). Findings may contain inaccuracies — please verify independently.
No significant correctness, security, or performance issues found. The approach is sound and I verified the key mechanics locally:
- MSBuild transform works:
@(PackageVersion->WithMetadataValue('Identity','FsCheck')->'%(Version)')correctly resolves to the centrally-pinned2.16.6and is baked into the test assembly'sAssemblyMetadataat static evaluation (confirmed via an isolated CPM repro). Note:-getPropertyshows the raw expression, but the itemValueis expanded at evaluation time as expected. - Runtime read is robust: reading
AssemblyMetadataAttributewithArray.tryPick+Option.defaultWith (failwith ...)fails loudly if the metadata is missing, rather than silently requesting an empty version. - Offline-cache premise holds:
FsCheck 2.16.6is an actualPackageReferenceoftests/FSharp.Core.UnitTests, so it lands in the offline restore cache. Its only transitive dependency isFSharp.Core [4.2.3, ), which is always cached — so the FSI#r "nuget: FsCheck, ..."restore has everything it needs offline.
Minor (non-blocking) nit: the fsproj comment calls FsCheck a "standalone leaf library," but it does depend on FSharp.Core. That dependency is always cached, so it does not affect correctness — you may just want to soften the wording.
abonie
commented
Aug 5, 2026
@T-Gro Switched again from FsCheck to MessagePack |
Uh oh!
There was an error while loading. Please reload this page.
) * Bump Newtonsoft version restored in fsi tests * Switch from Newtonsoft to FsCheck for #r test * Make FSI nuget-restore tests robust to central package management The two FsiCliTests that exercise `#r "nuget:"` restore hardcoded Newtonsoft.Json 13.0.3. After central package management with transitive pinning was enabled, only the centrally-pinned version is restored into the offline cache used by the internal signed build, so requesting 13.0.3 failed there (version-resolution NUxxxx diagnostics on stdout). Instead of hardcoding a version (which would silently drift on every central bump), bake the centrally-pinned version into the test assembly via AssemblyMetadata and read it at runtime. Switch the target package from Newtonsoft.Json (a removal candidate) to MessagePack, which is actively maintained, published on public nuget.org (so online public CI restore works) and centrally pinned + restored transitively by the product (so it is present in the internal offline cache). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d1550-25ab-4466-ae43-8c7f106f4e49 --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d1550-25ab-4466-ae43-8c7f106f4e49
* Switch from Newtonsoft to MessagePack restore in fsi tests (#20205) * Bump Newtonsoft version restored in fsi tests * Switch from Newtonsoft to FsCheck for #r test * Make FSI nuget-restore tests robust to central package management The two FsiCliTests that exercise `#r "nuget:"` restore hardcoded Newtonsoft.Json 13.0.3. After central package management with transitive pinning was enabled, only the centrally-pinned version is restored into the offline cache used by the internal signed build, so requesting 13.0.3 failed there (version-resolution NUxxxx diagnostics on stdout). Instead of hardcoding a version (which would silently drift on every central bump), bake the centrally-pinned version into the test assembly via AssemblyMetadata and read it at runtime. Switch the target package from Newtonsoft.Json (a removal candidate) to MessagePack, which is actively maintained, published on public nuget.org (so online public CI restore works) and centrally pinned + restored transitively by the product (so it is present in the internal offline cache). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d1550-25ab-4466-ae43-8c7f106f4e49 --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d1550-25ab-4466-ae43-8c7f106f4e49 * Switch to FsCheck for fsi restore tests (#20210) * Switch to FsCheck for fsi restore tests MessagePack has dependencies on net472 that are not cached on signed builds. FsCheck depends on FSharp.Core, but that should be cached. * Add logging in case of failed test * Bump FSharp.Core servicing version to 10.1.401 10.1.400 is already published on nuget.org, so Check_Published_Package_Versions FSCore fails. Bump FSBuildVersion 400->401. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7d778863-b4d5-4e3d-95ba-980fd2eafc81 --------- Co-authored-by: Adam Boniecki <20281641+abonie@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: df9d1550-25ab-4466-ae43-8c7f106f4e49 Copilot-Session: 7d778863-b4d5-4e3d-95ba-980fd2eafc81
Signed build fails because (I think) it tries to resolve offline and the previous Newtonsoft version is no longer cached.
Switching to MessagePack instead of Newtonsoft and using a centrally managed version to avoid future regressions of this kind.