Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
5899b74
feat(FSharp.Core): add pinned FSharpCoreShippedNetTargetFramework kno…
T-Gro Aug 6, 2026
b216325
feat(FSharp.Core): compile net10.0 target
T-Gro Aug 6, 2026
533083c
feat(FSharp.Core): pack lib/net10.0 into the shipped nupkg
T-Gro Aug 6, 2026
bdf1161
test(FSharp.Core): add dedicated net SurfaceArea baseline
T-Gro Aug 6, 2026
2f0adaf
test(FSharp.Core): assembly-level ApiCompat net-vs-ns2.1 identity gate
T-Gro Aug 6, 2026
786897d
build(FSharp.Core): add TFM #if guard audit (the #ifdef-management ask)
T-Gro Aug 6, 2026
8dff8f5
test(FSharp.Core): e2e-1 nupkg-contents + AssemblyVersion-equality ve…
Copilot Aug 6, 2026
2aab488
test(FSharp.Core): e2e-2 net-TFM consumer asset-resolution witness
Copilot Aug 6, 2026
cbd9640
test(FSharp.Core): e2e-5 net-TFM trimming + NativeAOT consumer legs
Copilot Aug 6, 2026
22e8de6
ci(FSharp.Core): wire e2e-1 nupkg verify + e2e-2 resolution witness i…
Copilot Aug 6, 2026
6c1b1bd
docs(release-notes): FSharp.Core net10.0 target framework entry
Copilot Aug 6, 2026
2bb06af
docs(release-notes): fill PR #20224 into FSharp.Core net10.0 entry
Copilot Aug 6, 2026
9c0fc9a
docs(release-notes): point net10.0 entry at PR #20229
Copilot Aug 7, 2026
e4b80c5
Merge remote-tracking branch 'origin/main' into t-gro-fsharpcore-net1…
Copilot Aug 7, 2026
944f220
test(FSharp.Core): refresh net SurfaceArea baselines for Async.RunSyn…
Copilot Aug 7, 2026
efa1b50
refactor(FSharp.Core): trim narration comments in net10.0 TFM scaffol…
Copilot Aug 7, 2026
dc2b916
refactor(tests): tighten e2e-2 consumer comments (NoBloat round 2)
Copilot Aug 7, 2026
17fc005
Compaction round 1: drop dangling plan ref + phase tag
Copilot Aug 7, 2026
f3c4ef3
Compaction round 2: dedup e2e-1 asserts, harden gates, drop dead ns2.…
Copilot Aug 7, 2026
74494f5
ci(FSharp.Core): relocate e2e-2 resolution witness to EndToEndBuildTe…
Copilot Aug 7, 2026
1db6100
harden(net10 pin): clear error on malformed pin TFM + fail-closed e2e…
Copilot Aug 7, 2026
021d62c
fix(FSharp.Core): keep in-repo consumers on netstandard2.1 (net10.0 i…
Copilot Aug 7, 2026
820e491
fix(test): e2e-2 resolves FSharp.Core from the packages root, not a f…
Copilot Aug 7, 2026
2428ddc
fix(test): e2e-2 stages FSharp.Core into a flat local feed for determ…
Copilot Aug 7, 2026
efa90d5
fix(tests): pin FSharp.Compiler.Service.Tests to netstandard2.1 FShar…
Copilot Aug 10, 2026
aeb0a00
test(FSharp.Core): compact net10.0 e2e scaffolding
Copilot Aug 10, 2026
7abba78
fix(build): handle FSharp.Core net pin under source-build
Copilot Aug 10, 2026
555e7f1
test(ilverify): cover the shipped net FSharp.Core leg
Copilot Aug 10, 2026
7a20d3a
test(e2e): prove net-leg fallback resolution, not just exact match
Copilot Aug 10, 2026
d0277a2
test(e2e): replace pack-and-consume project with a compact package check
Copilot Aug 11, 2026
e816351
test(compaction): trim narration + fail-fast package check
Copilot Aug 11, 2026
7153c6e
fix(FSharp.Core): compile net-current leg; simplify shipped-net pin
Copilot Aug 11, 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
3 changes: 3 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@
Cannot live in eng/TargetFrameworks.props because it's imported before Arcade. -->
<PropertyGroup Condition="'$(DotNetBuildSourceOnly)' == 'true'">
<FSharpNetCoreProductTargetFramework>$(NetCurrent)</FSharpNetCoreProductTargetFramework>
<!-- The pin is a nuget.org packaging knob; source-build targets only $(NetCurrent), whose ref pack is
always present, so collapse the pin to it rather than a lagging TFM the VMR may not carry offline. -->
<FSharpCoreShippedNetTargetFramework>$(NetCurrent)</FSharpCoreShippedNetTargetFramework>
</PropertyGroup>

<!-- It's important we set TFM before this, since FSharpTests.Directory.Build.props uses it.
Expand Down
9 changes: 9 additions & 0 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,15 @@
<NoWarn>$(NoWarn);NU1507</NoWarn>
</PropertyGroup>

<!-- FSharp.Core now also builds the shipped-net TFM, but in-repo .NET consumers must keep binding its
netstandard2.1 asset so the in-box compiler/tools and their IL / surface-area baselines stay unchanged.
Any pre-existing explicit SetTargetFramework pin is preserved. -->
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and '$(Configuration)' != 'Proto'">
<ProjectReference Update="@(ProjectReference)">
<SetTargetFramework Condition="'%(ProjectReference.Filename)' == 'FSharp.Core' and '%(ProjectReference.SetTargetFramework)' == ''">TargetFramework=netstandard2.1</SetTargetFramework>
</ProjectReference>
</ItemGroup>

<!-- Disable R2R when building source-only and not targeting the current SDK bundled TFM. -->
<PropertyGroup>
<PublishReadyToRun Condition="'$(DotNetBuildSourceOnly)' == 'true' and
Expand Down
23 changes: 23 additions & 0 deletions azure-pipelines-PR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,26 @@ stages:
DOTNET_ROLL_FORWARD_TO_PRERELEASE: 1
displayName: Check published package version

# Blocking gate enforcing the "net10.0 == netstandard2.1" public-surface invariant
# (mechanism documented in FSharp.Core.ApiCompat.proj).
- job: FSharpCore_ApiCompat
pool:
name: $(DncEngPublicBuildPool)
demands: ImageOverride -equals $(LinuxMachineQueueName)
steps:
- checkout: self
clean: true
- script: ./eng/common/dotnet.sh
displayName: Install .NET SDK
- script: ./eng/common/dotnet.sh build src/FSharp.Core/FSharp.Core.fsproj -c Release
env:
DOTNET_ROLL_FORWARD_TO_PRERELEASE: 1
displayName: Build FSharp.Core (all shipped TFMs, Release)
- script: ./eng/common/dotnet.sh msbuild tests/FSharp.Core.ApiCompat/FSharp.Core.ApiCompat.proj -t:ValidateFSharpCoreApiIdentity -p:Configuration=Release
env:
DOTNET_ROLL_FORWARD_TO_PRERELEASE: 1
displayName: ApiCompat net-vs-netstandard2.1 identity gate (strict, empty suppressions)


#-------------------------------------------------------------------------------------------------------------------#
# PR builds #
Expand Down Expand Up @@ -564,6 +584,9 @@ stages:
NativeToolsOnMachine: true
- script: .\tests\EndToEndBuildTests\EndToEndBuildTests.cmd -c Release
displayName: End to end build tests
- script: .\eng\common\dotnet.cmd fsi .\tests\AheadOfTime\NetPackage\VerifyNetPackage.fsx
displayName: 'Verify shipped FSharp.Core nupkg ships lib/<net-pin>'
workingDirectory: $(Build.SourcesDirectory)

# Publish artifacts for regression testing
- task: PublishPipelineArtifact@1
Expand Down
1 change: 1 addition & 0 deletions docs/release-notes/.FSharp.Core/11.0.100.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@

### Added

* Ship `FSharp.Core` with an additional `net10.0` target framework (next to `netstandard2.0` and `netstandard2.1`). The `net`-TFM assembly is public-surface-identical to the `netstandard2.1` one; the target version is a pinned, deliberately advanced knob. ([PR #20229](https://github.com/dotnet/fsharp/pull/20229))
* `Async.RunSynchronouslyImmediate`: runs work on the calling thread until the first asynchronous suspension (as opposed to `RunSynchronously`, which immediately offloads if not on a background and/or threadpool thread). ([Issue #1042](https://github.com/fsharp/fslang-suggestions/issues/1042), [PR #19804](https://github.com/dotnet/fsharp/pull/19804))
3 changes: 3 additions & 0 deletions eng/TargetFrameworks.props
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@

<!-- Derive major version by stripping 'net' prefix and '.0' suffix (e.g., net10.0 -> 10) -->
<FSharpNetCoreProductMajorVersion>$([System.Text.RegularExpressions.Regex]::Replace('$(FSharpNetCoreProductTargetFramework)', '^net(\d+)\.0$', '$1'))</FSharpNetCoreProductMajorVersion>

<!-- Net TFM shipped in the FSharp.Core NuGet package. Lags the in-dev product TFM; bump deliberately. -->
<FSharpCoreShippedNetTargetFramework Condition="'$(FSharpCoreShippedNetTargetFramework)' == ''">net10.0</FSharpCoreShippedNetTargetFramework>
</PropertyGroup>

</Project>
8 changes: 7 additions & 1 deletion src/FSharp.Core/FSharp.Core.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFrameworks Condition="'$(Configuration)' == 'Proto'">netstandard2.0</TargetFrameworks>
<TargetFrameworks Condition="'$(Configuration)' != 'Proto'">netstandard2.0;netstandard2.1</TargetFrameworks>
<TargetFrameworks Condition="'$(Configuration)' != 'Proto'">netstandard2.0;netstandard2.1;$(FSharpCoreShippedNetTargetFramework)</TargetFrameworks>
<NoWarn>$(NoWarn);75</NoWarn> <!-- InternalCommandLineOption -->
<NoWarn>$(NoWarn);1204</NoWarn> <!-- This construct is for use in the FSharp.Core library and should not be used directly -->
<AllowCrossTargeting>true</AllowCrossTargeting>
Expand Down Expand Up @@ -36,6 +36,12 @@
<Configurations>Debug;Release;Proto</Configurations>
</PropertyGroup>

<!-- Pinned .NET TFM for the shipped FSharp.Core, surfaced to FSharp.Core.nuspec as a $token$
so the package lib/dependency group stay driven by the single knob in eng/TargetFrameworks.props. -->
<ItemGroup Condition="'$(Configuration)' != 'Proto'">
<NuspecProperty Include="FSharpCoreShippedNetTargetFramework=$(FSharpCoreShippedNetTargetFramework)" />
</ItemGroup>

<!-- .FSharp.Core always uses the old style initialization mechanism because of SQL CLR requirements -->
<PropertyGroup Condition="'$(BUILDING_USING_DOTNET)' != 'true' and '$(Configuration)' != 'Proto'">
<OtherFlags>$(OtherFlags) --realsig-</OtherFlags>
Expand Down
7 changes: 7 additions & 0 deletions src/FSharp.Core/FSharp.Core.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<dependencies>
<group targetFramework=".NETStandard2.0" />
<group targetFramework=".NETStandard2.1" />
<group targetFramework="$FSharpCoreShippedNetTargetFramework$" />
</dependencies>
</metadata>
<files>
Expand All @@ -22,5 +23,11 @@

<!-- resources -->
<file src="FSharp.Core\$Configuration$\netstandard2.1\**\FSharp.Core.resources.dll" target="lib\netstandard2.1" />

<file src="FSharp.Core\$Configuration$\$FSharpCoreShippedNetTargetFramework$\FSharp.Core.dll" target="lib\$FSharpCoreShippedNetTargetFramework$" />
<file src="FSharp.Core\$Configuration$\$FSharpCoreShippedNetTargetFramework$\FSharp.Core.xml" target="lib\$FSharpCoreShippedNetTargetFramework$" />

<!-- resources -->
<file src="FSharp.Core\$Configuration$\$FSharpCoreShippedNetTargetFramework$\**\FSharp.Core.resources.dll" target="lib\$FSharpCoreShippedNetTargetFramework$" />
</files>
</package>
14 changes: 7 additions & 7 deletions src/FSharp.Core/Query.fs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ type QueryBuilder() =
member _.Head (source: QuerySource<'T, 'Q>) =
Enumerable.First source.Source

member _.Nth (source: QuerySource<'T, 'Q>, index) =
member _.Nth (source: QuerySource<'T, 'Q>, index: int) =
Enumerable.ElementAt (source.Source, index)

member _.Skip (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> =
Expand All @@ -116,7 +116,7 @@ type QueryBuilder() =
member _.SkipWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> =
QuerySource (Enumerable.SkipWhile (source.Source, Func<_, _>(predicate)))

member _.Take (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> =
member _.Take (source: QuerySource<'T, 'Q>, count: int) : QuerySource<'T, 'Q> =
QuerySource (Enumerable.Take (source.Source, count))

member _.TakeWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> =
Expand Down Expand Up @@ -246,7 +246,7 @@ type QueryBuilder() =
QuerySource (Enumerable.GroupJoin(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(resultSelector)))

member _.LeftOuterJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> =
QuerySource (Enumerable.GroupJoin(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(fun x g -> resultSelector x (g.DefaultIfEmpty()))))
QuerySource (Enumerable.GroupJoin(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(fun x (g: seq<_>) -> resultSelector x (g.DefaultIfEmpty()))))

member _.RunQueryAsValue (q: Quotations.Expr<'T>) : 'T =
ForwardDeclarations.Query.Execute q
Expand Down Expand Up @@ -475,8 +475,8 @@ module Query =
MakeOrCallContainsOrElementAt FQ FE

let MakeElementAt, CallElementAt =
let FQ = methodhandleof (fun (x, y) -> Queryable.ElementAt(x, y))
let FE = methodhandleof (fun (x, y) -> Enumerable.ElementAt(x, y))
let FQ = methodhandleof (fun (x, y) -> Queryable.ElementAt(x, (y: int)))
let FE = methodhandleof (fun (x, y) -> Enumerable.ElementAt(x, (y: int)))
MakeOrCallContainsOrElementAt FQ FE

let MakeOrCallMinByOrMaxBy FQ FE =
Expand Down Expand Up @@ -886,8 +886,8 @@ module Query =

let MakeTake =
MakeSkipOrTake
(methodhandleof (fun (x, y) -> Queryable.Take (x, y)))
(methodhandleof (fun (x, y) -> Enumerable.Take (x, y)))
(methodhandleof (fun (x, y) -> Queryable.Take (x, (y: int))))
(methodhandleof (fun (x, y) -> Enumerable.Take (x, (y: int))))

let MakeSkipWhile =
GenMakeSkipWhileOrTakeWhile
Expand Down
6 changes: 3 additions & 3 deletions src/FSharp.Core/local.fs
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ module internal DetailedExceptions =
open Microsoft.FSharp.Core

/// takes an argument, a formatting string, a param array to splice into the formatting string
let inline invalidArgFmt (arg:string) (format:string) paramArray =
let inline invalidArgFmt (arg:string) (format:string) (paramArray: obj[]) =
let msg = String.Format (format, paramArray)
raise (ArgumentException(msg, arg))

/// takes an argument, a formatting string, a param array to splice into the formatting string
let inline invalidArgOutOfRangeFmt (arg:string) (format:string) paramArray =
let inline invalidArgOutOfRangeFmt (arg:string) (format:string) (paramArray: obj[]) =
let msg = String.Format (format, paramArray)
raise (ArgumentOutOfRangeException(arg, msg))

/// takes a formatting string and a param array to splice into the formatting string
let inline invalidOpFmt (format:string) paramArray =
let inline invalidOpFmt (format:string) (paramArray: obj[]) =
let msg = String.Format (format, paramArray)
raise (InvalidOperationException(msg))

Expand Down
9 changes: 6 additions & 3 deletions src/FSharp.Core/prim-types.fs
Original file line number Diff line number Diff line change
Expand Up @@ -443,13 +443,14 @@ namespace System.Diagnostics.CodeAnalysis
member this.DynamicallyAccessedMembersAttribute(memberTypes: DynamicallyAccessedMemberTypes) =
this.MemberTypes <- memberTypes

#endif

namespace Microsoft.FSharp.Core
open System
open System.Collections
open System.Collections.Generic
open System.Globalization
open System.Reflection
#endif

[<MeasureAnnotatedAbbreviation>] type float<[<Measure>] 'Measure> = float
[<MeasureAnnotatedAbbreviation>] type float32<[<Measure>] 'Measure> = float32
Expand Down Expand Up @@ -4096,6 +4097,7 @@ namespace Microsoft.FSharp.Core
and 'T voption = ValueOption<'T>

// These attributes only exist in .NET 8 and up.
#if !NET8_0_OR_GREATER
namespace System.Runtime.CompilerServices
open System
open Microsoft.FSharp.Core
Expand All @@ -4111,6 +4113,7 @@ namespace System.Runtime.CompilerServices
[<AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)>]
type internal ScopedRefAttribute () =
inherit Attribute ()
#endif

namespace Microsoft.FSharp.Collections

Expand All @@ -4128,7 +4131,7 @@ namespace Microsoft.FSharp.Collections
open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicFunctions
open Microsoft.FSharp.Core.BasicInlinedOperations

#if NETSTANDARD2_1_OR_GREATER
#if NETSTANDARD2_1_OR_GREATER || NET
[<System.Runtime.CompilerServices.CollectionBuilder(typeof<List>, "Create")>]
#endif
[<DefaultAugmentation(false)>]
Expand Down Expand Up @@ -4156,7 +4159,7 @@ namespace Microsoft.FSharp.Collections

and 'T list = List<'T>

#if NETSTANDARD2_1_OR_GREATER
#if NETSTANDARD2_1_OR_GREATER || NET
and [<CompilerMessage("This type is for compiler use and should not be used directly", 1204, IsHidden=true);
Sealed;
AbstractClass;
Expand Down
9 changes: 7 additions & 2 deletions src/FSharp.Core/prim-types.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -1008,6 +1008,7 @@ namespace Microsoft.FSharp.Core.CompilerServices
[<CompilerMessage("This type is for compiler use and should not be used directly", 1204, IsHidden = true)>]
type SupportsWhenTEnum = class end

#if !NET5_0_OR_GREATER
namespace System.Diagnostics.CodeAnalysis

open System
Expand Down Expand Up @@ -1047,6 +1048,8 @@ namespace System.Diagnostics.CodeAnalysis
new: DynamicallyAccessedMemberTypes -> DynamicallyAccessedMembersAttribute
member MemberTypes: DynamicallyAccessedMemberTypes

#endif

namespace Microsoft.FSharp.Core

open System
Expand Down Expand Up @@ -2606,6 +2609,7 @@ namespace Microsoft.FSharp.Core
| Error of ErrorValue:'TError

// These attributes only exist in .NET 8 and up.
#if !NET8_0_OR_GREATER
namespace System.Runtime.CompilerServices
open System
open Microsoft.FSharp.Core
Expand Down Expand Up @@ -2637,6 +2641,7 @@ namespace System.Runtime.CompilerServices
type internal ScopedRefAttribute =
inherit Attribute
new: unit -> ScopedRefAttribute
#endif

namespace Microsoft.FSharp.Collections

Expand All @@ -2654,7 +2659,7 @@ namespace Microsoft.FSharp.Collections
/// </remarks>
///
/// <exclude />
#if NETSTANDARD2_1_OR_GREATER
#if NETSTANDARD2_1_OR_GREATER || NET
[<System.Runtime.CompilerServices.CollectionBuilder(typeof<List>, "Create")>]
#endif
[<DefaultAugmentation(false)>]
Expand Down Expand Up @@ -2730,7 +2735,7 @@ namespace Microsoft.FSharp.Collections
/// </remarks>
and 'T list = List<'T>

#if NETSTANDARD2_1_OR_GREATER
#if NETSTANDARD2_1_OR_GREATER || NET
/// <summary>Contains methods for compiler use related to lists.</summary>
and [<CompilerMessage("This type is for compiler use and should not be used directly", 1204, IsHidden=true);
Sealed;
Expand Down
4 changes: 2 additions & 2 deletions src/FSharp.Core/set.fs
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,7 @@ module internal SetTree =
let ofArray comparer l =
Array.fold (fun acc k -> add comparer k acc) empty l

#if NETSTANDARD2_1_OR_GREATER
#if NETSTANDARD2_1_OR_GREATER || NET
[<System.Runtime.CompilerServices.CollectionBuilder(typeof<Set>, "Create")>]
#endif
[<Sealed>]
Expand Down Expand Up @@ -1097,7 +1097,7 @@ type Set<[<EqualityConditionalOn>] 'T when 'T: comparison>(comparer: IComparer<'
.Append("; ... ]")
.ToString()

#if NETSTANDARD2_1_OR_GREATER
#if NETSTANDARD2_1_OR_GREATER || NET
and [<CompilerMessage("This type is for compiler use and should not be used directly", 1204, IsHidden = true);
Sealed;
AbstractClass;
Expand Down
4 changes: 2 additions & 2 deletions src/FSharp.Core/set.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ open Microsoft.FSharp.Collections
/// <remarks>See the <see cref="T:Microsoft.FSharp.Collections.SetModule"/> module for further operations on sets.
///
/// All members of this class are thread-safe and may be used concurrently from multiple threads.</remarks>
#if NETSTANDARD2_1_OR_GREATER
#if NETSTANDARD2_1_OR_GREATER || NET
[<System.Runtime.CompilerServices.CollectionBuilder(typeof<Set>, "Create")>]
#endif
[<Sealed>]
Expand Down Expand Up @@ -263,7 +263,7 @@ type Set<[<EqualityConditionalOn>] 'T when 'T: comparison> =
interface System.Collections.IStructuralEquatable
interface IReadOnlyCollection<'T>

#if NETSTANDARD2_1_OR_GREATER
#if NETSTANDARD2_1_OR_GREATER || NET
/// <summary>Contains methods for compiler use related to sets.</summary>
and [<CompilerMessage("This type is for compiler use and should not be used directly", 1204, IsHidden = true);
Sealed;
Expand Down
2 changes: 1 addition & 1 deletion src/FSharp.Core/tasks.fs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ type TaskBuilderBase() =
member inline _.For(sequence: seq<'T>, body: 'T -> TaskCode<'TOverall, unit>) : TaskCode<'TOverall, unit> =
ResumableCode.For(sequence, body)

#if NETSTANDARD2_1
#if NETSTANDARD2_1 || NET
member inline internal this.TryFinallyAsync
(body: TaskCode<'TOverall, 'T>, compensation: unit -> ValueTask)
: TaskCode<'TOverall, 'T> =
Expand Down
2 changes: 1 addition & 1 deletion src/FSharp.Core/tasks.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ type TaskBuilderBase =
member inline TryWith:
body: TaskCode<'TOverall, 'T> * catch: (exn -> TaskCode<'TOverall, 'T>) -> TaskCode<'TOverall, 'T>

#if NETSTANDARD2_1
#if NETSTANDARD2_1 || NET
/// <summary>
/// Specifies a unit of task code which binds to the resource implementing IAsyncDisposable and disposes it asynchronously
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
<AdditionalProperties>TargetFrameworks=netstandard2.0</AdditionalProperties>
</DependentProjects>
<DependentProjects Include="$(MSBuildThisFileDirectory)..\FSharp.Core\FSharp.Core.fsproj">
<AdditionalProperties>TargetFrameworks=netstandard2.1;netstandard2.0</AdditionalProperties>
<AdditionalProperties>TargetFrameworks=netstandard2.1;netstandard2.0;$(FSharpCoreShippedNetTargetFramework)</AdditionalProperties>
</DependentProjects>
<DependentProjects Include="$(MSBuildThisFileDirectory)..\Compiler\FSharp.Compiler.Service.fsproj">
<AdditionalProperties>TargetFrameworks=netstandard2.0</AdditionalProperties>
Expand Down
2 changes: 1 addition & 1 deletion tests/AheadOfTime/NativeAOT/NativeAOT_Test.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net9.0</TargetFrameworks>
<TargetFrameworks>net9.0;$(FSharpCoreShippedNetTargetFramework)</TargetFrameworks>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
Expand Down
Loading
Loading