From c311f3ba9e356201d42c3d5901d40d4ce30f8362 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 21:25:22 +0200 Subject: [PATCH 01/24] Add Directory.Packages.props + eng/Packages.props (CPM central list) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Directory.Packages.props | 13 ++++++ eng/Packages.props | 89 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 Directory.Packages.props create mode 100644 eng/Packages.props diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 00000000000..68c415e3d58 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,13 @@ + + + + true + true + + $(NoWarn);NU1507 + + + + + diff --git a/eng/Packages.props b/eng/Packages.props new file mode 100644 index 00000000000..8d11de70781 --- /dev/null +++ b/eng/Packages.props @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From bf9c62631fcf92e676ddd8fb5fb436f6fd0fc6c8 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 21:30:32 +0200 Subject: [PATCH 02/24] Opt auxiliary/consumer subtrees out of CPM Uses ImportDirectoryPackagesProps=false (reliable subtree opt-out; a Directory.Build.props-level ManagePackageVersionsCentrally=false is overridden by the later root Directory.Packages.props import). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../skills/fsharp-diagnostics/server/Directory.Build.props | 2 ++ buildtools/checkpackages/Directory.Build.props | 2 ++ docs/fcs-samples/Directory.Build.props | 7 +++++++ setup/Swix/Directory.Build.props | 2 ++ tests/AheadOfTime/Directory.Build.props | 5 +++++ tests/EndToEndBuildTests/Directory.Build.props | 2 ++ tests/benchmarks/Directory.Build.props | 2 ++ tests/fsharp/SDKTests/Directory.Build.props | 2 ++ tests/projects/CompilerCompat/Directory.Build.props | 7 +++++++ 9 files changed, 31 insertions(+) create mode 100644 docs/fcs-samples/Directory.Build.props create mode 100644 tests/projects/CompilerCompat/Directory.Build.props diff --git a/.github/skills/fsharp-diagnostics/server/Directory.Build.props b/.github/skills/fsharp-diagnostics/server/Directory.Build.props index 5a08e96c89f..48e48f88427 100644 --- a/.github/skills/fsharp-diagnostics/server/Directory.Build.props +++ b/.github/skills/fsharp-diagnostics/server/Directory.Build.props @@ -3,6 +3,8 @@ Also blocks Directory.Build.targets import. --> false + + false $(MSBuildThisFileDirectory)../../../../.tools/fsharp-diag/bin/ $(MSBuildThisFileDirectory)../../../../.tools/fsharp-diag/obj/ diff --git a/buildtools/checkpackages/Directory.Build.props b/buildtools/checkpackages/Directory.Build.props index a9a651c4a65..1aa11050403 100644 --- a/buildtools/checkpackages/Directory.Build.props +++ b/buildtools/checkpackages/Directory.Build.props @@ -3,6 +3,8 @@ + + false true $(MSBuildProjectDirectory)\..\..\artifacts\tmp\$([System.Guid]::NewGuid()) $(CachePath)\obj\ diff --git a/docs/fcs-samples/Directory.Build.props b/docs/fcs-samples/Directory.Build.props new file mode 100644 index 00000000000..21aa3b5274e --- /dev/null +++ b/docs/fcs-samples/Directory.Build.props @@ -0,0 +1,7 @@ + + + + + false + + diff --git a/setup/Swix/Directory.Build.props b/setup/Swix/Directory.Build.props index 0a9e6f4ecc5..3e43aa310f4 100644 --- a/setup/Swix/Directory.Build.props +++ b/setup/Swix/Directory.Build.props @@ -1,6 +1,8 @@ + + false true Microsoft.FSharp neutral diff --git a/tests/AheadOfTime/Directory.Build.props b/tests/AheadOfTime/Directory.Build.props index 6b0a85482a8..1b3244d845e 100644 --- a/tests/AheadOfTime/Directory.Build.props +++ b/tests/AheadOfTime/Directory.Build.props @@ -3,6 +3,11 @@ We can't import root Directory.Build.props because MSBuildThisFileDirectory would be wrong. --> + + + false + + $(MSBuildThisFileDirectory)/../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework) diff --git a/tests/EndToEndBuildTests/Directory.Build.props b/tests/EndToEndBuildTests/Directory.Build.props index f97db4e1684..5a62be6bafd 100644 --- a/tests/EndToEndBuildTests/Directory.Build.props +++ b/tests/EndToEndBuildTests/Directory.Build.props @@ -1,6 +1,8 @@ + + false net40 LatestMajor diff --git a/tests/benchmarks/Directory.Build.props b/tests/benchmarks/Directory.Build.props index ba9f0b7a4fa..e6b735ad57b 100644 --- a/tests/benchmarks/Directory.Build.props +++ b/tests/benchmarks/Directory.Build.props @@ -2,6 +2,8 @@ + + false true $(FSharpNetCoreProductTargetFramework) diff --git a/tests/fsharp/SDKTests/Directory.Build.props b/tests/fsharp/SDKTests/Directory.Build.props index b8ed27bf510..e0f9795a355 100644 --- a/tests/fsharp/SDKTests/Directory.Build.props +++ b/tests/fsharp/SDKTests/Directory.Build.props @@ -1,6 +1,8 @@ + + false false diff --git a/tests/projects/CompilerCompat/Directory.Build.props b/tests/projects/CompilerCompat/Directory.Build.props new file mode 100644 index 00000000000..d02e351a949 --- /dev/null +++ b/tests/projects/CompilerCompat/Directory.Build.props @@ -0,0 +1,7 @@ + + + + + false + + From 9a09158fd149eaaba4c1a8c84df83332aa9fbed7 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 21:36:03 +0200 Subject: [PATCH 03/24] CPM: reference MIBC optimization packages by identity only @(MIBCPackage) carries Version metadata (used by CopyMIBC); an item ->'%(Identity)' transform does NOT drop metadata, so list the five packages explicitly without a version. Versions come from the central eng/Packages.props entries. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Directory.Build.targets | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 4e5dab341de..6423eafa223 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -28,8 +28,16 @@ - - + + + + + + + From 738739848b757803d73744e6e792c088d8efc33f Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 21:37:34 +0200 Subject: [PATCH 04/24] CPM: remove inline Version from centralized PackageReferences Excludes opt-out subtrees, eng/common (Arcade-managed, not under CPM), and src/FSharp.Build/Microsoft.FSharp.NetSdk.props (ships to user projects). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Directory.Build.targets | 4 +-- buildtools/AssemblyCheck/AssemblyCheck.fsproj | 2 +- buildtools/fslex/fslex.fsproj | 2 +- buildtools/fsyacc/fsyacc.fsproj | 2 +- src/Compiler/FSharp.Compiler.Service.fsproj | 16 +++++----- src/FSharp.Build/FSharp.Build.fsproj | 14 ++++---- ...Sharp.Compiler.Interactive.Settings.fsproj | 2 +- .../FSharp.Compiler.LanguageServer.fsproj | 10 +++--- .../FSharp.DependencyManager.Nuget.fsproj | 8 ++--- .../FSharp.VisualStudio.Extension.csproj | 28 ++++++++-------- ...guageServerProtocol.Framework.Proxy.csproj | 4 +-- .../Microsoft.FSharp.Compiler.fsproj | 2 +- src/fsc/fsc.targets | 12 +++---- src/fsi/fsi.targets | 8 ++--- tests/Directory.Build.props | 10 +++--- .../FSharp.Build.UnitTests.fsproj | 8 ++--- .../FSharp.Compiler.ComponentTests.fsproj | 2 +- ...Sharp.Compiler.LanguageServer.Tests.fsproj | 4 +-- .../FSharp.Compiler.Service.Tests.fsproj | 4 +-- .../FSharp.Core.UnitTests.fsproj | 2 +- .../FSharp.Test.Utilities.fsproj | 32 +++++++++---------- tests/service/data/TestTP/TestTP.fsproj | 2 +- vsintegration/Directory.Build.targets | 30 ++++++++--------- .../VisualFSharp.Core.targets | 4 +-- .../src/FSharp.Editor/FSharp.Editor.fsproj | 12 +++---- .../FSharp.LanguageService.Base.csproj | 6 ++-- .../FSharp.LanguageService.fsproj | 16 +++++----- .../FSharp.ProjectSystem.Base.csproj | 12 +++---- .../FSharp.ProjectSystem.FSharp.fsproj | 12 +++---- .../FSharp.ProjectSystem.PropertyPages.vbproj | 6 ++-- .../src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 6 ++-- vsintegration/tests/Directory.Build.targets | 2 +- .../FSharp.Editor.IntegrationTests.csproj | 12 +++---- .../FSharp.Editor.Tests.fsproj | 20 ++++++------ .../tests/Salsa/VisualFSharp.Salsa.fsproj | 16 +++++----- .../UnitTests/VisualFSharp.UnitTests.fsproj | 24 +++++++------- 36 files changed, 178 insertions(+), 178 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 6423eafa223..eb370f28add 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -19,11 +19,11 @@ - + - + diff --git a/buildtools/AssemblyCheck/AssemblyCheck.fsproj b/buildtools/AssemblyCheck/AssemblyCheck.fsproj index 78d24349889..8023580df5a 100644 --- a/buildtools/AssemblyCheck/AssemblyCheck.fsproj +++ b/buildtools/AssemblyCheck/AssemblyCheck.fsproj @@ -23,7 +23,7 @@ - + diff --git a/buildtools/fslex/fslex.fsproj b/buildtools/fslex/fslex.fsproj index 3b8aafb532b..08f77151636 100644 --- a/buildtools/fslex/fslex.fsproj +++ b/buildtools/fslex/fslex.fsproj @@ -38,7 +38,7 @@ - + diff --git a/buildtools/fsyacc/fsyacc.fsproj b/buildtools/fsyacc/fsyacc.fsproj index ba57de811c9..42ea6e1bf36 100644 --- a/buildtools/fsyacc/fsyacc.fsproj +++ b/buildtools/fsyacc/fsyacc.fsproj @@ -38,7 +38,7 @@ - + diff --git a/src/Compiler/FSharp.Compiler.Service.fsproj b/src/Compiler/FSharp.Compiler.Service.fsproj index 5510af6b3f6..a7b3737a77b 100644 --- a/src/Compiler/FSharp.Compiler.Service.fsproj +++ b/src/Compiler/FSharp.Compiler.Service.fsproj @@ -621,17 +621,17 @@ - + - - - - - - - + + + + + + + diff --git a/src/FSharp.Build/FSharp.Build.fsproj b/src/FSharp.Build/FSharp.Build.fsproj index d7f814ce261..1e9799536be 100644 --- a/src/FSharp.Build/FSharp.Build.fsproj +++ b/src/FSharp.Build/FSharp.Build.fsproj @@ -82,16 +82,16 @@ - + - - - - - - + + + + + + diff --git a/src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj b/src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj index a8ecf73e065..0302ae845f5 100644 --- a/src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj +++ b/src/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj @@ -45,7 +45,7 @@ - + diff --git a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj index e1b1f0b35f9..78f889b0d55 100644 --- a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj @@ -8,10 +8,10 @@ - - - - + + + + @@ -28,7 +28,7 @@ - + diff --git a/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj b/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj index 500f3b32208..0e153fa5a50 100644 --- a/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj +++ b/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj @@ -51,13 +51,13 @@ - + - - - + + + diff --git a/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj b/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj index 862decf5606..b153755d1f3 100644 --- a/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj +++ b/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj @@ -12,20 +12,20 @@ - - - - - - + + + + + + diff --git a/src/Microsoft.CommonLanguageServerProtocol.Framework.Proxy/Microsoft.CommonLanguageServerProtocol.Framework.Proxy.csproj b/src/Microsoft.CommonLanguageServerProtocol.Framework.Proxy/Microsoft.CommonLanguageServerProtocol.Framework.Proxy.csproj index 97ac5ccaebe..5f29a0dac0c 100644 --- a/src/Microsoft.CommonLanguageServerProtocol.Framework.Proxy/Microsoft.CommonLanguageServerProtocol.Framework.Proxy.csproj +++ b/src/Microsoft.CommonLanguageServerProtocol.Framework.Proxy/Microsoft.CommonLanguageServerProtocol.Framework.Proxy.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.fsproj b/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.fsproj index 36d7036a22c..f685e300651 100644 --- a/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.fsproj +++ b/src/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.fsproj @@ -12,7 +12,7 @@ - + diff --git a/src/fsc/fsc.targets b/src/fsc/fsc.targets index c85dc1e66ab..e17481fc6f0 100644 --- a/src/fsc/fsc.targets +++ b/src/fsc/fsc.targets @@ -43,7 +43,7 @@ - + @@ -53,14 +53,14 @@ - - - + + + - - + + diff --git a/src/fsi/fsi.targets b/src/fsi/fsi.targets index cba9355e99f..b38960f7f0e 100644 --- a/src/fsi/fsi.targets +++ b/src/fsi/fsi.targets @@ -48,7 +48,7 @@ - + @@ -65,9 +65,9 @@ - - - + + + \ No newline at end of file diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index ccc7e44ffa3..de5bf2039c5 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -9,14 +9,14 @@ - - + + - + - + - + diff --git a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj index 2018b41cb92..0b489b6cc7c 100644 --- a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj +++ b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj @@ -25,13 +25,13 @@ - + - - - + + + diff --git a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj index 5070905529f..1b1e51e4f6f 100644 --- a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj +++ b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj @@ -547,7 +547,7 @@ - + diff --git a/tests/FSharp.Compiler.LanguageServer.Tests/FSharp.Compiler.LanguageServer.Tests.fsproj b/tests/FSharp.Compiler.LanguageServer.Tests/FSharp.Compiler.LanguageServer.Tests.fsproj index 181cc03f4d3..90993cf5b32 100644 --- a/tests/FSharp.Compiler.LanguageServer.Tests/FSharp.Compiler.LanguageServer.Tests.fsproj +++ b/tests/FSharp.Compiler.LanguageServer.Tests/FSharp.Compiler.LanguageServer.Tests.fsproj @@ -25,7 +25,7 @@ - + @@ -39,7 +39,7 @@ - + diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index 6193e4f73a4..96dab0df203 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -93,9 +93,9 @@ - + - + TargetFramework=netstandard2.0 diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj index d4ff59d3cbd..1694e8eb4ca 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj +++ b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj @@ -98,6 +98,6 @@ - + diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index a4f64a0f893..194e2d8f19f 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -54,7 +54,7 @@ - + @@ -65,19 +65,19 @@ - + runtime; native all - + runtime; native all - + runtime; native all - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -94,24 +94,24 @@ - - + + $(NoWarn);NU1510;44 - - - - - - + + + + + + - - - + + + diff --git a/tests/service/data/TestTP/TestTP.fsproj b/tests/service/data/TestTP/TestTP.fsproj index 4bf7e293c3a..3c421bdbe21 100644 --- a/tests/service/data/TestTP/TestTP.fsproj +++ b/tests/service/data/TestTP/TestTP.fsproj @@ -18,7 +18,7 @@ - + diff --git a/vsintegration/Directory.Build.targets b/vsintegration/Directory.Build.targets index 16099d6637c..381557267a2 100644 --- a/vsintegration/Directory.Build.targets +++ b/vsintegration/Directory.Build.targets @@ -3,22 +3,22 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets b/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets index 674c3487ac7..db4b3097d66 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets @@ -260,8 +260,8 @@ - - + + diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 68206f698bd..f3659cb5cb6 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -177,12 +177,12 @@ - - - - - - + + + + + + diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index fbf420a0741..3a71ba25a3c 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -46,9 +46,9 @@ - - - + + + diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index 848ba3fcf67..ead290f6ec0 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -56,14 +56,14 @@ - - - - - - - - + + + + + + + + diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj index be6eb82d080..94b99d9c8f0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj +++ b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj @@ -39,12 +39,12 @@ - - - - - - + + + + + + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj index da59e918292..97811017810 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj @@ -104,12 +104,12 @@ - - - - - - + + + + + + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj index e964555f55f..4b2657c9977 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj @@ -46,9 +46,9 @@ - - - + + + diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index 95878c043b9..f0c46d0bfe4 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -57,9 +57,9 @@ - - - + + + diff --git a/vsintegration/tests/Directory.Build.targets b/vsintegration/tests/Directory.Build.targets index 2bbbb8d4d4c..1b4f33eed3a 100644 --- a/vsintegration/tests/Directory.Build.targets +++ b/vsintegration/tests/Directory.Build.targets @@ -5,6 +5,6 @@ - + diff --git a/vsintegration/tests/FSharp.Editor.IntegrationTests/FSharp.Editor.IntegrationTests.csproj b/vsintegration/tests/FSharp.Editor.IntegrationTests/FSharp.Editor.IntegrationTests.csproj index 374c8164a5b..b68a4d941dc 100644 --- a/vsintegration/tests/FSharp.Editor.IntegrationTests/FSharp.Editor.IntegrationTests.csproj +++ b/vsintegration/tests/FSharp.Editor.IntegrationTests/FSharp.Editor.IntegrationTests.csproj @@ -27,12 +27,12 @@ - - - - - - + + + + + + diff --git a/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj b/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj index 0d05a915760..af5090a2b3f 100644 --- a/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj +++ b/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj @@ -92,12 +92,12 @@ - - + + - - - + + + @@ -106,11 +106,11 @@ - - - - - + + + + + diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index 83d89379565..1dd626fc421 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -53,14 +53,14 @@ - - - - - - - - + + + + + + + + diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index cf8cc25e837..0eef235185e 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -117,19 +117,19 @@ - - + + - - - - - - - - - - + + + + + + + + + + From 1903144a38f486d1533fdeeef679c445344dae24 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 21:39:29 +0200 Subject: [PATCH 05/24] CPM: VersionOverride for VS.Threading/StreamJsonRpc divergences These LSP/VS-integration projects pin older VS 17.x versions than the central 18.x baseline; VersionOverride preserves their exact versions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../FSharp.Compiler.LanguageServer.fsproj | 5 +++-- .../FSharp.VisualStudio.Extension.csproj | 3 ++- ...osoft.CommonLanguageServerProtocol.Framework.Proxy.csproj | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj index 78f889b0d55..70a237bf6af 100644 --- a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj @@ -10,8 +10,9 @@ - - + + + diff --git a/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj b/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj index b153755d1f3..ac719f3b6f6 100644 --- a/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj +++ b/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj @@ -16,7 +16,8 @@ - + + + From 7696ccc953b2a884633647ad04909abe6672175d Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 21:48:22 +0200 Subject: [PATCH 06/24] CPM: resolve NU1109 downgrades (S.S.C.Xml 10.0.9, DI 10.0.0) MSBuild 18.10 pulls System.Security.Cryptography.Xml >= 10.0.9 transitively and OpenTelemetry pulls Microsoft.Extensions.DependencyInjection >= 10.0.0; raise the central pins to those floors so transitive pinning does not downgrade them. Source-build keeps the live S.S.C.Xml via a non-source-build-gated override, and FSharp.Compiler.LanguageServer (net8) keeps DI 8.0.0 via VersionOverride. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Packages.props | 5 ++++- eng/Versions.props | 4 ++++ .../FSharp.Compiler.LanguageServer.fsproj | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/eng/Packages.props b/eng/Packages.props index 8d11de70781..e32bd8a0744 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -26,7 +26,10 @@ - + + diff --git a/eng/Versions.props b/eng/Versions.props index 8f756067e4d..c05d21c611d 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -90,6 +90,10 @@ 4.6.3 6.1.2 + + 10.0.9 diff --git a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj index 70a237bf6af..50a1a22ebd5 100644 --- a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj @@ -8,7 +8,7 @@ - + From 4fb92191e818452f5abd04e25a0f614cc936852f Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 21:49:51 +0200 Subject: [PATCH 07/24] CPM: resolve NU1109 for System.Collections.Immutable / System.Reflection.Metadata MSBuild 18.10 also pulls these dotnet/runtime packages >= 10.0.9 transitively; raise their central pins to the same 10.0.9 floor (non-source-build only, source-build keeps the live versions). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Versions.props | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index c05d21c611d..a97ea843f92 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -90,10 +90,12 @@ 4.6.3 6.1.2 - + 10.0.9 + 10.0.9 + 10.0.9 From 51cf0712ebc475871a513a91092b34fc236a7712 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 22:06:53 +0200 Subject: [PATCH 08/24] CPM: resolve VS-integration NU1109 + MIBC opt-out NU1015 VisualFSharp.slnx surfaced two more CPM issues: - MIBC packages (added to every project by Directory.Build.targets) lacked a version in CPM-opt-out subtrees (setup/Swix) -> NU1015. Split the ItemGroup so opt-out projects carry @(MIBCPackage) Version metadata while CPM projects stay identity-only. - The VS SDK (18.9.496, via Microsoft.CodeAnalysis.ExternalAccess.FSharp) pulls several VS packages higher than the declared 18.0.x pins; under transitive pinning these downgraded. Raised the editor group to 18.9.123 and pinned Shell.Design/Package.LanguageService.15.0 (18.9.493), Designer.Interfaces (18.9.438), Nullable (1.3.1) and LanguageServer.Protocol (17.13.9) to the versions already resolved transitively. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Directory.Build.targets | 7 ++++++- eng/Packages.props | 5 +++-- eng/Versions.props | 14 ++++++++++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index eb370f28add..10ec1d66468 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -32,13 +32,18 @@ eng/Packages.props. @(MIBCPackage) carries Version metadata (needed by CopyMIBC to locate the restored .mibc under the package cache), which must not appear on a PackageReference under Central Package Management (NU1008). Guarded by the same IgnoreMIBC switch as the item list. --> - + + + + + - + @@ -70,7 +70,8 @@ - + + diff --git a/eng/Versions.props b/eng/Versions.props index a97ea843f92..d60a8f315ac 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -105,7 +105,10 @@ 4.7.0 1.6.0 - 18.0.404-preview + + 18.9.123 18.0.2188-preview.1 18.0.1237-pre 18.0.2077-preview.1 @@ -120,11 +123,14 @@ 18.9.438 18.9.438 18.9.438 - $(MicrosoftVisualStudioShellPackagesVersion) + + 18.9.493 $(MicrosoftVisualStudioShellPackagesVersion) - $(MicrosoftVisualStudioShellPackagesVersion) + 18.9.493 $(VisualStudioShellProjectsPackages) - $(MicrosoftVisualStudioShellPackagesVersion) + 18.9.438 10.0.30319 11.0.50727 15.0.25123-Dev15Preview From bf26b87b52f19f568019cf84c770ade487c456f2 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 22:08:50 +0200 Subject: [PATCH 09/24] CPM: suppress NU1507 multi-source warning after project bodies NoWarn set in Directory.Packages.props is discarded by projects that reset NoWarn in their body (e.g. tests set 3186). Move the NU1507 suppression to Directory.Build.targets, which is imported after project bodies, so it applies to every CPM project. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Directory.Build.targets | 7 +++++++ Directory.Packages.props | 3 --- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 10ec1d66468..87dbbc5bc89 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -3,6 +3,13 @@ + + + $(NoWarn);NU1507 + + From 4714094a50789600947dbd6bf35bbf67f6e83971 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 22:56:52 +0200 Subject: [PATCH 10/24] CPM: darc-aware System.* central floor to preserve nuspec + source-build The MSBuild 18.10 toolchain (fsc/fsi and FSharp.Build.UnitTests) pulls System.Collections.Immutable / System.Reflection.Metadata / System.Security.Cryptography.Xml transitively at >= 10.0.9, so the CPM transitive pin must meet that floor. Introduce dedicated System*CentralVersion properties for the central list instead of overriding the darc-flowed System*Version properties, which must stay authoritative for source-build and for FSharp.Compiler.Service's shipped nuspec dependency metadata (FCS does not pull MSBuild). The floor only raises when darc is below 10.0.9; once darc flows a higher version, darc wins. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Packages.props | 6 +++--- eng/Versions.props | 22 ++++++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/eng/Packages.props b/eng/Packages.props index 78390aabd48..0e423e6c2a3 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -75,14 +75,14 @@ - + - + - + diff --git a/eng/Versions.props b/eng/Versions.props index d60a8f315ac..fbf868f6be8 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -90,12 +90,22 @@ 4.6.3 6.1.2 - - 10.0.9 - 10.0.9 - 10.0.9 + + $(SystemSecurityCryptographyXmlVersion) + $(SystemCollectionsImmutableVersion) + $(SystemReflectionMetadataVersion) + + + + 10.0.9 + 10.0.9 + 10.0.9 From 9198902bb256a8dc9b6159e762abc9af3865fa4a Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 22:57:08 +0200 Subject: [PATCH 11/24] CPM: version test-package refs in ImportDirectoryPackagesProps opt-out subtrees EndToEndBuildTests and other subtrees set ImportDirectoryPackagesProps=false and are not under CPM, so the central list does not apply and the versionless test PackageReferences would restore nothing silently. Add an inline-versioned Update ItemGroup guarded on ImportDirectoryPackagesProps=false, sourced from the same XunitVersion/etc. properties those subtrees already define. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- tests/Directory.Build.props | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index de5bf2039c5..e041384828f 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -19,6 +19,16 @@ + + + + + + + + + true From 796f53733573b6587c4282f7895f7ee7eb6085fd Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 22:57:16 +0200 Subject: [PATCH 12/24] CPM: address review nits (dead no-ops, comment noise, docs) - Remove three now-dead 'PackageReference Update=Microsoft.VSSDK.BuildTools' lines whose only purpose was the Version metadata the CPM strip removed; transitive pinning supplies the version. - Restore the Version attributes on the commented-out OpenTelemetry block the strip wrongly touched. - Drop trailing whitespace left on a stripped PackageReference in FSharp.Editor.fsproj. - Document why the LanguageServer.Protocol central pin is 17.13.9 and why MIBC identities are listed literally under CPM. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Directory.Build.targets | 15 +++++---------- eng/Packages.props | 2 ++ .../FSharp.VisualStudio.Extension.csproj | 18 +++++++++--------- .../src/FSharp.Editor/FSharp.Editor.fsproj | 2 +- .../FSharp.ProjectSystem.Base.csproj | 1 - .../src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 1 - 6 files changed, 17 insertions(+), 22 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 87dbbc5bc89..09f8b6f713a 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -25,20 +25,17 @@ $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fsyacc.dll - - - - - + @@ -46,8 +43,6 @@ - diff --git a/eng/Packages.props b/eng/Packages.props index 0e423e6c2a3..0ddecbf90d2 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -46,6 +46,8 @@ + diff --git a/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj b/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj index ac719f3b6f6..f2f8ab61ede 100644 --- a/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj +++ b/src/FSharp.VisualStudio.Extension/FSharp.VisualStudio.Extension.csproj @@ -18,15 +18,15 @@ - + diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index f3659cb5cb6..9c5013e0520 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -182,7 +182,7 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj index 94b99d9c8f0..379bfd8b328 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj +++ b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj @@ -44,7 +44,6 @@ - diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index f0c46d0bfe4..5827d12b71a 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -59,7 +59,6 @@ - From 6d4cc5a878e967eac2a6f62b70d3d129f505e82a Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Jul 2026 23:11:26 +0200 Subject: [PATCH 13/24] CPM: round 2 review polish (comment grouping, consistency) - eng/Versions.props: group the two shell properties still on the package-group version above the 'pinned to 18.9.x' comment so that comment sits only over the three literally pinned properties (value-preserving reorder). - tests/AheadOfTime/Directory.Build.props: fold the opt-out property into the adjacent PropertyGroup to match every other opt-out file. - FSharp.Compiler.LanguageServer.fsproj: note why the DI VersionOverride stays on 8.0.0. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Versions.props | 4 ++-- .../FSharp.Compiler.LanguageServer.fsproj | 1 + tests/AheadOfTime/Directory.Build.props | 3 --- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index fbf868f6be8..5aaef85665f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -129,6 +129,8 @@ $(MicrosoftVisualStudioShellPackagesVersion) $(VisualStudioShellProjectsPackages) + $(MicrosoftVisualStudioShellPackagesVersion) + $(VisualStudioShellProjectsPackages) 18.9.438 18.9.438 @@ -137,9 +139,7 @@ Microsoft.CodeAnalysis.ExternalAccess.FSharp), so under CPM transitive pinning they must be pinned to the required 18.9.x versions rather than the shell package group; otherwise NU1109. --> 18.9.493 - $(MicrosoftVisualStudioShellPackagesVersion) 18.9.493 - $(VisualStudioShellProjectsPackages) 18.9.438 10.0.30319 11.0.50727 diff --git a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj index 50a1a22ebd5..5737239de91 100644 --- a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj @@ -8,6 +8,7 @@ + diff --git a/tests/AheadOfTime/Directory.Build.props b/tests/AheadOfTime/Directory.Build.props index 1b3244d845e..7c6ff208af6 100644 --- a/tests/AheadOfTime/Directory.Build.props +++ b/tests/AheadOfTime/Directory.Build.props @@ -6,9 +6,6 @@ false - - - $(MSBuildThisFileDirectory)/../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework) From 043e6de6b371de86ea6dce22354581f09fb3749a Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 23 Jul 2026 12:09:37 +0200 Subject: [PATCH 14/24] CPM: remove dead version properties FSCoreProductVersion, MicrosoftVisualStudioInteropVersion, MicrosoftVisualStudioImagingInterop140DesignTimeVersion, and the three MicroBuild* setup versions had zero references repo-wide (grep-verified). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Versions.props | 8 -------- 1 file changed, 8 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 5aaef85665f..a1744d28112 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -28,7 +28,6 @@ 1 - $(FSMajorVersion).$(FSMinorVersion) $(FSMajorVersion).$(FSMinorVersion).$(FSBuildVersion) $(FSMajorVersion).$(FSMinorVersion).$(FSBuildVersion) $(FSMajorVersion).$(FSMinorVersion).0.0 @@ -127,8 +126,6 @@ 2.0.28 - $(MicrosoftVisualStudioShellPackagesVersion) - $(VisualStudioShellProjectsPackages) $(MicrosoftVisualStudioShellPackagesVersion) $(VisualStudioShellProjectsPackages) @@ -186,11 +183,6 @@ 17.14.2120 17.0.0 - - 0.2.0 - 1.0.0 - 1.1.87 - 0.13.10 2.16.6 From 4cbcb027d31b097a9861fefda673e6a515a2837a Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 23 Jul 2026 12:44:20 +0200 Subject: [PATCH 15/24] CPM: inline single-use package versions into eng/Packages.props Manually-pinned, single-use package versions previously defined as properties in eng/Versions.props solely to be referenced once by a in eng/Packages.props are now inlined as literals at the pin, removing the Versions.props<->Packages.props duality. Load-bearing rationale comments move with them. Genuinely shared version groups (VisualStudioEditorPackagesVersion, the System.* central floors, Xunit/ TestPlatform, FSharpCore*), darc/Maestro-flowed versions, and the Arcade-read MicrosoftVSSDKBuildToolsVersion stay as properties. Also drops the dead Dotnet.ProjInfo central pin (no remaining consumer). Net: eng/Versions.props shrinks 202 -> 138 lines. Restore/build unchanged (inlined values are byte-identical to MSBuild's prior resolution). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Packages.props | 86 ++++++++++++++++++++++++++-------------------- eng/Versions.props | 78 ++++------------------------------------- 2 files changed, 55 insertions(+), 109 deletions(-) diff --git a/eng/Packages.props b/eng/Packages.props index 0ddecbf90d2..17a7aa0515f 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -1,6 +1,7 @@ + Darc/Maestro-flowed and repo-shared versions are referenced as $(...) properties from + eng/Versions.props / eng/Version.Details.props. Manually-pinned, single-use packages carry + their literal version here directly (no indirection through eng/Versions.props). --> @@ -10,8 +11,7 @@ - - + @@ -21,61 +21,71 @@ - + - + - - - - - + + + + + - - - + + + + - - - - + + + + - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + - - + + - + diff --git a/eng/Versions.props b/eng/Versions.props index a1744d28112..fd6f21ece90 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -112,91 +112,27 @@ 4.7.0 - 1.6.0 - + + 18.9.123 - 18.0.2188-preview.1 - 18.0.1237-pre - 18.0.2077-preview.1 - 18.7.19 - - - 2.0.28 - - $(MicrosoftVisualStudioShellPackagesVersion) - $(VisualStudioShellProjectsPackages) - - 18.9.438 - 18.9.438 - 18.9.438 - - 18.9.493 - 18.9.493 - 18.9.438 - 10.0.30319 - 11.0.50727 - 15.0.25123-Dev15Preview - - - - $(VisualStudioEditorPackagesVersion) - $(VisualStudioEditorPackagesVersion) - $(VisualStudioEditorPackagesVersion) - - 18.9.123 - $(VisualStudioEditorPackagesVersion) - 17.14.0 0.1.800-beta - $(MicrosoftVisualStudioExtensibilityTestingVersion) - - - $(MicrosoftVisualStudioThreadingPackagesVersion) - - - 18.7.1 - 18.9.453 - 4.10.128 - 2.26.5 - - 1.0.52 - - - $(VisualStudioProjectSystemPackagesVersion) - 2.3.6152103 - - + 17.14.2120 - 17.0.0 - + 0.13.10 - 2.16.6 - 4.3.0-1.22220.8 - - 5.0.0-preview.7.20364.11 - 5.0.0-preview.7.20364.11 17.14.1 2.0.2 - 13.0.4 3.2.2 3.2.2 8.0.0 - From b171ea3f0adc5a9780ffbb4f9fa13b9afcb5155d Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 23 Jul 2026 12:44:30 +0200 Subject: [PATCH 16/24] CPM: drop direct package references now covered by transitive pinning With CentralPackageTransitivePinningEnabled, packages consumed only transitively no longer need direct s: - FSharp.Build: System.Security.Cryptography.Xml (dead historic override), System.Memory, System.Runtime.CompilerServices.Unsafe - FSharp.DependencyManager.Nuget: System.Reflection.Emit/Metadata/Unsafe (the ns2.0 plugin uses host-side System.Reflection, never emits IL) - fsc.targets: net472 System.Memory/Unsafe ItemGroup - FSharp.Compiler.Service.Tests: Newtonsoft.Json (redundant; transitive via FSharp.Test.Utilities and centrally pinned) System.Security.Cryptography.Xml now has zero direct references repo-wide; its central pin alone holds the secure version transitively. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- src/FSharp.Build/FSharp.Build.fsproj | 3 --- .../FSharp.DependencyManager.Nuget.fsproj | 6 ------ src/fsc/fsc.targets | 5 ----- .../FSharp.Compiler.Service.Tests.fsproj | 3 --- 4 files changed, 17 deletions(-) diff --git a/src/FSharp.Build/FSharp.Build.fsproj b/src/FSharp.Build/FSharp.Build.fsproj index 1e9799536be..90912e95fe2 100644 --- a/src/FSharp.Build/FSharp.Build.fsproj +++ b/src/FSharp.Build/FSharp.Build.fsproj @@ -89,9 +89,6 @@ - - - diff --git a/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj b/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj index 0e153fa5a50..a24d5b0e5d9 100644 --- a/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj +++ b/src/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj @@ -54,10 +54,4 @@ - - - - - - diff --git a/src/fsc/fsc.targets b/src/fsc/fsc.targets index e17481fc6f0..f54cb4b32a9 100644 --- a/src/fsc/fsc.targets +++ b/src/fsc/fsc.targets @@ -58,9 +58,4 @@ - - - - - diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index 96dab0df203..0c2a3014b6c 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -93,9 +93,6 @@ - - - TargetFramework=netstandard2.0 From 82b2ff5ab9c60fbe9b5112cd14fcf70fedfa006a Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 23 Jul 2026 14:48:11 +0200 Subject: [PATCH 17/24] =?UTF-8?q?CPM:=20compaction=20round=201=20=E2=80=94?= =?UTF-8?q?=20single-source=20floor,=20bind=20VSEditor,=20dedup=20comment,?= =?UTF-8?q?=20extract=20test=20predicate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round-1 of the cross-model compaction vote (unanimous 3/3 on each): - Single-source the 10.0.9 dotnet/runtime transitive floor into $(SystemRuntimeCentralFloorVersion) (was 6 literal occurrences). - Bind Microsoft.VisualStudio.Platform.VSEditor to the existing $(VisualStudioEditorPackagesVersion) group (removes a magic 18.9.123 literal). - De-duplicate the NU1109 editor-pin rationale comment (keep it in eng/Packages.props). - Extract the 4x-repeated test-runner name condition into $(_IsTestRunnerProject). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Packages.props | 6 +++--- eng/Versions.props | 13 +++++++------ tests/Directory.Build.props | 13 +++++++------ 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/eng/Packages.props b/eng/Packages.props index 17a7aa0515f..505afb89580 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -59,9 +59,9 @@ - + packages it is not pulled transitively, so it is pinned explicitly to match the editor interfaces via the + shared property; otherwise the VsMocks MEF catalog throws ReflectionTypeLoadException and every legacy VS unit test fails. --> + diff --git a/eng/Versions.props b/eng/Versions.props index fd6f21ece90..53b216552dc 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -102,9 +102,11 @@ - 10.0.9 - 10.0.9 - 10.0.9 + + 10.0.9 + $(SystemRuntimeCentralFloorVersion) + $(SystemRuntimeCentralFloorVersion) + $(SystemRuntimeCentralFloorVersion) @@ -116,9 +118,8 @@ - + 18.9.123 0.1.800-beta diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index e041384828f..311d1146e7c 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -5,10 +5,12 @@ true portable + + <_IsTestRunnerProject Condition="$(MSBuildProjectName.EndsWith('.Tests')) OR $(MSBuildProjectName.EndsWith('.ComponentTests')) OR $(MSBuildProjectName.EndsWith('.UnitTests'))">true - + @@ -21,7 +23,7 @@ - + @@ -30,7 +32,7 @@ - + true @@ -43,9 +45,8 @@ - + OutputType isn't available at props evaluation time, so this applies to all net472 test-runner projects. --> + x64 From 44ea24b62137280e2175fd5ab16eaee5c45f770a Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 23 Jul 2026 15:14:29 +0200 Subject: [PATCH 18/24] =?UTF-8?q?CPM:=20compaction=20round=202=20=E2=80=94?= =?UTF-8?q?=20drop=20dead=20xunit=20ItemGroup,=20trim=20duplicated=20polic?= =?UTF-8?q?y=20comment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round-2 of the cross-model compaction vote: - Delete the dead `UnitTestType == 'xunit'` ItemGroup in Directory.Build.targets: nothing ever sets UnitTestType to 'xunit' (only 'none'), and xunit.v3.mtp-v2 is already added to every test-runner project by tests/Directory.Build.props. (3/3) - Trim the inline-vs-property policy parenthetical in eng/Versions.props; the canonical statement already lives in the eng/Packages.props header. (2/3) Contested proposals that FAILED the vote (kept as-is): folding XunitRunnerConsoleVersion (genuine 3x use, coincidental value), removing per-file CPM opt-out comments, removing the pre-existing commented OpenTelemetry block, removing the EndToEnd version fallbacks (proven load-bearing in Arcade builds), hoisting VersionPrefix in the product-version block. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- Directory.Build.targets | 4 ---- eng/Versions.props | 4 +--- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 09f8b6f713a..a0ac2867bd2 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -25,10 +25,6 @@ $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fsyacc.dll - - - - 4.7.0 - + 18.9.123 From e7260a36496acc3a18789c747749bfde2d4d5755 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 24 Jul 2026 10:12:38 +0200 Subject: [PATCH 19/24] CPM: single-source xunit.v3.runner.console onto $(XunitVersion) The xunit.v3.* family (assert/common/extensibility.core/mtp-v2/runner.console) ships in lockstep; runner.console had a separate $(XunitRunnerConsoleVersion) property duplicating $(XunitVersion) (both 3.2.2) with no active deviation. Point the runner.console pin (and the EndToEnd opt-out override) at $(XunitVersion) and delete the redundant property + its EndToEnd fallback. Resolved version unchanged (3.2.2); restore + ./build.sh -c Release clean. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Packages.props | 2 +- eng/Versions.props | 1 - tests/Directory.Build.props | 2 +- tests/EndToEndBuildTests/Directory.Build.props | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/eng/Packages.props b/eng/Packages.props index 505afb89580..cbb72c6d8bd 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -99,7 +99,7 @@ - + diff --git a/eng/Versions.props b/eng/Versions.props index b4dcaea4f31..3f46baef6ba 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -130,7 +130,6 @@ 17.14.1 2.0.2 3.2.2 - 3.2.2 8.0.0 diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index 311d1146e7c..8eeb2b54e20 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -25,7 +25,7 @@ central list does not apply; supply the versions inline from the properties they define before this import. --> - + diff --git a/tests/EndToEndBuildTests/Directory.Build.props b/tests/EndToEndBuildTests/Directory.Build.props index 5a62be6bafd..d39ae0c5faf 100644 --- a/tests/EndToEndBuildTests/Directory.Build.props +++ b/tests/EndToEndBuildTests/Directory.Build.props @@ -7,7 +7,6 @@ LatestMajor 3.2.2 - 3.2.2 2.0.2 8.0.0 17.14.1 From 03e95d4f7718fa15b0f952544ca5cdbc40c969ad Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 24 Jul 2026 11:35:47 +0200 Subject: [PATCH 20/24] CPM: apply the dotnet/runtime central floor in source-build too Source-build also builds live Microsoft.Build.Tasks.Core 18.10, which pulls System.Security.Cryptography.Xml transitively at >= 10.0.9. The floor was gated to non-source-build, so the central pin stayed at the darc 10.0.8 and CPM transitive pinning raised NU1109 (downgrade 10.0.9 -> 10.0.8) in the Source-Build (Managed) jobs. Drop the gate so the max(darc, 10.0.9) floor applies in every build mode. The darc-flowed $(System*Version) properties are untouched, so FCS's shipped nuspec metadata still uses the darc version. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Versions.props | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 3f46baef6ba..376ce915c61 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -88,20 +88,21 @@ 4.6.1 4.6.3 6.1.2 - - + + $(SystemSecurityCryptographyXmlVersion) $(SystemCollectionsImmutableVersion) $(SystemReflectionMetadataVersion) - + 10.0.9 $(SystemRuntimeCentralFloorVersion) From 1a6d0503fcc7a8dc90370e7cf4cca284988bb2bf Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 24 Jul 2026 12:13:25 +0200 Subject: [PATCH 21/24] Restore tool-version properties read by the test harness tests/FSharp.Test.Utilities/TestFramework.fs parses eng/Versions.props by property name at module-init to locate csc/vbc/ilasm/ildasm in the NuGet cache. The version-literal diet had inlined these into eng/Packages.props and deleted the MicrosoftNetCompilersVersion / MicrosoftNETCoreILAsmVersion / MicrosoftNETCoreILDAsmVersion properties, so the assembly fixture threw 'Property not found in Versions.props' in its constructor and every test in the assembly failed at 0ms (Linux/macOS test jobs). Keep them as properties and have eng/Packages.props reference them, so there is still a single source and no duplicate literal. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Packages.props | 6 +++--- eng/Versions.props | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/eng/Packages.props b/eng/Packages.props index cbb72c6d8bd..77e5b2c6f06 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -31,9 +31,9 @@ keeps 8.0.0 via a VersionOverride. --> - - - + + + diff --git a/eng/Versions.props b/eng/Versions.props index 376ce915c61..a133437fa93 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -126,6 +126,13 @@ stay a property rather than being inlined into eng/Packages.props. --> 17.14.2120 + + 4.3.0-1.22220.8 + 5.0.0-preview.7.20364.11 + 5.0.0-preview.7.20364.11 + 0.13.10 17.14.1 From 865d93517b7d5a2d5309304f9d36b14ece9280a3 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 24 Jul 2026 12:13:25 +0200 Subject: [PATCH 22/24] CPM: do not centrally manage the implicit Microsoft.VSSDK.BuildTools ref Arcade's VisualStudio.targets injects Microsoft.VSSDK.BuildTools as an implicit PackageReference (IsImplicitlyDefined=true, Version=$(MicrosoftVSSDKBuildToolsVersion)) into VSIX/pkgdef projects. Under CPM an implicitly-defined reference must carry its own version and cannot have a central PackageVersion, so the central entry raised NU1009 across every Windows job that builds vsintegration (VisualFSharp.slnx). Remove the central PackageVersion; Arcade versions it from the property we keep. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Packages.props | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eng/Packages.props b/eng/Packages.props index 77e5b2c6f06..ff6874b45ae 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -79,7 +79,8 @@ - + From 566bd9c43c190ee997f07b6e61126b84955c0a48 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 24 Jul 2026 12:53:27 +0200 Subject: [PATCH 23/24] CPM: centrally pin Microsoft.VisualStudio.ComponentModelHost 18.9.453 Fixes CS0433 (ambiguous S/IComponentModel) in FSharp.Editor.IntegrationTests. Under transitive pinning it pulled Shell.Framework 18.x while ComponentModelHost stayed at 17.x; the 17.x/18.x split made the type-forward ambiguous. Pin it to the VS SDK 18.9.496 set so the types resolve to a single assembly. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- eng/Packages.props | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/eng/Packages.props b/eng/Packages.props index ff6874b45ae..2d1e15740ba 100644 --- a/eng/Packages.props +++ b/eng/Packages.props @@ -42,6 +42,11 @@ transitively by Microsoft.VisualStudio.SDK 18.9.496 (via Microsoft.CodeAnalysis.ExternalAccess.FSharp). Under CPM transitive pinning the central pin must match that resolved version, otherwise NU1109 downgrades and MSB3277 assembly-version conflicts break every vsintegration project. --> + + From 2abbf7dcba327cb73064d4c72a907224799c6808 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 24 Jul 2026 12:53:28 +0200 Subject: [PATCH 24/24] CPM: drop StreamJsonRpc VersionOverride in FSharp.Compiler.LanguageServer Fixes MSB3277 (StreamJsonRpc 2.25 vs 2.26 conflict). The override held 2.25.29 while the transitively-pinned Proxy used central 2.26.5; the two disagreed. Both now use central 2.26.5 (identical Threading.Only >= 17.14.15 floor, so no NU1109). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../FSharp.Compiler.LanguageServer.fsproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj index 5737239de91..ffa91fc3cac 100644 --- a/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ b/src/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj @@ -13,7 +13,7 @@ - +