diff --git a/Directory.Build.props b/Directory.Build.props index e109e5b71e5..6b185cdbab0 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,12 +1,14 @@ + + + https://github.com/dotnet/fsharp https://github.com/dotnet/fsharp $(FSharpLangVersion) $(MSBuildThisFileDirectory) true - net10.0 $(DotNetBuildSourceOnly) false @@ -57,34 +59,20 @@ $(ArtifactsDir)obj/$(MSBuildProjectName)/$(Configuration)/ - $(ArtifactsDir)/bin/fslex/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(RuntimeIdentifier)/fslex.dll - $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(RuntimeIdentifier)/fsyacc.dll + $(ArtifactsDir)/bin/fslex/$(Configuration)/$(FSharpNetCoreProductTargetFramework)/$(RuntimeIdentifier)/fslex.dll + $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductTargetFramework)/$(RuntimeIdentifier)/fsyacc.dll BUILDING_WITH_LKG;$(DefineConstants) - - - - - - $(NetCurrent) - - - - - $(FSharpNetCoreProductDefaultTargetFramework) - - - + + + + $(NetCurrent) + - $(ArtifactsDir)/bin/fslex/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fslex.dll - $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductDefaultTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fsyacc.dll + $(ArtifactsDir)/bin/fslex/$(Configuration)/$(FSharpNetCoreProductTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fslex.dll + $(ArtifactsDir)/bin/fsyacc/$(Configuration)/$(FSharpNetCoreProductTargetFramework)/$(NETCoreSdkPortableRuntimeIdentifier)/fsyacc.dll diff --git a/FSharpBuild.Directory.Build.targets b/FSharpBuild.Directory.Build.targets index 05201df3466..6e64ad71531 100644 --- a/FSharpBuild.Directory.Build.targets +++ b/FSharpBuild.Directory.Build.targets @@ -73,6 +73,9 @@ <_BuildPropertyLines Include="module internal FSharp.BuildProperties" /> <_BuildPropertyLines Include="let fsProductVersion = "$(FSPRODUCTVERSION)"" /> <_BuildPropertyLines Include="let fsLanguageVersion = "$(FSLANGUAGEVERSION)"" /> + + <_BuildPropertyLines Include="let fsProductTfm = "$(FSharpNetCoreProductTargetFramework)"" Condition="'$(MSBuildProjectName)' != 'FSharp.Core'" /> + <_BuildPropertyLines Include="let fsProductTfmMajorVersion : int = $(FSharpNetCoreProductMajorVersion)" Condition="'$(MSBuildProjectName)' != 'FSharp.Core'" /> + + + + False @@ -11,8 +17,8 @@ $([System.IO.Path]::GetDirectoryName($(DOTNET_HOST_PATH))) $([System.IO.Path]::GetFileName($(DOTNET_HOST_PATH))) - $(LocalFSharpCompilerPath)/artifacts/bin/fsc/$(LocalFSharpCompilerConfiguration)/net10.0/fsc.dll - $(LocalFSharpCompilerPath)/artifacts/bin/fsc/$(LocalFSharpCompilerConfiguration)/net10.0/fsc.dll + $(LocalFSharpCompilerPath)/artifacts/bin/fsc/$(LocalFSharpCompilerConfiguration)/$(FSharpNetCoreProductTargetFramework)/fsc.dll + $(LocalFSharpCompilerPath)/artifacts/bin/fsc/$(LocalFSharpCompilerConfiguration)/$(FSharpNetCoreProductTargetFramework)/fsc.dll False True @@ -25,7 +31,7 @@ See: https://github.com/dotnet/sdk/blob/main/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FSharpTargetsShim.targets --> - $(LocalFSharpCompilerPath)/artifacts/bin/fsc/$(LocalFSharpCompilerConfiguration)/net10.0 + $(LocalFSharpCompilerPath)/artifacts/bin/fsc/$(LocalFSharpCompilerConfiguration)/$(FSharpNetCoreProductTargetFramework) $(LocalFSharpBuildBinPath)/FSharp.Build.dll $(LocalFSharpBuildBinPath)/Microsoft.FSharp.Targets $(LocalFSharpBuildBinPath)/Microsoft.FSharp.NetSdk.props diff --git a/azure-pipelines-PR.yml b/azure-pipelines-PR.yml index 830df465998..f5a689e222c 100644 --- a/azure-pipelines-PR.yml +++ b/azure-pipelines-PR.yml @@ -721,10 +721,20 @@ stages: publishLocation: pipeline condition: succeeded() + - pwsh: | + # Stage UseLocalCompiler props and TargetFrameworks.props together + $stagingDir = "$(Build.SourcesDirectory)/UseLocalCompilerPropsStaging" + New-Item -ItemType Directory -Force -Path $stagingDir | Out-Null + Copy-Item "$(Build.SourcesDirectory)/UseLocalCompiler.Directory.Build.props" -Destination $stagingDir + Copy-Item "$(Build.SourcesDirectory)/eng/TargetFrameworks.props" -Destination $stagingDir + Write-Host "Staged files for UseLocalCompilerProps artifact:" + Get-ChildItem $stagingDir -Name + displayName: Stage UseLocalCompiler props files + - task: PublishPipelineArtifact@1 displayName: Publish UseLocalCompiler props file for Regression Tests inputs: - targetPath: '$(Build.SourcesDirectory)/UseLocalCompiler.Directory.Build.props' + targetPath: '$(Build.SourcesDirectory)/UseLocalCompilerPropsStaging' artifactName: 'UseLocalCompilerProps' publishLocation: pipeline condition: succeeded() diff --git a/buildtools/checkpackages/Directory.Build.props b/buildtools/checkpackages/Directory.Build.props index 8d7a02870f8..a9a651c4a65 100644 --- a/buildtools/checkpackages/Directory.Build.props +++ b/buildtools/checkpackages/Directory.Build.props @@ -1,4 +1,7 @@ + + + true $(MSBuildProjectDirectory)\..\..\artifacts\tmp\$([System.Guid]::NewGuid()) diff --git a/buildtools/checkpackages/FSharp.Compiler.Service_notshipped.fsproj b/buildtools/checkpackages/FSharp.Compiler.Service_notshipped.fsproj index 836a25096b2..8a0874bff6a 100644 --- a/buildtools/checkpackages/FSharp.Compiler.Service_notshipped.fsproj +++ b/buildtools/checkpackages/FSharp.Compiler.Service_notshipped.fsproj @@ -3,7 +3,7 @@ - net10.0 + $(FSharpNetCoreProductTargetFramework) true $(MSBuildProjectDirectory)\..\..\artifacts\tmp\$([System.Guid]::NewGuid()) $(CachePath)\bin diff --git a/buildtools/checkpackages/FSharp.Core_notshipped.fsproj b/buildtools/checkpackages/FSharp.Core_notshipped.fsproj index d032bd5839f..237ea4a2f2c 100644 --- a/buildtools/checkpackages/FSharp.Core_notshipped.fsproj +++ b/buildtools/checkpackages/FSharp.Core_notshipped.fsproj @@ -3,7 +3,7 @@ - net10.0 + $(FSharpNetCoreProductTargetFramework) diff --git a/docs/release-notes/.FSharp.Compiler.Service/10.0.200.md b/docs/release-notes/.FSharp.Compiler.Service/10.0.200.md index 6528081e07c..4c3126b8639 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/10.0.200.md +++ b/docs/release-notes/.FSharp.Compiler.Service/10.0.200.md @@ -41,6 +41,7 @@ * Parallel compilation features: ref resolution, graph based checking, ILXGen and optimization enabled by default ([PR #18998](https://github.com/dotnet/fsharp/pull/18998)) * Make graph based type checking and parallel optimizations deterministic ([PR #19028](https://github.com/dotnet/fsharp/pull/19028)) +* Centralize compiler's target framework moniker logic into a single source of truth. ([PR #19251](https://github.com/dotnet/fsharp/pull/19251)) ### Breaking Changes diff --git a/docs/release-notes/.FSharp.Compiler.Service/10.0.300.md b/docs/release-notes/.FSharp.Compiler.Service/10.0.300.md index c247da5870b..5e5b5914af5 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/10.0.300.md +++ b/docs/release-notes/.FSharp.Compiler.Service/10.0.300.md @@ -4,4 +4,6 @@ ### Changed +* Centralized product TFM (Target Framework Moniker) into MSBuild props file `eng/TargetFrameworks.props`. Changing the target framework now only requires editing one file, and it integrates with MSBuild's `--getProperty` for scripts. + ### Breaking Changes diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 174eecdb9b4..d69bdb3e8c3 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -35,8 +35,8 @@ param ( # Options [switch][Alias('proto')]$bootstrap, [string]$bootstrapConfiguration = "Proto", - [string]$bootstrapTfm = "net10.0", - [string]$fsharpNetCoreProductTfm = "net10.0", + [string]$bootstrapTfm = "", + [string]$fsharpNetCoreProductTfm = "", [switch][Alias('bl')]$binaryLog = $true, [switch][Alias('nobl')]$excludeCIBinaryLog = $false, [switch][Alias('nolog')]$noBinaryLog = $false, @@ -82,7 +82,16 @@ $BuildCategory = "" $BuildMessage = "" $desktopTargetFramework = "net472" -$coreclrTargetFramework = "net10.0" +# Read product TFM from centralized source of truth via MSBuild +$coreclrTargetFramework = (& $PSScriptRoot/common/dotnet.ps1 msbuild $PSScriptRoot/TargetFrameworks.props --getProperty:FSharpNetCoreProductTargetFramework).Trim() + +# Set defaults for bootstrapTfm and fsharpNetCoreProductTfm if not provided +if ($bootstrapTfm -eq "") { + $bootstrapTfm = $coreclrTargetFramework +} +if ($fsharpNetCoreProductTfm -eq "") { + $fsharpNetCoreProductTfm = $coreclrTargetFramework +} function Print-Usage() { Write-Host "Common settings:" diff --git a/eng/TargetFrameworks.props b/eng/TargetFrameworks.props new file mode 100644 index 00000000000..d384e5fbcaa --- /dev/null +++ b/eng/TargetFrameworks.props @@ -0,0 +1,20 @@ + + + + + + + net10.0 + + + $([System.Text.RegularExpressions.Regex]::Replace('$(FSharpNetCoreProductTargetFramework)', '^net(\d+)\.0$', '$1')) + + + diff --git a/eng/build-utils.ps1 b/eng/build-utils.ps1 index fdc274c66c2..e40cf36fd9f 100644 --- a/eng/build-utils.ps1 +++ b/eng/build-utils.ps1 @@ -14,7 +14,9 @@ $nodeReuse = if (Test-Path variable:nodeReuse) { $nodeReuse } else { $false } $bootstrapDir = if (Test-Path variable:bootstrapDir) { $bootstrapDir } else { "" } $bootstrapConfiguration = if (Test-Path variable:bootstrapConfiguration) { $bootstrapConfiguration } else { "Proto" } $bootstrapTfm = if (Test-Path variable:bootstrapTfm) { $bootstrapTfm } else { "net472" } -$fsharpNetCoreProductTfm = if (Test-Path variable:fsharpNetCoreProductTfm) { $fsharpNetCoreProductTfm } else { "net10.0" } +# Read product TFM from centralized source of truth via MSBuild +$fsharpNetCoreProductTfmDefault = (& $PSScriptRoot/common/dotnet.ps1 msbuild $PSScriptRoot/TargetFrameworks.props --getProperty:FSharpNetCoreProductTargetFramework).Trim() +$fsharpNetCoreProductTfm = if (Test-Path variable:fsharpNetCoreProductTfm) { $fsharpNetCoreProductTfm } else { $fsharpNetCoreProductTfmDefault } $properties = if (Test-Path variable:properties) { $properties } else { @() } function GetProjectOutputBinary([string]$fileName, [string]$projectName = "", [string]$configuration = $script:configuration, [string]$tfm = "net472", [string]$rid = "", [bool]$published = $false) { diff --git a/eng/build.sh b/eng/build.sh index 4477ea35db4..d4b49708a04 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -83,7 +83,9 @@ properties="" docker=false args="" -tfm="net10.0" # This needs to be changed every time it's bumped by arcade/us. +# TFM will be resolved after InitializeDotNetCli ensures the SDK is available. +# Can be overridden via --tfm argument. +tfm="" BuildCategory="" BuildMessage="" @@ -352,6 +354,11 @@ trap TrapAndReportError EXIT InitializeDotNetCli $restore +# Resolve product TFM from centralized source of truth if not overridden via --tfm +if [[ "$tfm" == "" ]]; then + tfm=$("$DOTNET_INSTALL_DIR/dotnet" msbuild "$scriptroot/TargetFrameworks.props" -getProperty:FSharpNetCoreProductTargetFramework 2>/dev/null | tr -d '[:space:]') +fi + BuildSolution if [[ "$test_core_clr" == true ]]; then diff --git a/eng/templates/regression-test-jobs.yml b/eng/templates/regression-test-jobs.yml index 66c184138aa..eebb97d047c 100644 --- a/eng/templates/regression-test-jobs.yml +++ b/eng/templates/regression-test-jobs.yml @@ -125,7 +125,8 @@ jobs: dotnet msbuild -version Write-Host "" Write-Host "F# Compiler artifacts available:" - Get-ChildItem "$(Pipeline.Workspace)/FSharpCompiler/bin/fsc/Release/net10.0" -Name -ErrorAction SilentlyContinue + $productTfm = (dotnet msbuild "$(Pipeline.Workspace)/Props/TargetFrameworks.props" --getProperty:FSharpNetCoreProductTargetFramework).Trim() + Get-ChildItem "$(Pipeline.Workspace)/FSharpCompiler/bin/fsc/Release/$productTfm" -Name -ErrorAction SilentlyContinue Write-Host "" Write-Host "F# Core available:" if (Test-Path "$(Pipeline.Workspace)/FSharpCompiler/bin/FSharp.Core/Release/netstandard2.0/FSharp.Core.dll") { diff --git a/eng/test-determinism.ps1 b/eng/test-determinism.ps1 index 6e25e50fd4e..6bf53e4d195 100644 --- a/eng/test-determinism.ps1 +++ b/eng/test-determinism.ps1 @@ -404,7 +404,8 @@ try { $script:bootstrap = $true $script:bootstrapConfiguration = "Proto" - $script:fsharpNetCoreProductTfm = "net10.0" + # Read product TFM from centralized source of truth via MSBuild + $script:fsharpNetCoreProductTfm = (& $PSScriptRoot/common/dotnet.ps1 msbuild $PSScriptRoot/TargetFrameworks.props --getProperty:FSharpNetCoreProductTargetFramework).Trim() $script:bootstrapTfm = $script:fsharpNetCoreProductTfm $bootstrapDir = Make-BootstrapBuild diff --git a/src/Compiler/Driver/FxResolver.fs b/src/Compiler/Driver/FxResolver.fs index f9d39d3ba53..a336cb18916 100644 --- a/src/Compiler/Driver/FxResolver.fs +++ b/src/Compiler/Driver/FxResolver.fs @@ -412,7 +412,11 @@ type internal FxResolver match runningTfmOpt with | Some tfm -> tfm - | _ -> if isRunningOnCoreClr then "net11.0" else "net472" + | _ -> + if isRunningOnCoreClr then + FSharp.BuildProperties.fsProductTfm + else + "net472" let trySdkRefsPackDirectory = lazy diff --git a/src/Compiler/FSharp.Compiler.Service.fsproj b/src/Compiler/FSharp.Compiler.Service.fsproj index 2f389e3f8f7..6bd4b798cda 100644 --- a/src/Compiler/FSharp.Compiler.Service.fsproj +++ b/src/Compiler/FSharp.Compiler.Service.fsproj @@ -572,17 +572,21 @@ - + TargetFramework=$(FSharpNetCoreProductTargetFramework) + TargetFramework compile TargetFramework=$(FSharpNetCoreProductTargetFramework) + TargetFramework compile TargetFramework=$(FSharpNetCoreProductTargetFramework) + TargetFramework compile diff --git a/src/Compiler/Facilities/CompilerLocation.fs b/src/Compiler/Facilities/CompilerLocation.fs index 53e885ef075..9284daac23a 100644 --- a/src/Compiler/Facilities/CompilerLocation.fs +++ b/src/Compiler/Facilities/CompilerLocation.fs @@ -122,21 +122,21 @@ module internal FSharpEnvironment = "netstandard2.0" |] elif typeof.Assembly.GetName().Name = "System.Private.CoreLib" then + let productMajor = FSharp.BuildProperties.fsProductTfmMajorVersion + let runningMajor = Environment.Version.Major + [| - "net11.0" - "net10.0" - "net9.0" - "net8.0" - "net7.0" - "net6.0" - "net5.0" - "netcoreapp3.1" - "netcoreapp3.0" - "netstandard2.1" - "netcoreapp2.2" - "netcoreapp2.1" - "netcoreapp2.0" - "netstandard2.0" + for v in max productMajor runningMajor .. -1 .. 5 -> $"net{v}.0" + yield! + [| + "netcoreapp3.1" + "netcoreapp3.0" + "netstandard2.1" + "netcoreapp2.2" + "netcoreapp2.1" + "netcoreapp2.0" + "netstandard2.0" + |] |] else Debug.Assert(false, "Couldn't determine runtime tooling context, assuming it supports at least .NET Standard 2.0") diff --git a/tests/AheadOfTime/Directory.Build.props b/tests/AheadOfTime/Directory.Build.props index 07d33cd1374..ba8cc5f390f 100644 --- a/tests/AheadOfTime/Directory.Build.props +++ b/tests/AheadOfTime/Directory.Build.props @@ -1,9 +1,12 @@ - - $(NoWarn);NU1603 + + + + + $(NoWarn);NU1603 - - + diff --git a/tests/AheadOfTime/Equality/Equality.fsproj b/tests/AheadOfTime/Equality/Equality.fsproj index 166cdfa8e61..944c556dfc1 100644 --- a/tests/AheadOfTime/Equality/Equality.fsproj +++ b/tests/AheadOfTime/Equality/Equality.fsproj @@ -16,8 +16,8 @@ - $(MSBuildThisFileDirectory)../../../artifacts/bin/fsc/Release/net10.0/fsc.dll - $(MSBuildThisFileDirectory)../../../artifacts/bin/fsc/Release/net10.0/fsc.dll + $(MSBuildThisFileDirectory)../../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework)/fsc.dll + $(MSBuildThisFileDirectory)../../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework)/fsc.dll False True diff --git a/tests/AheadOfTime/Trimming/FSharpMetadataResource_Trimming_Test/FSharpMetadataResource_Trimming_Test.fsproj b/tests/AheadOfTime/Trimming/FSharpMetadataResource_Trimming_Test/FSharpMetadataResource_Trimming_Test.fsproj index e5b084ee433..e00d5a71521 100644 --- a/tests/AheadOfTime/Trimming/FSharpMetadataResource_Trimming_Test/FSharpMetadataResource_Trimming_Test.fsproj +++ b/tests/AheadOfTime/Trimming/FSharpMetadataResource_Trimming_Test/FSharpMetadataResource_Trimming_Test.fsproj @@ -17,7 +17,7 @@ - $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/net10.0 + $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework) $(LocalFSharpBuildBinPath)/FSharp.Build.dll $(LocalFSharpBuildBinPath)/fsc.dll $(LocalFSharpBuildBinPath)/fsc.dll diff --git a/tests/AheadOfTime/Trimming/SelfContained_Trimming_Test/SelfContained_Trimming_Test.fsproj b/tests/AheadOfTime/Trimming/SelfContained_Trimming_Test/SelfContained_Trimming_Test.fsproj index 6eaedc3338b..8930dd44e5d 100644 --- a/tests/AheadOfTime/Trimming/SelfContained_Trimming_Test/SelfContained_Trimming_Test.fsproj +++ b/tests/AheadOfTime/Trimming/SelfContained_Trimming_Test/SelfContained_Trimming_Test.fsproj @@ -17,8 +17,8 @@ - $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/net10.0/fsc.dll - $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/net10.0/fsc.dll + $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework)/fsc.dll + $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework)/fsc.dll False True diff --git a/tests/AheadOfTime/Trimming/StaticLinkedFSharpCore_Trimming_Test/StaticLinkedFSharpCore_Trimming_Test.fsproj b/tests/AheadOfTime/Trimming/StaticLinkedFSharpCore_Trimming_Test/StaticLinkedFSharpCore_Trimming_Test.fsproj index a90eb04e6cc..16e648e78d3 100644 --- a/tests/AheadOfTime/Trimming/StaticLinkedFSharpCore_Trimming_Test/StaticLinkedFSharpCore_Trimming_Test.fsproj +++ b/tests/AheadOfTime/Trimming/StaticLinkedFSharpCore_Trimming_Test/StaticLinkedFSharpCore_Trimming_Test.fsproj @@ -19,8 +19,8 @@ - $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/net10.0/fsc.dll - $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/net10.0/fsc.dll + $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework)/fsc.dll + $(MSBuildThisFileDirectory)../../../../artifacts/bin/fsc/Release/$(FSharpNetCoreProductTargetFramework)/fsc.dll False True diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj index 72d675b1329..e9c0a9a5cbe 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj @@ -2,7 +2,7 @@ Library - net10.0;net472 + $(FSharpNetCoreProductTargetFramework);net472 typeproviders NO_GENERATIVE IS_DESIGNTIME diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj index f9d5b424c3a..68cf0a1ce5a 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - net10.0 + $(FSharpNetCoreProductTargetFramework) $(TestTargetFramework) false NO_GENERATIVE diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj index 01979192d6a..4a8d1df2302 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj @@ -2,7 +2,7 @@ Library - net10.0;net472 + $(FSharpNetCoreProductTargetFramework);net472 typeproviders $(FSharpCoreShippedPackageVersionValue) typeproviders diff --git a/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd b/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd index c7ba6b18336..b3bf068b6d7 100644 --- a/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd +++ b/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd @@ -10,6 +10,9 @@ setlocal set __scriptpath=%~dp0 set configuration=Debug +rem Read TFM from centralized source using MSBuild +for /f "usebackq delims=" %%a in (`dotnet msbuild "%__scriptpath%..\..\..\eng\TargetFrameworks.props" --getProperty:FSharpNetCoreProductTargetFramework`) do set PRODUCT_TFM=%%a + :parseargs if "%1" == "" goto argsdone if /i "%1" == "-c" goto set_configuration @@ -42,8 +45,8 @@ echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuratio dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net10.0 -p:FSharpTestCompilerVersion=coreclr - dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net10.0 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=%PRODUCT_TFM% -p:FSharpTestCompilerVersion=coreclr + dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=%PRODUCT_TFM% -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure rem @@ -60,8 +63,8 @@ echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuratio dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net10.0 -p:FSharpTestCompilerVersion=coreclr - dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net10.0 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=%PRODUCT_TFM% -p:FSharpTestCompilerVersion=coreclr + dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=%PRODUCT_TFM% -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure :success diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj index 6cc13b482bb..23bb2773ad6 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - net10.0 + $(FSharpNetCoreProductTargetFramework) $(TestTargetFramework) false $(FSharpCoreShippedPackageVersionValue) diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj index bda6855f20b..21c8f10d8a2 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj @@ -2,9 +2,8 @@ Library - net10.0;net472 + $(FSharpNetCoreProductTargetFramework);net472 $(FSharpCoreShippedPackageVersionValue) - net10.0;net472 diff --git a/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd b/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd index 4a22079f3b9..0e43634ddb8 100644 --- a/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd +++ b/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd @@ -10,6 +10,9 @@ setlocal set __scriptpath=%~dp0 set configuration=Debug +rem Read TFM from centralized source using MSBuild +for /f "usebackq delims=" %%a in (`dotnet msbuild "%__scriptpath%..\..\..\eng\TargetFrameworks.props" --getProperty:FSharpNetCoreProductTargetFramework`) do set PRODUCT_TFM=%%a + :parseargs if "%1" == "" goto argsdone if /i "%1" == "-c" goto set_configuration @@ -42,8 +45,8 @@ echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuratio dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure -echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net10.0 -p:FSharpTestCompilerVersion=coreclr - dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net10.0 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=%PRODUCT_TFM% -p:FSharpTestCompilerVersion=coreclr + dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=%PRODUCT_TFM% -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure rem @@ -60,8 +63,8 @@ echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuratio dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure -echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -v %configuration% -p:TestTargetFramework=net10.0 -p:FSharpTestCompilerVersion=coreclr - dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net10.0 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -v %configuration% -p:TestTargetFramework=%PRODUCT_TFM% -p:FSharpTestCompilerVersion=coreclr + dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=%PRODUCT_TFM% -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure :success diff --git a/tests/EndToEndBuildTests/DesignTimeProviderPackaging/Host/Host.fsproj b/tests/EndToEndBuildTests/DesignTimeProviderPackaging/Host/Host.fsproj index de732cce270..180c2812622 100644 --- a/tests/EndToEndBuildTests/DesignTimeProviderPackaging/Host/Host.fsproj +++ b/tests/EndToEndBuildTests/DesignTimeProviderPackaging/Host/Host.fsproj @@ -2,7 +2,7 @@ Library - net10.0 + $(FSharpNetCoreProductTargetFramework) $(FSharpCoreShippedPackageVersionValue) diff --git a/tests/EndToEndBuildTests/DesignTimeProviderPackaging/PlainLib/PlainLib.fsproj b/tests/EndToEndBuildTests/DesignTimeProviderPackaging/PlainLib/PlainLib.fsproj index 66c56375917..86007ac4149 100644 --- a/tests/EndToEndBuildTests/DesignTimeProviderPackaging/PlainLib/PlainLib.fsproj +++ b/tests/EndToEndBuildTests/DesignTimeProviderPackaging/PlainLib/PlainLib.fsproj @@ -2,7 +2,7 @@ Library - net10.0 + $(FSharpNetCoreProductTargetFramework) $(FSharpCoreShippedPackageVersionValue) diff --git a/tests/EndToEndBuildTests/DesignTimeProviderPackaging/Provider/Provider.fsproj b/tests/EndToEndBuildTests/DesignTimeProviderPackaging/Provider/Provider.fsproj index efc2d319d11..8144f202d1e 100644 --- a/tests/EndToEndBuildTests/DesignTimeProviderPackaging/Provider/Provider.fsproj +++ b/tests/EndToEndBuildTests/DesignTimeProviderPackaging/Provider/Provider.fsproj @@ -2,7 +2,7 @@ Library - net10.0 + $(FSharpNetCoreProductTargetFramework) $(FSharpCoreShippedPackageVersionValue) true diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs index 95ee4c8f24f..be547816b51 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs @@ -100,7 +100,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(1, result.SourceFiles |> Seq.length) Assert.Equal(2, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net10.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, TestFramework.productTfm) Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -122,7 +122,7 @@ type DependencyManagerInteractiveTests() = let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite, 3.1.8"|], reportError, "net10.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite, 3.1.8"|], reportError, TestFramework.productTfm) Assert.Equal(true, result.Success) Assert.True((result.Resolutions |> Seq.length) > 1) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -152,7 +152,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(0, result.SourceFiles |> Seq.length) Assert.Equal(0, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "System.Collections.Immutable.DoesNotExist"|], reportError, "net10.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "System.Collections.Immutable.DoesNotExist"|], reportError, TestFramework.productTfm) Assert.Equal(false, result.Success) Assert.Equal(0, result.Resolutions |> Seq.length) Assert.Equal(0, result.SourceFiles |> Seq.length) @@ -182,7 +182,7 @@ type DependencyManagerInteractiveTests() = Assert.True((result1.Roots |> Seq.head).EndsWith("/fsharp.data/3.3.3/")) Assert.True((result1.Roots |> Seq.last).EndsWith("/microsoft.netframework.referenceassemblies/1.0.0/")) - let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net10.0") + let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, TestFramework.productTfm) Assert.Equal(true, result2.Success) Assert.Equal(1, result2.Resolutions |> Seq.length) let expected2 = "/netstandard2.0/" @@ -203,7 +203,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(1, result3.SourceFiles |> Seq.length) Assert.True((result3.Roots |> Seq.head).EndsWith("/system.json/4.6.0/")) - let result4 = dp2.Resolve(idm2, ".fsx", [|"r", "System.Json, Version=4.6.0"|], reportError, "net10.0") + let result4 = dp2.Resolve(idm2, ".fsx", [|"r", "System.Json, Version=4.6.0"|], reportError, TestFramework.productTfm) Assert.Equal(true, result4.Success) Assert.Equal(1, result4.Resolutions |> Seq.length) let expected4 = "/netstandard2.0/" @@ -239,7 +239,7 @@ type DependencyManagerInteractiveTests() = // Netstandard gets fewer dependencies than desktop, because desktop framework doesn't contain assemblies like System.Memory // Those assemblies must be delivered by nuget for desktop apps - let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "Microsoft.Extensions.Configuration.Abstractions, 3.1.1"|], reportError, "net10.0") + let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "Microsoft.Extensions.Configuration.Abstractions, 3.1.1"|], reportError, TestFramework.productTfm) Assert.Equal(true, result2.Success) Assert.Equal(2, result2.Resolutions |> Seq.length) let expected = "/netcoreapp3.1/" @@ -299,7 +299,7 @@ TorchSharp.Tensor.LongTensor.From([| 0L .. 100L |]).Device let result = use dp = new DependencyProvider(AssemblyResolutionProbe(assemblyProbingPaths), NativeResolutionProbe(nativeProbingRoots), false) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net10.0") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, TestFramework.productTfm) Assert.True(result.Success, "resolve failed") @@ -397,7 +397,7 @@ printfn ""%A"" result let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots), false) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net10.0") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, TestFramework.productTfm) Assert.True(result.Success, "resolve failed") @@ -482,7 +482,7 @@ printfn ""%A"" result let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots), false) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net10.0") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, TestFramework.productTfm) Assert.True(result.Success, "resolve failed") @@ -536,7 +536,7 @@ x |> Seq.iter(fun r -> let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots), false) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net10.0") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, TestFramework.productTfm) // Expected: error FS3217: PackageManager cannot reference the System Package 'FSharp.Core' Assert.False(result.Success, "resolve succeeded but should have failed") @@ -559,7 +559,7 @@ x |> Seq.iter(fun r -> let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots), false) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - dp.Resolve(idm, ".csx", packagemanagerlines, reportError, "net10.0") + dp.Resolve(idm, ".csx", packagemanagerlines, reportError, TestFramework.productTfm) Assert.True(result.Success, "resolve failed but should have succeeded") @@ -602,7 +602,7 @@ x |> Seq.iter(fun r -> Assert.Equal(1, result.SourceFiles |> Seq.length) Assert.Equal(2, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net10.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, TestFramework.productTfm) Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -709,7 +709,7 @@ x |> Seq.iter(fun r -> let mutable currentPath:string = null use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots), false) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite,3.1.7"|], reportError, "net10.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite,3.1.7"|], reportError, TestFramework.productTfm) Assert.Equal(true, result.Success) currentPath <- appendSemiColon (Environment.GetEnvironmentVariable("PATH")) finalPath <- appendSemiColon (Environment.GetEnvironmentVariable("PATH")) @@ -799,7 +799,7 @@ x |> Seq.iter(fun r -> ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net10.0", timeout=0) // Fail in 0 milliseconds + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, TestFramework.productTfm, timeout=0) // Fail in 0 milliseconds Assert.Equal(false, result.Success) Assert.Equal(foundCorrectError, true) Assert.Equal(foundWrongError, false) @@ -822,7 +822,7 @@ x |> Seq.iter(fun r -> ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=0"|], reportError, "net10.0", null, "", "", "", -1) // Wait forever + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=0"|], reportError, TestFramework.productTfm, null, "", "", "", -1) // Wait forever Assert.Equal(false, result.Success) Assert.Equal(foundCorrectError, true) Assert.Equal(foundWrongError, false) @@ -845,7 +845,7 @@ x |> Seq.iter(fun r -> ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=none"|], reportError, "net10.0", null, "", "", "", -1) // Wait forever + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=none"|], reportError, TestFramework.productTfm, null, "", "", "", -1) // Wait forever Assert.Equal(true, result.Success) Assert.Equal(foundCorrectError, false) Assert.Equal(foundWrongError, false) @@ -871,7 +871,7 @@ x |> Seq.iter(fun r -> let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", None, reportError, "nuget") // Resolve and cache the results won't time out - let _result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=10000"|], reportError, "net10.0", null, "", "", "", -1) // Wait forever + let _result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=10000"|], reportError, TestFramework.productTfm, null, "", "", "", -1) // Wait forever // Clear the results foundCorrectError <- false @@ -880,7 +880,7 @@ x |> Seq.iter(fun r -> // Now clear the cache --- this will ensure that resolving produces a timeout error. If we read from the cache the test will fail dp.ClearResultsCache(Seq.empty, "", None, reportError) - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=0"|], reportError, "net10.0", null, "", "", "", -1) // Wait forever + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=0"|], reportError, TestFramework.productTfm, null, "", "", "", -1) // Wait forever Assert.Equal(false, result.Success) Assert.Equal(foundCorrectError, true) Assert.Equal(foundWrongError, false) diff --git a/tests/FSharp.Test.Utilities/CompilerAssert.fs b/tests/FSharp.Test.Utilities/CompilerAssert.fs index 12d95f33ce4..e7d4bcbb79e 100644 --- a/tests/FSharp.Test.Utilities/CompilerAssert.fs +++ b/tests/FSharp.Test.Utilities/CompilerAssert.fs @@ -615,16 +615,18 @@ module CompilerAssertHelpers = let fileName = "dotnet" let arguments = outputFilePath - let runtimeconfig = """ -{ - "runtimeOptions": { - "tfm": "net10.0", - "framework": { + // Derive the runtime version from productTfm (e.g., "net10.0" -> "10.0.0") + let runtimeVersion = productTfm.Replace("net", "") + ".0" + let runtimeconfig = $""" +{{ + "runtimeOptions": {{ + "tfm": "{productTfm}", + "framework": {{ "name": "Microsoft.NETCore.App", - "version": "10.0.0" - } - } -}""" + "version": "{runtimeVersion}" + }} + }} +}}""" let runtimeconfigPath = Path.ChangeExtension(outputFilePath, ".runtimeconfig.json") File.WriteAllText(runtimeconfigPath, runtimeconfig) #endif diff --git a/tests/FSharp.Test.Utilities/ProjectGeneration.fs b/tests/FSharp.Test.Utilities/ProjectGeneration.fs index 6c9684557a5..dd1e2eacb65 100644 --- a/tests/FSharp.Test.Utilities/ProjectGeneration.fs +++ b/tests/FSharp.Test.Utilities/ProjectGeneration.fs @@ -443,12 +443,12 @@ let renderCustomSignatureFile (project: SyntheticProject) (f: SyntheticSourceFil let private renderFsProj (p: SyntheticProject) = seq { - """ + $""" Exe - net10.0 + {productTfm} diff --git a/tests/FSharp.Test.Utilities/TestFramework.fs b/tests/FSharp.Test.Utilities/TestFramework.fs index 72dbfa46f3d..93ed1c796d5 100644 --- a/tests/FSharp.Test.Utilities/TestFramework.fs +++ b/tests/FSharp.Test.Utilities/TestFramework.fs @@ -273,6 +273,9 @@ let requireFile dir path = let SCRIPT_ROOT = __SOURCE_DIRECTORY__ let repoRoot = SCRIPT_ROOT ++ ".." ++ ".." +/// The product target framework moniker, from FSharp.BuildProperties (generated during build) +let productTfm = FSharp.BuildProperties.fsProductTfm + let loadVersionsProps () = let versionsPropsPath = repoRoot ++ "eng" ++ "Versions.props" if not (File.Exists versionsPropsPath) then @@ -298,7 +301,7 @@ let config configurationName envVars = let fsharpCoreArchitecture = "netstandard2.0" let fsharpBuildArchitecture = "netstandard2.0" let fsharpCompilerInteractiveSettingsArchitecture = "netstandard2.0" - let dotnetArchitecture = "net10.0" + let dotnetArchitecture = productTfm #if NET472 let fscArchitecture = "net472" let fsiArchitecture = "net472" diff --git a/tests/FSharp.Test.Utilities/Utilities.fs b/tests/FSharp.Test.Utilities/Utilities.fs index 3a8a7ae487e..1305a532978 100644 --- a/tests/FSharp.Test.Utilities/Utilities.fs +++ b/tests/FSharp.Test.Utilities/Utilities.fs @@ -205,7 +205,7 @@ let main argv = 0""" let directoryBuildTargetsFileName = Path.Combine(projectDirectory, "Directory.Build.targets") let frameworkReferencesFileName = Path.Combine(projectDirectory, "FrameworkReferences.txt") #if NETCOREAPP - File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "net10.0").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) + File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", productTfm).Replace("$FSHARPCORELOCATION", pathToFSharpCore)) #else File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "net472").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) #endif diff --git a/tests/ILVerify/ilverify.ps1 b/tests/ILVerify/ilverify.ps1 index f86016b4a68..9559d00dc42 100644 --- a/tests/ILVerify/ilverify.ps1 +++ b/tests/ILVerify/ilverify.ps1 @@ -41,13 +41,15 @@ $env:PublishWindowsPdb = "false" [string[]] $ignore_errors = @() # @("StackUnexpected", "UnmanagedPointer", "StackByRef", "ReturnPtrToStack", "ExpectedNumericType", "StackUnderflow") [string] $default_tfm = "netstandard2.0" +# Read product TFM from centralized source of truth via MSBuild +[string] $product_tfm = (& (Join-Path $repo_path "eng/common/dotnet.ps1") msbuild (Join-Path $repo_path "eng/TargetFrameworks.props") --getProperty:FSharpNetCoreProductTargetFramework).Trim() [string] $artifacts_bin_path = Join-Path (Join-Path $repo_path "artifacts") "bin" # List projects to verify, with TFMs $projects = @{ "FSharp.Core" = @($default_tfm, "netstandard2.1") - "FSharp.Compiler.Service" = @($default_tfm, "net10.0") + "FSharp.Compiler.Service" = @($default_tfm, $product_tfm) } # Check ilverify can run diff --git a/tests/fsharp/SDKTests/tests/FSharpCoreVersionTest.props b/tests/fsharp/SDKTests/tests/FSharpCoreVersionTest.props index f558553bf6a..270ccbb078f 100644 --- a/tests/fsharp/SDKTests/tests/FSharpCoreVersionTest.props +++ b/tests/fsharp/SDKTests/tests/FSharpCoreVersionTest.props @@ -1,10 +1,13 @@ + + + - net10.0 - <_TargetFrameworkVersionWithoutV>10.0 + $(FSharpNetCoreProductTargetFramework) + <_TargetFrameworkVersionWithoutV>$(FSharpNetCoreProductMajorVersion).0 .NETCoreApp Release $(FSharpRepositoryPath)\artifacts\bin\FSharpSuite.Tests\$(Configuration)\$(TARGETFRAMEWORK) diff --git a/tests/fsharp/single-test.fs b/tests/fsharp/single-test.fs index 764017e7c91..41f6e032609 100644 --- a/tests/fsharp/single-test.fs +++ b/tests/fsharp/single-test.fs @@ -219,7 +219,7 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = let extraSources = ["testlib.fsi";"testlib.fs";"test.fsi";"test.fs";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"] let utilitySources = [] let referenceItems = if String.IsNullOrEmpty(copyFiles) then [] else [copyFiles] - let framework = "net10.0" + let framework = productTfm // Arguments: // outputType = OutputType.Exe, OutputType.Library or OutputType.Script @@ -283,8 +283,8 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = match p with #if NETCOREAPP - | FSC_NETCORE (optimized, buildOnly) -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "net10.0" optimized buildOnly - | FSI_NETCORE -> executeSingleTestBuildAndRun OutputType.Script "coreclr" "net10.0" true false + | FSC_NETCORE (optimized, buildOnly) -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" productTfm optimized buildOnly + | FSI_NETCORE -> executeSingleTestBuildAndRun OutputType.Script "coreclr" productTfm true false #else | FSC_NETFX (optimized, buildOnly) -> executeSingleTestBuildAndRun OutputType.Exe "net40" "net472" optimized buildOnly | FSI_NETFX -> executeSingleTestBuildAndRun OutputType.Script "net40" "net472" true false diff --git a/tests/scripts/identifierAnalysisByType.fsx b/tests/scripts/identifierAnalysisByType.fsx index 2e92c952159..8c3ceb2ec7f 100644 --- a/tests/scripts/identifierAnalysisByType.fsx +++ b/tests/scripts/identifierAnalysisByType.fsx @@ -1,12 +1,16 @@ // Print some stats about identifiers grouped by type // +// IMPORTANT: This is a developer utility script. The TFM in the #r path below +// must match the FSharpNetCoreProductTargetFramework property in +// eng/TargetFrameworks.props. If the product TFM changes, update the path. +// +// Run: dotnet fsi tests/scripts/identifierAnalysisByType.fsx #r "nuget: Ionide.ProjInfo" #I @"..\..\artifacts\bin\fsc\Debug\net10.0\" #r "FSharp.Compiler.Service.dll" open System -open System.IO open Ionide.ProjInfo open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.Symbols