Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
c311f3b
Add Directory.Packages.props + eng/Packages.props (CPM central list)
T-Gro Jul 22, 2026
bf9c626
Opt auxiliary/consumer subtrees out of CPM
T-Gro Jul 22, 2026
9a09158
CPM: reference MIBC optimization packages by identity only
T-Gro Jul 22, 2026
7387398
CPM: remove inline Version from centralized PackageReferences
T-Gro Jul 22, 2026
1903144
CPM: VersionOverride for VS.Threading/StreamJsonRpc divergences
T-Gro Jul 22, 2026
7696ccc
CPM: resolve NU1109 downgrades (S.S.C.Xml 10.0.9, DI 10.0.0)
T-Gro Jul 22, 2026
4fb9219
CPM: resolve NU1109 for System.Collections.Immutable / System.Reflect…
T-Gro Jul 22, 2026
51cf071
CPM: resolve VS-integration NU1109 + MIBC opt-out NU1015
T-Gro Jul 22, 2026
bf26b87
CPM: suppress NU1507 multi-source warning after project bodies
T-Gro Jul 22, 2026
4714094
CPM: darc-aware System.* central floor to preserve nuspec + source-build
T-Gro Jul 22, 2026
9198902
CPM: version test-package refs in ImportDirectoryPackagesProps opt-ou…
T-Gro Jul 22, 2026
796f537
CPM: address review nits (dead no-ops, comment noise, docs)
T-Gro Jul 22, 2026
6d4cc5a
CPM: round 2 review polish (comment grouping, consistency)
T-Gro Jul 22, 2026
043e6de
CPM: remove dead version properties
T-Gro Jul 23, 2026
4cbcb02
CPM: inline single-use package versions into eng/Packages.props
T-Gro Jul 23, 2026
b171ea3
CPM: drop direct package references now covered by transitive pinning
T-Gro Jul 23, 2026
82b2ff5
CPM: compaction round 1 — single-source floor, bind VSEditor, dedup c…
T-Gro Jul 23, 2026
44ea24b
CPM: compaction round 2 — drop dead xunit ItemGroup, trim duplicated …
T-Gro Jul 23, 2026
e7260a3
CPM: single-source xunit.v3.runner.console onto $(XunitVersion)
T-Gro Jul 24, 2026
03e95d4
CPM: apply the dotnet/runtime central floor in source-build too
T-Gro Jul 24, 2026
1a6d050
Restore tool-version properties read by the test harness
T-Gro Jul 24, 2026
865d935
CPM: do not centrally manage the implicit Microsoft.VSSDK.BuildTools ref
T-Gro Jul 24, 2026
566bd9c
CPM: centrally pin Microsoft.VisualStudio.ComponentModelHost 18.9.453
T-Gro Jul 24, 2026
2abbf7d
CPM: drop StreamJsonRpc VersionOverride in FSharp.Compiler.LanguageSe…
T-Gro Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
Also blocks Directory.Build.targets import. -->
<PropertyGroup>
<ImportDirectoryBuildTargets>false</ImportDirectoryBuildTargets>
<!-- Standalone tool consuming shipped FSharp.Compiler.Service/FSharp.Core; keep off repo CPM. -->
<ImportDirectoryPackagesProps>false</ImportDirectoryPackagesProps>
<BaseOutputPath>$(MSBuildThisFileDirectory)../../../../.tools/fsharp-diag/bin/</BaseOutputPath>
<BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)../../../../.tools/fsharp-diag/obj/</BaseIntermediateOutputPath>
</PropertyGroup>
Expand Down
29 changes: 20 additions & 9 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
<Import Project="FSharpTests.Directory.Build.targets" Condition = " '$(FSharpTestCompilerVersion)' != '' "/>
<Import Project="CoordinateXliff.targets" Condition = " '$(FSharpBuildAssemblyFile)' != '' and '$(XliffTasksAssembly)' != '' "/>

<!-- The repo restores from many NuGet sources (Maestro does not support package source mapping),
which triggers NU1507 under Central Package Management. Suppress it here, after the project
bodies (some of which reset NoWarn), so it is applied consistently across every CPM project. -->
<PropertyGroup Condition="'$(ManagePackageVersionsCentrally)' == 'true'">
<NoWarn>$(NoWarn);NU1507</NoWarn>
</PropertyGroup>

<!-- Disable R2R when building source-only and not targeting the current SDK bundled TFM. -->
<PropertyGroup>
<PublishReadyToRun Condition="'$(DotNetBuildSourceOnly)' == 'true' and
Expand All @@ -18,17 +25,21 @@
<FsYaccPath>$(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fsyacc.dll</FsYaccPath>
</PropertyGroup>

<ItemGroup Condition="'$(DesignTimeBuild)' == 'true'">
<PackageReference Update="Microsoft.VSSDK.BuildTools" Version="17.14.2120" />
</ItemGroup>

<ItemGroup Condition="'$(UnitTestType)' == 'xunit'">
<PackageReference Include="xunit.v3.mtp-v2" Version="$(XunitVersion)" />
</ItemGroup>

<!-- We want to restore ALL the MIBCs when we build anything, since in the future it will contain different profiles, not only the FSC one we got from building Giraffe -->
<Import Project="$(MSBuildThisFileDirectory)\eng\restore\optimizationData.targets"/>
<ItemGroup>
<!-- @(MIBCPackage) carries Version item metadata (CopyMIBC needs it to locate the restored .mibc under
the package cache). Under CPM that Version must not sit on a PackageReference (NU1008), and neither
RemoveMetadata nor an identity transform strips it in an evaluation-phase ItemGroup, so list the
identities literally here; the central versions in eng/Packages.props apply. Opt-out subtrees
(ImportDirectoryPackagesProps=false) are not under CPM and keep the inline Version from @(MIBCPackage). -->
<ItemGroup Condition="'$(IgnoreMIBC)' != 'true' and '$(ManagePackageVersionsCentrally)' == 'true'">
<PackageReference Include="optimization.windows_nt-x86.mibc.runtime" />
<PackageReference Include="optimization.windows_nt-x64.mibc.runtime" />
<PackageReference Include="optimization.windows_nt-arm64.mibc.runtime" />
<PackageReference Include="optimization.linux-x64.mibc.runtime" />
<PackageReference Include="optimization.linux-arm64.mibc.runtime" />
</ItemGroup>
<ItemGroup Condition="'$(IgnoreMIBC)' != 'true' and '$(ManagePackageVersionsCentrally)' != 'true'">
<PackageReference Include="@(MIBCPackage)" />
</ItemGroup>

Expand Down
10 changes: 10 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project>

<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
</PropertyGroup>

<Import Project="eng/Packages.props" />

</Project>
2 changes: 1 addition & 1 deletion buildtools/AssemblyCheck/AssemblyCheck.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
</ItemGroup>

<ItemGroup Condition="'$(FSHARPCORE_USE_PACKAGE)' == 'true'">
<PackageReference Include="FSharp.Core" Version="$(FSharpCoreShippedPackageVersionValue)" />
<PackageReference Include="FSharp.Core" />
</ItemGroup>

</Project>
2 changes: 2 additions & 0 deletions buildtools/checkpackages/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
<Import Project="$(MSBuildThisFileDirectory)..\..\eng\TargetFrameworks.props" />

<PropertyGroup>
<!-- Auxiliary/consumer-style projects keep their own inline package versions (not under repo CPM). -->
<ImportDirectoryPackagesProps>false</ImportDirectoryPackagesProps>
<DisableImplicitFSharpCoreReference>true</DisableImplicitFSharpCoreReference>
<CachePath>$(MSBuildProjectDirectory)\..\..\artifacts\tmp\$([System.Guid]::NewGuid())</CachePath>
<BaseIntermediateOutputPath>$(CachePath)\obj\</BaseIntermediateOutputPath>
Expand Down
2 changes: 1 addition & 1 deletion buildtools/fslex/fslex.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
</ItemGroup>

<ItemGroup Condition="'$(FSHARPCORE_USE_PACKAGE)' == 'true'">
<PackageReference Include="FSharp.Core" Version="$(FSharpCoreShippedPackageVersionValue)" />
<PackageReference Include="FSharp.Core" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion buildtools/fsyacc/fsyacc.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
</ItemGroup>

<ItemGroup Condition="'$(FSHARPCORE_USE_PACKAGE)' == 'true'">
<PackageReference Include="FSharp.Core" Version="$(FSharpCoreShippedPackageVersionValue)" />
<PackageReference Include="FSharp.Core" />
</ItemGroup>

</Project>
7 changes: 7 additions & 0 deletions docs/fcs-samples/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<Project>
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
<PropertyGroup>
<!-- FCS sample projects consume shipped FCS/FSharp.Core packages; keep them off repo CPM. -->
<ImportDirectoryPackagesProps>false</ImportDirectoryPackagesProps>
</PropertyGroup>
</Project>
111 changes: 111 additions & 0 deletions eng/Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
<!-- Central Package Management version list. See Directory.Packages.props.
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). -->
<Project>
<ItemGroup>
<!-- Optimization data (MIBC) — referenced via @(MIBCPackage) in Directory.Build.targets -->
<PackageVersion Include="optimization.windows_nt-x86.mibc.runtime" Version="$(optimizationwindows_ntx86MIBCRuntimeVersion)" />
<PackageVersion Include="optimization.windows_nt-x64.mibc.runtime" Version="$(optimizationwindows_ntx64MIBCRuntimeVersion)" />
<PackageVersion Include="optimization.windows_nt-arm64.mibc.runtime" Version="$(optimizationwindows_ntarm64MIBCRuntimeVersion)" />
<PackageVersion Include="optimization.linux-x64.mibc.runtime" Version="$(optimizationlinuxx64MIBCRuntimeVersion)" />
<PackageVersion Include="optimization.linux-arm64.mibc.runtime" Version="$(optimizationlinuxarm64MIBCRuntimeVersion)" />

<PackageVersion Include="FsCheck" Version="2.16.6" />
<PackageVersion Include="FSharp.Core" Version="$(FSharpCoreShippedPackageVersionValue)" />
<PackageVersion Include="Microsoft.Build" Version="$(MicrosoftBuildVersion)" />
<PackageVersion Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildFrameworkVersion)" />
<PackageVersion Include="Microsoft.Build.Tasks.Core" Version="$(MicrosoftBuildTasksCoreVersion)" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildUtilitiesCoreVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="$(MicrosoftCodeAnalysisCSharpVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.EditorFeatures" Version="$(MicrosoftCodeAnalysisEditorFeaturesTextVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.EditorFeatures.Text" Version="$(MicrosoftCodeAnalysisEditorFeaturesTextVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.ExternalAccess.FSharp" Version="$(MicrosoftCodeAnalysisExternalAccessFSharpVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.Test.Resources.Proprietary" Version="2.0.28" />
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="$(MicrosoftCodeAnalysisCSharpVersion)" />
<PackageVersion Include="Microsoft.CommonLanguageServerProtocol.Framework" Version="4.13.0-3.24579.1" />
<PackageVersion Include="Microsoft.DiaSymReader.PortablePdb" Version="1.6.0" />
<PackageVersion Include="Microsoft.DotNet.NuGetRepack.Tasks" Version="$(MicrosoftDotNetNuGetRepackTasksVersion)" />
<!-- Raised from 8.0.0 to 10.0.0: OpenTelemetry (in test/VS projects) pulls Microsoft.Extensions.Logging 10.0.0,
which requires Microsoft.Extensions.DependencyInjection >= 10.0.0. FSharp.Compiler.LanguageServer (net8)
keeps 8.0.0 via a VersionOverride. -->
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
<PackageVersion Include="Microsoft.Internal.VisualStudio.Shell.Framework" Version="18.0.2188-preview.1" />
<PackageVersion Include="Microsoft.Net.Compilers" Version="$(MicrosoftNetCompilersVersion)" />
<PackageVersion Include="Microsoft.NETCore.ILAsm" Version="$(MicrosoftNETCoreILAsmVersion)" />
<PackageVersion Include="Microsoft.NETCore.ILDAsm" Version="$(MicrosoftNETCoreILDAsmVersion)" />
<PackageVersion Include="Microsoft.ServiceHub.Framework" Version="4.10.128" />
<PackageVersion Include="Microsoft.Testing.Extensions.HangDump" Version="$(MicrosoftTestingExtensionsHangDumpVersion)" />
<PackageVersion Include="Microsoft.TestPlatform.ObjectModel" Version="$(MicrosoftTestPlatformVersion)" />
<PackageVersion Include="Microsoft.VisualFSharp.Microsoft.VisualStudio.Shell.UI.Internal" Version="17.0.0" />
<!-- The 18.9.x Visual Studio SDK packages below (Interop/Shell/Editor) are pinned to the versions pulled
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. -->
<!-- ComponentModelHost is only ever pulled transitively. Projects that reference the full VS SDK get 18.9.453,
but FSharp.Editor.IntegrationTests pulls Shell.Framework 18.x (via the 18.9.x editor packages) while its
ComponentModelHost would otherwise stay at 17.x; that 17.x/18.x split makes S/IComponentModel ambiguous
(CS0433). Pin to the SDK 18.9.496 version so those types resolve to a single assembly. -->
<PackageVersion Include="Microsoft.VisualStudio.ComponentModelHost" Version="18.9.453" />
<PackageVersion Include="Microsoft.VisualStudio.Designer.Interfaces" Version="18.9.438" />
<PackageVersion Include="Microsoft.VisualStudio.Editor" Version="$(VisualStudioEditorPackagesVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Build" Version="17.13.39620" />
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Sdk" Version="17.13.39620" />
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Testing.SourceGenerator" Version="$(MicrosoftVisualStudioExtensibilityTestingVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Testing.Xunit" Version="$(MicrosoftVisualStudioExtensibilityTestingVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Language.Intellisense" Version="$(VisualStudioEditorPackagesVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Language.StandardClassification" Version="$(VisualStudioEditorPackagesVersion)" />
<!-- Pinned to 17.13.9 (not the projects' 17.13.6-preview floor) because Protocol.Internal 17.13.9,
referenced by FSharp.VisualStudio.Extension, transitively requires Protocol >= 17.13.9. -->
<PackageVersion Include="Microsoft.VisualStudio.LanguageServer.Protocol" Version="17.13.9" />
<PackageVersion Include="Microsoft.VisualStudio.LanguageServer.Protocol.Internal" Version="17.13.9" />
<PackageVersion Include="Microsoft.VisualStudio.LanguageServices" Version="$(MicrosoftVisualStudioLanguageServicesVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.ManagedInterfaces" Version="18.0.2077-preview.1" />
<PackageVersion Include="Microsoft.VisualStudio.OLE.Interop" Version="18.9.438" />
<PackageVersion Include="Microsoft.VisualStudio.Package.LanguageService.15.0" Version="18.9.493" />
<!-- Microsoft.VisualStudio.Platform.VSEditor is the runtime editor implementation. Unlike the other editor
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. -->
<PackageVersion Include="Microsoft.VisualStudio.Platform.VSEditor" Version="$(VisualStudioEditorPackagesVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.ProjectSystem" Version="18.0.1237-pre" />
<PackageVersion Include="Microsoft.VisualStudio.ProjectSystem.Managed" Version="2.3.6152103" />
<PackageVersion Include="Microsoft.VisualStudio.ProjectSystem.Query" Version="17.13.66" />
<PackageVersion Include="Microsoft.VisualStudio.RpcContracts" Version="18.9.453" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.Design" Version="18.9.493" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.Immutable.10.0" Version="10.0.30319" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.Immutable.11.0" Version="11.0.50727" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.Immutable.15.0" Version="15.0.25123-Dev15Preview" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.Interop" Version="18.9.438" />
<!-- Shell.15.0 references SolutionPersistence at runtime without declaring the NuGet dependency (it is expected
from the VS install). The standalone VS unit-test host loads Shell.15.0 into a MEF catalog, so the assembly
must be deployed next to it or Assembly.GetTypes throws and every legacy VS unit test fails. -->
<PackageVersion Include="Microsoft.VisualStudio.SolutionPersistence" Version="1.0.52" />
<PackageVersion Include="Microsoft.VisualStudio.Text.UI.Wpf" Version="$(VisualStudioEditorPackagesVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.TextManager.Interop" Version="18.9.438" />
<PackageVersion Include="Microsoft.VisualStudio.Threading" Version="18.7.19" />
<PackageVersion Include="Microsoft.VisualStudio.Validation" Version="18.7.1" />
<!-- Microsoft.VSSDK.BuildTools is injected as an implicit PackageReference by Arcade's VisualStudio.targets
(Version="$(MicrosoftVSSDKBuildToolsVersion)"); an implicit reference must not be centrally managed (NU1009). -->
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
<PackageVersion Include="NuGet.VisualStudio" Version="17.14.0" />
<!-- Raised from 1.3.0: Microsoft.VisualStudio.ComponentModelHost 18.9.453 (transitive via the VS SDK) requires >= 1.3.1. -->
<PackageVersion Include="Nullable" Version="1.3.1" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
<PackageVersion Include="StreamJsonRpc" Version="2.26.5" />
<PackageVersion Include="System.Buffers" Version="$(SystemBuffersVersion)" />
<PackageVersion Include="System.Collections.Immutable" Version="$(SystemCollectionsImmutableCentralVersion)" />
<PackageVersion Include="System.Composition" Version="$(SystemCompositionVersion)" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="$(SystemDiagnosticsDiagnosticSourceVersion)" />
<PackageVersion Include="System.Memory" Version="$(SystemMemoryVersion)" />
<PackageVersion Include="System.Reflection.Emit" Version="$(SystemReflectionEmitVersion)" />
<PackageVersion Include="System.Reflection.Metadata" Version="$(SystemReflectionMetadataCentralVersion)" />
<PackageVersion Include="System.Runtime.CompilerServices.Unsafe" Version="$(SystemRuntimeCompilerServicesUnsafeVersion)" />
<PackageVersion Include="System.Security.Cryptography.Xml" Version="$(SystemSecurityCryptographyXmlCentralVersion)" />
<PackageVersion Include="xunit.v3.assert" Version="$(XunitVersion)" />
<PackageVersion Include="xunit.v3.common" Version="$(XunitVersion)" />
<PackageVersion Include="xunit.v3.extensibility.core" Version="$(XunitVersion)" />
<PackageVersion Include="xunit.v3.mtp-v2" Version="$(XunitVersion)" />
<PackageVersion Include="xunit.v3.runner.console" Version="$(XunitVersion)" />
<PackageVersion Include="XunitXml.TestLogger" Version="$(XunitXmlTestLoggerVersion)" />
</ItemGroup>
</Project>
Loading
Loading