From 0c1ccdd5b80425248dfdb2197fc4f706507cbfd3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 09:29:49 +0000 Subject: [PATCH 01/57] [release/dev18.0] Source code updates from dotnet/dotnet (#18947) * Backflow from https://github.com/dotnet/dotnet / 8aba88f build 285155 [[ commit created by automation ]] * Update dependencies from https://github.com/dotnet/dotnet build 285155 No dependency updates to commit --------- Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 2 +- es-metadata.yml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 es-metadata.yml diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 4c2103c42d6..acbf83c0f9d 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,6 +1,6 @@ - + https://github.com/dotnet/msbuild diff --git a/es-metadata.yml b/es-metadata.yml new file mode 100644 index 00000000000..bcceb48d06c --- /dev/null +++ b/es-metadata.yml @@ -0,0 +1,8 @@ +schemaVersion: 0.0.1 +isProduction: true +accountableOwners: + service: d9a8fd77-4e88-45be-abfa-45268ca1de62 +routing: + defaultAreaPath: + org: devdiv + path: DevDiv\FSharp From 2c5be8506c52ff9ae70bb7b9e49d93385932ec97 Mon Sep 17 00:00:00 2001 From: Jakub Majocha <1760221+majocha@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:24:28 +0200 Subject: [PATCH 02/57] print stack guard thread jump counts --- src/Compiler/Facilities/DiagnosticsLogger.fs | 51 ++++++++++++++----- src/Compiler/Facilities/DiagnosticsLogger.fsi | 8 +-- .../src/FSharp.Editor/Common/DebugHelpers.fs | 2 + 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fs b/src/Compiler/Facilities/DiagnosticsLogger.fs index eb96a5f6e0b..6f1edd493f6 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fs +++ b/src/Compiler/Facilities/DiagnosticsLogger.fs @@ -16,6 +16,7 @@ open System.Runtime.InteropServices open Internal.Utilities.Library open Internal.Utilities.Library.Extras open System.Threading.Tasks +open System.Collections.Concurrent /// Represents the style being used to format errors [] @@ -868,6 +869,33 @@ let internal languageFeatureNotSupportedInLibraryError (langFeature: LanguageFea let suggestedVersionStr = LanguageVersion.GetFeatureVersionString langFeature error (Error(FSComp.SR.chkFeatureNotSupportedInLibrary (featureStr, suggestedVersionStr), m)) +module StackGuardMetrics = + open System + open System.Diagnostics.Metrics + + let meter = new Meter("FSharp.Compiler.DiagnosticsLogger.StackGuard", "1.0.0") + + let jumpCounter = meter.CreateCounter("stackguard-jumps", description = "Tracks the number of times the stack guard has jumped to a new thread") + + let jumps = ConcurrentDictionary() + + let Listen () = + let listener = new MeterListener() + + listener.EnableMeasurementEvents jumpCounter + + listener.SetMeasurementEventCallback(fun _ v tags _ -> + let memberName = nonNull tags[0].Value :?> string + let counter = jumps.GetOrAdd(memberName, fun _ -> ref 0L) + Interlocked.Add(counter, v) |> ignore) + + listener.Start() + listener :> IDisposable + + let StatsToString () = + let entries = jumps |> Seq.map (fun kvp -> $"{kvp.Key}: {kvp.Value.Value}") |> String.concat ", " + $"StackGuard jumps: {entries} \n" + /// Guard against depth of expression nesting, by moving to new stack when a maximum depth is reached type StackGuard(maxDepth: int, name: string) = @@ -877,27 +905,22 @@ type StackGuard(maxDepth: int, name: string) = member _.Guard ( f, - [] memberName: string, - [] path: string, - [] line: int + [] memberName: string ) = - Activity.addEventWithTags - "DiagnosticsLogger.StackGuard.Guard" - (seq { - Activity.Tags.stackGuardName, box name - Activity.Tags.stackGuardCurrentDepth, depth - Activity.Tags.stackGuardMaxDepth, maxDepth - Activity.Tags.callerMemberName, memberName - Activity.Tags.callerFilePath, path - Activity.Tags.callerLineNumber, line - }) - depth <- depth + 1 try if depth % maxDepth = 0 then + let tags = + let mutable tags = TagList() + tags.Add("caller", memberName) + tags + + + StackGuardMetrics.jumpCounter.Add(1L, &tags) + async { do! Async.SwitchToNewThread() Thread.CurrentThread.Name <- $"F# Extra Compilation Thread for {name} (depth {depth})" diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fsi b/src/Compiler/Facilities/DiagnosticsLogger.fsi index 02471dd383b..b2033968f84 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fsi +++ b/src/Compiler/Facilities/DiagnosticsLogger.fsi @@ -459,15 +459,17 @@ val tryLanguageFeatureErrorOption: val languageFeatureNotSupportedInLibraryError: langFeature: LanguageFeature -> m: range -> 'T +module StackGuardMetrics = + val Listen: unit -> IDisposable + val StatsToString: unit -> string + type StackGuard = new: maxDepth: int * name: string -> StackGuard /// Execute the new function, on a new thread if necessary member Guard: f: (unit -> 'T) * - [] memberName: string * - [] path: string * - [] line: int -> + [] memberName: string -> 'T member GuardCancellable: Internal.Utilities.Library.Cancellable<'T> -> Internal.Utilities.Library.Cancellable<'T> diff --git a/vsintegration/src/FSharp.Editor/Common/DebugHelpers.fs b/vsintegration/src/FSharp.Editor/Common/DebugHelpers.fs index 51cdd83f8fa..b06461982c5 100644 --- a/vsintegration/src/FSharp.Editor/Common/DebugHelpers.fs +++ b/vsintegration/src/FSharp.Editor/Common/DebugHelpers.fs @@ -123,10 +123,12 @@ module FSharpServiceTelemetry = let periodicallyDisplayCacheStats = cancellableTask { use _ = CacheMetrics.ListenToAll() + use _ = FSharp.Compiler.DiagnosticsLogger.StackGuardMetrics.Listen() while true do do! Task.Delay(TimeSpan.FromSeconds 10.0) FSharpOutputPane.logMsg (CacheMetrics.StatsToString()) + FSharpOutputPane.logMsg (FSharp.Compiler.DiagnosticsLogger.StackGuardMetrics.StatsToString()) } #if DEBUG From 013227d02c93bf458b348c6dc0ae347cffda7c5f Mon Sep 17 00:00:00 2001 From: Jakub Majocha <1760221+majocha@users.noreply.github.com> Date: Sat, 27 Sep 2025 10:53:29 +0200 Subject: [PATCH 03/57] print with --times --- src/Compiler/Driver/fsc.fs | 1 + src/Compiler/Facilities/DiagnosticsLogger.fs | 56 ++++++++++++------- src/Compiler/Facilities/DiagnosticsLogger.fsi | 6 +- src/Compiler/Utilities/Activity.fs | 3 + src/Compiler/Utilities/Activity.fsi | 5 +- src/Compiler/Utilities/Caches.fs | 2 +- tests/FSharp.Test.Utilities/XunitHelpers.fs | 2 +- 7 files changed, 49 insertions(+), 26 deletions(-) diff --git a/src/Compiler/Driver/fsc.fs b/src/Compiler/Driver/fsc.fs index 2bea066e427..89f196c810f 100644 --- a/src/Compiler/Driver/fsc.fs +++ b/src/Compiler/Driver/fsc.fs @@ -569,6 +569,7 @@ let main1 exiter.Exit 1 if tcConfig.showTimes then + StackGuardMetrics.CaptureStatsAndWriteToConsole() |> disposables.Register Caches.CacheMetrics.CaptureStatsAndWriteToConsole() |> disposables.Register Activity.Profiling.addConsoleListener () |> disposables.Register diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fs b/src/Compiler/Facilities/DiagnosticsLogger.fs index 6f1edd493f6..945b0752a1b 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fs +++ b/src/Compiler/Facilities/DiagnosticsLogger.fs @@ -870,14 +870,26 @@ let internal languageFeatureNotSupportedInLibraryError (langFeature: LanguageFea error (Error(FSComp.SR.chkFeatureNotSupportedInLibrary (featureStr, suggestedVersionStr), m)) module StackGuardMetrics = - open System open System.Diagnostics.Metrics - let meter = new Meter("FSharp.Compiler.DiagnosticsLogger.StackGuard", "1.0.0") + let meter = FSharp.Compiler.Diagnostics.Metrics.Meter - let jumpCounter = meter.CreateCounter("stackguard-jumps", description = "Tracks the number of times the stack guard has jumped to a new thread") + let jumpCounter = + meter.CreateCounter( + "stackguard-jumps", + description = "Tracks the number of times the stack guard has jumped to a new thread" + ) - let jumps = ConcurrentDictionary() + let countJump memberName = + let tags = + let mutable tags = TagList() + tags.Add("caller", memberName) + tags + + jumpCounter.Add(1L, &tags) + + // Used by the self-listener. + let jumpsByFunctionName = ConcurrentDictionary() let Listen () = let listener = new MeterListener() @@ -886,15 +898,31 @@ module StackGuardMetrics = listener.SetMeasurementEventCallback(fun _ v tags _ -> let memberName = nonNull tags[0].Value :?> string - let counter = jumps.GetOrAdd(memberName, fun _ -> ref 0L) + let counter = jumpsByFunctionName.GetOrAdd(memberName, fun _ -> ref 0L) Interlocked.Add(counter, v) |> ignore) listener.Start() listener :> IDisposable let StatsToString () = - let entries = jumps |> Seq.map (fun kvp -> $"{kvp.Key}: {kvp.Value.Value}") |> String.concat ", " - $"StackGuard jumps: {entries} \n" + let entries = + jumpsByFunctionName + |> Seq.map (fun kvp -> $"{kvp.Key}: {kvp.Value.Value}") + |> String.concat ", " + + if entries.Length > 0 then + $"StackGuard jumps: {entries} \n" + else + "" + + let CaptureStatsAndWriteToConsole () = + let listener = Listen() + + { new IDisposable with + member _.Dispose() = + listener.Dispose() + StatsToString() |> printfn "%s" + } /// Guard against depth of expression nesting, by moving to new stack when a maximum depth is reached type StackGuard(maxDepth: int, name: string) = @@ -902,24 +930,14 @@ type StackGuard(maxDepth: int, name: string) = let mutable depth = 1 [] - member _.Guard - ( - f, - [] memberName: string - ) = + member _.Guard(f, [] memberName: string) = depth <- depth + 1 try if depth % maxDepth = 0 then - let tags = - let mutable tags = TagList() - tags.Add("caller", memberName) - tags - - - StackGuardMetrics.jumpCounter.Add(1L, &tags) + StackGuardMetrics.countJump memberName async { do! Async.SwitchToNewThread() diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fsi b/src/Compiler/Facilities/DiagnosticsLogger.fsi index b2033968f84..f81b24cec45 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fsi +++ b/src/Compiler/Facilities/DiagnosticsLogger.fsi @@ -462,15 +462,13 @@ val languageFeatureNotSupportedInLibraryError: langFeature: LanguageFeature -> m module StackGuardMetrics = val Listen: unit -> IDisposable val StatsToString: unit -> string + val CaptureStatsAndWriteToConsole: unit -> IDisposable type StackGuard = new: maxDepth: int * name: string -> StackGuard /// Execute the new function, on a new thread if necessary - member Guard: - f: (unit -> 'T) * - [] memberName: string -> - 'T + member Guard: f: (unit -> 'T) * [] memberName: string -> 'T member GuardCancellable: Internal.Utilities.Library.Cancellable<'T> -> Internal.Utilities.Library.Cancellable<'T> diff --git a/src/Compiler/Utilities/Activity.fs b/src/Compiler/Utilities/Activity.fs index 818d22e6f81..1712d89d6d6 100644 --- a/src/Compiler/Utilities/Activity.fs +++ b/src/Compiler/Utilities/Activity.fs @@ -18,6 +18,9 @@ module ActivityNames = let AllRelevantNames = [| FscSourceName; ProfiledSourceName |] +module Metrics = + let Meter = new Metrics.Meter(ActivityNames.FscSourceName, "1.0.0") + [] module internal Activity = diff --git a/src/Compiler/Utilities/Activity.fsi b/src/Compiler/Utilities/Activity.fsi index 83d4b2772ec..b6381a9a47d 100644 --- a/src/Compiler/Utilities/Activity.fsi +++ b/src/Compiler/Utilities/Activity.fsi @@ -2,7 +2,7 @@ namespace FSharp.Compiler.Diagnostics open System -open Internal.Utilities.Library +open System.Diagnostics.Metrics /// For activities following the dotnet distributed tracing concept /// https://learn.microsoft.com/dotnet/core/diagnostics/distributed-tracing-concepts?source=recommendations @@ -16,6 +16,9 @@ module ActivityNames = val AllRelevantNames: string[] +module Metrics = + val Meter: Meter + /// For activities following the dotnet distributed tracing concept /// https://learn.microsoft.com/dotnet/core/diagnostics/distributed-tracing-concepts?source=recommendations [] diff --git a/src/Compiler/Utilities/Caches.fs b/src/Compiler/Utilities/Caches.fs index aedc7f7b8e4..21687ea2d89 100644 --- a/src/Compiler/Utilities/Caches.fs +++ b/src/Compiler/Utilities/Caches.fs @@ -10,7 +10,7 @@ open System.Diagnostics.Metrics open System.IO module CacheMetrics = - let Meter = new Meter("FSharp.Compiler.Cache") + let Meter = FSharp.Compiler.Diagnostics.Metrics.Meter let adds = Meter.CreateCounter("adds", "count") let updates = Meter.CreateCounter("updates", "count") let hits = Meter.CreateCounter("hits", "count") diff --git a/tests/FSharp.Test.Utilities/XunitHelpers.fs b/tests/FSharp.Test.Utilities/XunitHelpers.fs index 5365a243946..7e907492e65 100644 --- a/tests/FSharp.Test.Utilities/XunitHelpers.fs +++ b/tests/FSharp.Test.Utilities/XunitHelpers.fs @@ -175,7 +175,7 @@ type OpenTelemetryExport(testRunName, enable) = // Configure OpenTelemetry metrics export. Metrics can be viewed in Prometheus or other compatible tools. OpenTelemetry.Sdk.CreateMeterProviderBuilder() - .AddMeter(CacheMetrics.Meter.Name) + .AddMeter(ActivityNames.FscSourceName) .AddMeter("System.Runtime") .ConfigureResource(fun r -> r.AddService(testRunName) |> ignore) .AddOtlpExporter(fun e m -> From 0248efb8492adc48d4f00834631bd41821c3dbb5 Mon Sep 17 00:00:00 2001 From: Jakub Majocha <1760221+majocha@users.noreply.github.com> Date: Sat, 27 Sep 2025 11:15:01 +0200 Subject: [PATCH 04/57] use known tag name --- src/Compiler/Facilities/DiagnosticsLogger.fs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fs b/src/Compiler/Facilities/DiagnosticsLogger.fs index 945b0752a1b..2680b20c0f6 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fs +++ b/src/Compiler/Facilities/DiagnosticsLogger.fs @@ -870,7 +870,6 @@ let internal languageFeatureNotSupportedInLibraryError (langFeature: LanguageFea error (Error(FSComp.SR.chkFeatureNotSupportedInLibrary (featureStr, suggestedVersionStr), m)) module StackGuardMetrics = - open System.Diagnostics.Metrics let meter = FSharp.Compiler.Diagnostics.Metrics.Meter @@ -883,7 +882,7 @@ module StackGuardMetrics = let countJump memberName = let tags = let mutable tags = TagList() - tags.Add("caller", memberName) + tags.Add(Activity.Tags.callerMemberName, memberName) tags jumpCounter.Add(1L, &tags) @@ -892,7 +891,7 @@ module StackGuardMetrics = let jumpsByFunctionName = ConcurrentDictionary() let Listen () = - let listener = new MeterListener() + let listener = new Metrics.MeterListener() listener.EnableMeasurementEvents jumpCounter From 9488b2fd55b79759b41145139231dd470025a002 Mon Sep 17 00:00:00 2001 From: Jakub Majocha <1760221+majocha@users.noreply.github.com> Date: Sat, 27 Sep 2025 12:00:42 +0200 Subject: [PATCH 05/57] internal --- src/Compiler/Facilities/DiagnosticsLogger.fsi | 2 +- src/Compiler/Utilities/Activity.fsi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fsi b/src/Compiler/Facilities/DiagnosticsLogger.fsi index f81b24cec45..16dfdf64882 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fsi +++ b/src/Compiler/Facilities/DiagnosticsLogger.fsi @@ -459,7 +459,7 @@ val tryLanguageFeatureErrorOption: val languageFeatureNotSupportedInLibraryError: langFeature: LanguageFeature -> m: range -> 'T -module StackGuardMetrics = +module internal StackGuardMetrics = val Listen: unit -> IDisposable val StatsToString: unit -> string val CaptureStatsAndWriteToConsole: unit -> IDisposable diff --git a/src/Compiler/Utilities/Activity.fsi b/src/Compiler/Utilities/Activity.fsi index b6381a9a47d..50d134d559e 100644 --- a/src/Compiler/Utilities/Activity.fsi +++ b/src/Compiler/Utilities/Activity.fsi @@ -16,7 +16,7 @@ module ActivityNames = val AllRelevantNames: string[] -module Metrics = +module internal Metrics = val Meter: Meter /// For activities following the dotnet distributed tracing concept From ad63ff912a70f27ad0e409f867f47304233ff667 Mon Sep 17 00:00:00 2001 From: Jakub Majocha <1760221+majocha@users.noreply.github.com> Date: Mon, 29 Sep 2025 15:01:26 +0200 Subject: [PATCH 06/57] extract table printing to module --- src/Compiler/Facilities/DiagnosticsLogger.fs | 29 +++++++--- src/Compiler/Facilities/DiagnosticsLogger.fsi | 7 ++- src/Compiler/Utilities/Activity.fs | 45 +++++++++++++++ src/Compiler/Utilities/Activity.fsi | 2 + src/Compiler/Utilities/Caches.fs | 55 ++++++------------- 5 files changed, 91 insertions(+), 47 deletions(-) diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fs b/src/Compiler/Facilities/DiagnosticsLogger.fs index 2680b20c0f6..338c2ec48fd 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fs +++ b/src/Compiler/Facilities/DiagnosticsLogger.fs @@ -904,15 +904,18 @@ module StackGuardMetrics = listener :> IDisposable let StatsToString () = - let entries = - jumpsByFunctionName - |> Seq.map (fun kvp -> $"{kvp.Key}: {kvp.Value.Value}") - |> String.concat ", " + let headers = [ "Caller"; "Jumps" ] - if entries.Length > 0 then - $"StackGuard jumps: {entries} \n" - else + let data = + [ + for kvp in jumpsByFunctionName do + [ kvp.Key; string kvp.Value.Value ] + ] + + if List.isEmpty data then "" + else + $"StackGuard jumps:\n{Metrics.printTable headers data}" let CaptureStatsAndWriteToConsole () = let listener = Listen() @@ -929,14 +932,22 @@ type StackGuard(maxDepth: int, name: string) = let mutable depth = 1 [] - member _.Guard(f, [] memberName: string) = + member _.Guard + ( + f, + [] memberName: string, + [] path: string, + [] line: int + ) = depth <- depth + 1 try if depth % maxDepth = 0 then - StackGuardMetrics.countJump memberName + let fileName = System.IO.Path.GetFileName(path) + + StackGuardMetrics.countJump $"{memberName} ({fileName}:{line})" async { do! Async.SwitchToNewThread() diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fsi b/src/Compiler/Facilities/DiagnosticsLogger.fsi index 16dfdf64882..7bef3d3a15a 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fsi +++ b/src/Compiler/Facilities/DiagnosticsLogger.fsi @@ -468,7 +468,12 @@ type StackGuard = new: maxDepth: int * name: string -> StackGuard /// Execute the new function, on a new thread if necessary - member Guard: f: (unit -> 'T) * [] memberName: string -> 'T + member Guard: + f: (unit -> 'T) * + [] memberName: string * + [] path: string * + [] line: int -> + 'T member GuardCancellable: Internal.Utilities.Library.Cancellable<'T> -> Internal.Utilities.Library.Cancellable<'T> diff --git a/src/Compiler/Utilities/Activity.fs b/src/Compiler/Utilities/Activity.fs index 1712d89d6d6..c46ca661995 100644 --- a/src/Compiler/Utilities/Activity.fs +++ b/src/Compiler/Utilities/Activity.fs @@ -21,6 +21,51 @@ module ActivityNames = module Metrics = let Meter = new Metrics.Meter(ActivityNames.FscSourceName, "1.0.0") + let formatTable headers rows = + let columnWidths = + headers :: rows + |> List.transpose + |> List.map (List.map String.length >> List.max) + + let center width (cell: string) = + String.replicate ((width - cell.Length) / 2) " " + cell |> _.PadRight(width) + + let headers = (columnWidths, headers) ||> List.map2 center + + let printRow (row: string list) = + row + |> List.mapi (fun i (cell: string) -> + if i = 0 then + cell.PadRight(columnWidths[i]) + else + cell.PadLeft(columnWidths[i])) + |> String.concat " | " + |> sprintf "| %s |" + + let headerRow = printRow headers + + let divider = headerRow |> String.map (fun c -> if c = '|' then c else '-') + let hl = String.replicate divider.Length "-" + + use sw = new StringWriter() + + sw.WriteLine hl + sw.WriteLine headerRow + sw.WriteLine divider + + for row in rows do + sw.WriteLine(printRow row) + + sw.WriteLine hl + + string sw + + let printTable headers rows = + try + formatTable headers rows + with exn -> + $"Error formatting table: {exn}" + [] module internal Activity = diff --git a/src/Compiler/Utilities/Activity.fsi b/src/Compiler/Utilities/Activity.fsi index 50d134d559e..8ff0a4c3494 100644 --- a/src/Compiler/Utilities/Activity.fsi +++ b/src/Compiler/Utilities/Activity.fsi @@ -19,6 +19,8 @@ module ActivityNames = module internal Metrics = val Meter: Meter + val printTable: headers: string list -> rows: string list list -> string + /// For activities following the dotnet distributed tracing concept /// https://learn.microsoft.com/dotnet/core/diagnostics/distributed-tracing-concepts?source=recommendations [] diff --git a/src/Compiler/Utilities/Caches.fs b/src/Compiler/Utilities/Caches.fs index 21687ea2d89..cae35a93015 100644 --- a/src/Compiler/Utilities/Caches.fs +++ b/src/Compiler/Utilities/Caches.fs @@ -96,43 +96,24 @@ module CacheMetrics = listener :> IDisposable let StatsToString () = - use sw = new StringWriter() - - let nameColumnWidth = - [ yield! statsByName.Keys; "Cache name" ] |> Seq.map String.length |> Seq.max - - let columns = allCounters |> List.map _.Name - let columnWidths = columns |> List.map String.length |> List.map (max 8) - - let header = - "| " - + String.concat - " | " - [ - "Cache name".PadRight nameColumnWidth - "hit-ratio" - for w, c in (columnWidths, columns) ||> List.zip do - $"{c.PadLeft w}" - ] - + " |" - - sw.WriteLine(String('-', header.Length)) - sw.WriteLine(header) - sw.WriteLine(header |> String.map (fun c -> if c = '|' then '|' else '-')) - - for kv in statsByName do - let name = kv.Key - let stats = kv.Value - let totals = stats.GetTotals() - sw.Write $"| {name.PadLeft nameColumnWidth} | {stats.Ratio, 9:P2} |" - - for w, c in (columnWidths, columns) ||> List.zip do - sw.Write $" {totals[c].ToString().PadLeft(w)} |" - - sw.WriteLine() - - sw.WriteLine(String('-', header.Length)) - string sw + let headers = [ "Cache name"; "hit-ratio" ] @ (allCounters |> List.map _.Name) + + let rows = + [ + for kv in statsByName do + let name = kv.Key + let stats = kv.Value + let totals = stats.GetTotals() + + [ + yield name + yield $"{stats.Ratio:P2}" + for c in allCounters do + yield $"{totals[c.Name]}" + ] + ] + + FSharp.Compiler.Diagnostics.Metrics.printTable headers rows let CaptureStatsAndWriteToConsole () = let listener = ListenToAll() From aee78270966b5893fef5c743ea4f56732cc855dd Mon Sep 17 00:00:00 2001 From: Jakub Majocha <1760221+majocha@users.noreply.github.com> Date: Mon, 29 Sep 2025 15:03:01 +0200 Subject: [PATCH 07/57] remove meter version --- src/Compiler/Utilities/Activity.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compiler/Utilities/Activity.fs b/src/Compiler/Utilities/Activity.fs index c46ca661995..1995e94ad6b 100644 --- a/src/Compiler/Utilities/Activity.fs +++ b/src/Compiler/Utilities/Activity.fs @@ -19,7 +19,7 @@ module ActivityNames = let AllRelevantNames = [| FscSourceName; ProfiledSourceName |] module Metrics = - let Meter = new Metrics.Meter(ActivityNames.FscSourceName, "1.0.0") + let Meter = new Metrics.Meter(ActivityNames.FscSourceName) let formatTable headers rows = let columnWidths = From c0be66bfd3e4be399543b1d6f72da42174134241 Mon Sep 17 00:00:00 2001 From: Jakub Majocha <1760221+majocha@users.noreply.github.com> Date: Mon, 29 Sep 2025 22:09:58 +0200 Subject: [PATCH 08/57] separate column for source location --- src/Compiler/Facilities/DiagnosticsLogger.fs | 15 +++++++++------ .../src/FSharp.Editor/Common/DebugHelpers.fs | 2 +- .../LanguageService/LanguageService.fs | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Compiler/Facilities/DiagnosticsLogger.fs b/src/Compiler/Facilities/DiagnosticsLogger.fs index 338c2ec48fd..2a087283468 100644 --- a/src/Compiler/Facilities/DiagnosticsLogger.fs +++ b/src/Compiler/Facilities/DiagnosticsLogger.fs @@ -879,16 +879,17 @@ module StackGuardMetrics = description = "Tracks the number of times the stack guard has jumped to a new thread" ) - let countJump memberName = + let countJump memberName location = let tags = let mutable tags = TagList() tags.Add(Activity.Tags.callerMemberName, memberName) + tags.Add("source", location) tags jumpCounter.Add(1L, &tags) // Used by the self-listener. - let jumpsByFunctionName = ConcurrentDictionary() + let jumpsByFunctionName = ConcurrentDictionary<_, int64 ref>() let Listen () = let listener = new Metrics.MeterListener() @@ -897,19 +898,21 @@ module StackGuardMetrics = listener.SetMeasurementEventCallback(fun _ v tags _ -> let memberName = nonNull tags[0].Value :?> string - let counter = jumpsByFunctionName.GetOrAdd(memberName, fun _ -> ref 0L) + let source = nonNull tags[1].Value :?> string + let counter = jumpsByFunctionName.GetOrAdd((memberName, source), fun _ -> ref 0L) Interlocked.Add(counter, v) |> ignore) listener.Start() listener :> IDisposable let StatsToString () = - let headers = [ "Caller"; "Jumps" ] + let headers = [ "caller"; "source"; "jumps" ] let data = [ for kvp in jumpsByFunctionName do - [ kvp.Key; string kvp.Value.Value ] + let (memberName, source) = kvp.Key + [ memberName; source; string kvp.Value.Value ] ] if List.isEmpty data then @@ -947,7 +950,7 @@ type StackGuard(maxDepth: int, name: string) = let fileName = System.IO.Path.GetFileName(path) - StackGuardMetrics.countJump $"{memberName} ({fileName}:{line})" + StackGuardMetrics.countJump memberName $"{fileName}:{line}" async { do! Async.SwitchToNewThread() diff --git a/vsintegration/src/FSharp.Editor/Common/DebugHelpers.fs b/vsintegration/src/FSharp.Editor/Common/DebugHelpers.fs index b06461982c5..fa8303b7e60 100644 --- a/vsintegration/src/FSharp.Editor/Common/DebugHelpers.fs +++ b/vsintegration/src/FSharp.Editor/Common/DebugHelpers.fs @@ -120,7 +120,7 @@ module FSharpServiceTelemetry = ActivitySource.AddActivityListener(listener) - let periodicallyDisplayCacheStats = + let periodicallyDisplayMetrics = cancellableTask { use _ = CacheMetrics.ListenToAll() use _ = FSharp.Compiler.DiagnosticsLogger.StackGuardMetrics.Listen() diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs index 92b6979883a..6c84d3fb810 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs @@ -417,7 +417,7 @@ type internal FSharpPackage() as this = false, fun _ _ -> task { - DebugHelpers.FSharpServiceTelemetry.periodicallyDisplayCacheStats + DebugHelpers.FSharpServiceTelemetry.periodicallyDisplayMetrics |> CancellableTask.start this.DisposalToken |> ignore } From 4f0623a60b96a61962a8f05de94cbdf94edfb11e Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 29 Sep 2025 16:15:03 +0100 Subject: [PATCH 09/57] Failing test --- tests/FSharp.Compiler.Service.Tests/EditorTests.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/FSharp.Compiler.Service.Tests/EditorTests.fs b/tests/FSharp.Compiler.Service.Tests/EditorTests.fs index 6df9a1dc4a9..a98a100c8cb 100644 --- a/tests/FSharp.Compiler.Service.Tests/EditorTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/EditorTests.fs @@ -2113,7 +2113,7 @@ let rUpdate = { r1 with } hasRecordField "Field1" declarations hasRecordField "Field2" declarations -[] +[] let ``Record fields are completed in update record with partial field name`` () = let parseResults, checkResults = getParseAndCheckResults """ From f41ef6d5774e1bc6ba1ea40aaa0324fe5e8abdcf Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 29 Sep 2025 16:51:09 +0100 Subject: [PATCH 10/57] Fix --- src/Compiler/Service/ServiceParseTreeWalk.fs | 12 +++++- .../EditorTests.fs | 38 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/Compiler/Service/ServiceParseTreeWalk.fs b/src/Compiler/Service/ServiceParseTreeWalk.fs index 133df625a8a..cb4915902a8 100644 --- a/src/Compiler/Service/ServiceParseTreeWalk.fs +++ b/src/Compiler/Service/ServiceParseTreeWalk.fs @@ -528,7 +528,17 @@ module SyntaxTraversal = for SynExprRecordField(fieldName = (field, _); expr = e; blockSeparator = sepOpt) in fields do yield dive (path, copyOpt, Some field) field.Range (fun r -> - if rangeContainsPos field.Range pos then + // Treat the caret placed right after the field name (before '=' or a value) as "inside" the field, + // but only if the field does not yet have a value. + // + // Examples (the '$' marks the caret): + // { r with Field1$ } + // { r with + // Field1$ + // } + let isCaretAfterFieldNameWithoutValue = (e.IsNone && posGeq pos field.Range.End) + + if rangeContainsPos field.Range pos || isCaretAfterFieldNameWithoutValue then visitor.VisitRecordField r else None) diff --git a/tests/FSharp.Compiler.Service.Tests/EditorTests.fs b/tests/FSharp.Compiler.Service.Tests/EditorTests.fs index a98a100c8cb..b94e777598e 100644 --- a/tests/FSharp.Compiler.Service.Tests/EditorTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/EditorTests.fs @@ -2144,3 +2144,41 @@ let rUpdate = { r1 with Fi } hasRecordField "Field1" declarations hasRecordField "Field2" declarations + +[] +let ``Multiline record fields are completed in update record with partial field name`` () = + let parseResults, checkResults = + getParseAndCheckResults """ +module Module + +type R1 = + { Field1: int; Field2: int } + +let r1 = { Field1 = 1; Field2 = 2 } + +let rUpdate2 = + { r1 with + Fi + } +""" + + let declarations = + checkResults.GetDeclarationListSymbols( + Some parseResults, + 10, + "let rUpdate2 = + { r1 with + Fi + }", + { + EndColumn = 14 + LastDotPos = None + PartialIdent = "Fi" + QualifyingIdents = [] + }, + fun _ -> List.empty + ) + |> List.concat + + hasRecordField "Field1" declarations + hasRecordField "Field2" declarations From 5f0ff48664c0cd63711707d5cb57b54a29845ad5 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 29 Sep 2025 20:28:43 +0100 Subject: [PATCH 11/57] Use code completion context --- src/Compiler/Service/ServiceParseTreeWalk.fs | 2 +- .../EditorTests.fs | 86 +++++++++---------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/Compiler/Service/ServiceParseTreeWalk.fs b/src/Compiler/Service/ServiceParseTreeWalk.fs index cb4915902a8..f280df1b237 100644 --- a/src/Compiler/Service/ServiceParseTreeWalk.fs +++ b/src/Compiler/Service/ServiceParseTreeWalk.fs @@ -536,7 +536,7 @@ module SyntaxTraversal = // { r with // Field1$ // } - let isCaretAfterFieldNameWithoutValue = (e.IsNone && posGeq pos field.Range.End) + let isCaretAfterFieldNameWithoutValue = (e.IsNone && posEq pos field.Range.End) if rangeContainsPos field.Range pos || isCaretAfterFieldNameWithoutValue then visitor.VisitRecordField r diff --git a/tests/FSharp.Compiler.Service.Tests/EditorTests.fs b/tests/FSharp.Compiler.Service.Tests/EditorTests.fs index b94e777598e..6ce135326fc 100644 --- a/tests/FSharp.Compiler.Service.Tests/EditorTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/EditorTests.fs @@ -1937,6 +1937,15 @@ let hasRecordType (recordTypeName: string) (symbolUses: FSharpSymbolUse list) = | _ -> false ) |> fun exists -> Assert.True(exists, $"Record type {recordTypeName} not found.") + +let private assertItemsWithNames contains names (completionInfo: DeclarationListInfo) = + let itemNames = completionInfo.Items |> Array.map _.NameInCode |> set + + for name in names do + Assert.True(Set.contains name itemNames = contains) + +let assertHasItemWithNames names (completionInfo: DeclarationListInfo) = + assertItemsWithNames true names completionInfo [] let ``Record fields are completed via type name usage`` () = @@ -2115,8 +2124,7 @@ let rUpdate = { r1 with } [] let ``Record fields are completed in update record with partial field name`` () = - let parseResults, checkResults = - getParseAndCheckResults """ + let info = Checker.getCompletionInfo """ module Module type R1 = @@ -2124,31 +2132,14 @@ type R1 = let r1 = { Field1 = 1; Field2 = 2 } -let rUpdate = { r1 with Fi } +let rUpdate = { r1 with Fi{caret} } """ - let declarations = - checkResults.GetDeclarationListSymbols( - Some parseResults, - 9, - "let rUpdate = { r1 with Fi }", - { - EndColumn = 26 - LastDotPos = None - PartialIdent = "Fi" - QualifyingIdents = [] - }, - fun _ -> List.empty - ) - |> List.concat - - hasRecordField "Field1" declarations - hasRecordField "Field2" declarations + assertHasItemWithNames ["Field1"; "Field2"] info [] let ``Multiline record fields are completed in update record with partial field name`` () = - let parseResults, checkResults = - getParseAndCheckResults """ + let info = Checker.getCompletionInfo """ module Module type R1 = @@ -2156,29 +2147,38 @@ type R1 = let r1 = { Field1 = 1; Field2 = 2 } -let rUpdate2 = +let rUpdate = { r1 with - Fi + Fi{caret} } """ - let declarations = - checkResults.GetDeclarationListSymbols( - Some parseResults, - 10, - "let rUpdate2 = - { r1 with - Fi - }", - { - EndColumn = 14 - LastDotPos = None - PartialIdent = "Fi" - QualifyingIdents = [] - }, - fun _ -> List.empty - ) - |> List.concat + assertHasItemWithNames ["Field1"; "Field2"] info + +[] +let ``No record field completion after '=' with missing value in first binding (after =;)`` () = + let info = Checker.getCompletionInfo """ +module M - hasRecordField "Field1" declarations - hasRecordField "Field2" declarations +type X = + val field1: int + val field2: string + +let x = new X() +let _ = { field1 =; {caret} } +""" + assertItemsWithNames false ["field1"; "field2"] info + +[] +let ``No record field completion after '=' with missing value in first binding (after =; f)`` () = + let info = Checker.getCompletionInfo """ +module M + +type X = + val field1: int + val field2: string + +let x = new X() +let _ = { field1 =; f{caret} } +""" + assertItemsWithNames false ["field1"; "field2"] info \ No newline at end of file From f78abe1bf0be3cac495701c0e3e0e43b95201708 Mon Sep 17 00:00:00 2001 From: Edgar Gonzalez Date: Mon, 29 Sep 2025 21:54:47 +0100 Subject: [PATCH 12/57] release notes --- docs/release-notes/.FSharp.Compiler.Service/10.0.100.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes/.FSharp.Compiler.Service/10.0.100.md b/docs/release-notes/.FSharp.Compiler.Service/10.0.100.md index fe1ddaf787d..89afb46101b 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/10.0.100.md +++ b/docs/release-notes/.FSharp.Compiler.Service/10.0.100.md @@ -36,6 +36,7 @@ * Caches: type subsumption cache key perf regression ([Issue #18925](https://github.com/dotnet/fsharp/issues/18925) [PR #18926](https://github.com/dotnet/fsharp/pull/18926)) * Ensure that line directives are applied to source identifiers (issue [#18908](https://github.com/dotnet/fsharp/issues/18908), PR [#18918](https://github.com/dotnet/fsharp/pull/18918)) * Fix expected and actual types in ErrorFromAddingTypeEquation message and extended diagnostic data. ([PR #18915](https://github.com/dotnet/fsharp/pull/18915)) +* Editor: Fix Record fields completion in update record with partial field name. ([PR #18946](https://github.com/dotnet/fsharp/pull/18946)) ### Changed * Use `errorR` instead of `error` in `CheckDeclarations.fs` when possible. ([PR #18645](https://github.com/dotnet/fsharp/pull/18645)) From 9006615f22e1bf09d982e387f22638d9c119e443 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:18:23 +0000 Subject: [PATCH 13/57] [release/dev18.0] Update dependencies from dotnet/arcade (#18943) * Update dependencies from https://github.com/dotnet/arcade build 20250926.2 On relative base path root Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.25426.3 -> To Version 10.0.0-beta.25476.2 * Update dependencies from https://github.com/dotnet/arcade build 20250929.4 On relative base path root Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.25426.3 -> To Version 10.0.0-beta.25479.4 --------- Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 2 +- eng/Version.Details.xml | 4 ++-- eng/common/SetupNugetSources.ps1 | 2 +- eng/common/SetupNugetSources.sh | 2 +- eng/common/core-templates/job/publish-build-assets.yml | 9 ++++++++- eng/common/core-templates/jobs/jobs.yml | 2 ++ eng/common/post-build/nuget-verification.ps1 | 2 +- global.json | 6 +++--- 8 files changed, 19 insertions(+), 10 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index e0f3350befd..9cf05d9b6c2 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -18,7 +18,7 @@ This file should be imported by eng/Versions.props 9.0.0 9.0.0 - 10.0.0-beta.25426.3 + 10.0.0-beta.25479.4 1.0.0-prerelease.25467.1 1.0.0-prerelease.25467.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index acbf83c0f9d..9ff3a6513d5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -44,9 +44,9 @@ - + https://github.com/dotnet/arcade - 5db998e02282e63bc375948a237bcdfef534a5c5 + e6f510cb87812d56ad781d93ff0513cdcccd0eb4 https://dev.azure.com/dnceng/internal/_git/dotnet-optimization diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 792b60b49d4..9445c314325 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -157,7 +157,7 @@ if ($dotnet31Source -ne $null) { AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password } -$dotnetVersions = @('5','6','7','8','9') +$dotnetVersions = @('5','6','7','8','9','10') foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index facb415ca6f..ddf4efc81a4 100755 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -99,7 +99,7 @@ if [ "$?" == "0" ]; then PackageSources+=('dotnet3.1-internal-transport') fi -DotNetVersions=('5' '6' '7' '8' '9') +DotNetVersions=('5' '6' '7' '8' '9' '10') for DotNetVersion in ${DotNetVersions[@]} ; do FeedPrefix="dotnet${DotNetVersion}"; diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 348cd16376f..37dff559fc1 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -40,6 +40,8 @@ parameters: repositoryAlias: self + officialBuildId: '' + jobs: - job: Asset_Registry_Publish @@ -62,6 +64,11 @@ jobs: value: false # unconditional - needed for logs publishing (redactor tool version) - template: /eng/common/core-templates/post-build/common-variables.yml + - name: OfficialBuildId + ${{ if ne(parameters.officialBuildId, '') }}: + value: ${{ parameters.officialBuildId }} + ${{ else }}: + value: $(Build.BuildNumber) pool: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) @@ -124,7 +131,7 @@ jobs: /p:ManifestsPath='$(Build.StagingDirectory)/AssetManifests' /p:IsAssetlessBuild=${{ parameters.isAssetlessBuild }} /p:MaestroApiEndpoint=https://maestro.dot.net - /p:OfficialBuildId=$(Build.BuildNumber) + /p:OfficialBuildId=$(OfficialBuildId) condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index b637cb6e948..01ada747665 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -44,6 +44,7 @@ parameters: artifacts: {} is1ESPipeline: '' repositoryAlias: self + officialBuildId: '' # Internal resources (telemetry, microbuild) can only be accessed from non-public projects, # and some (Microbuild) should only be applied to non-PR cases for internal builds. @@ -116,3 +117,4 @@ jobs: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} repositoryAlias: ${{ parameters.repositoryAlias }} + officialBuildId: ${{ parameters.officialBuildId }} diff --git a/eng/common/post-build/nuget-verification.ps1 b/eng/common/post-build/nuget-verification.ps1 index a365194a938..ac5c69ffcac 100644 --- a/eng/common/post-build/nuget-verification.ps1 +++ b/eng/common/post-build/nuget-verification.ps1 @@ -30,7 +30,7 @@ [CmdletBinding(PositionalBinding = $false)] param( [string]$NuGetExePath, - [string]$PackageSource = "https://api.nuget.org/v3/index.json", + [string]$PackageSource = "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json", [string]$DownloadPath, [Parameter(ValueFromRemainingArguments = $true)] [string[]]$args diff --git a/global.json b/global.json index 9904c9b734c..2271576ea50 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "10.0.100-rc.1.25411.109", + "version": "10.0.100-rc.1.25451.107", "allowPrerelease": true, "paths": [ ".dotnet", @@ -9,7 +9,7 @@ "errorMessage": "The .NET SDK could not be found, please run ./eng/common/dotnet.sh." }, "tools": { - "dotnet": "10.0.100-rc.1.25411.109", + "dotnet": "10.0.100-rc.1.25451.107", "vs": { "version": "17.8", "components": [ @@ -22,7 +22,7 @@ "perl": "5.38.2.2" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25426.3", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25479.4", "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23255.2" } } From e85fd51f9c4dc8cd222602aaea6dde3982f71ef3 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 1 Oct 2025 16:54:19 +0200 Subject: [PATCH 14/57] Update branch names for F# and VS insertion (#18944) --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 403f7373f1f..09783884c3f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -29,11 +29,11 @@ variables: # The future "product" gets developed in main, so should be main in main. # When servicing branch gets created, this should maintain the mapping between F# servicing and VS servicing branches - name: FSharpReleaseBranchName - value: main + value: release/dev18.0 # VS Insertion branch name (NOT the same as F# branch) # ( for main we insert into VS main and for all *previous* releases we insert into corresponding VS release), - name: VSInsertionTargetBranchName - value: main + value: rel/d18.0 - name: _TeamName value: FSharp - name: TeamName From 2cb9ee0a5d63b52ad7bfbd9364b90b991a26fd72 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 17:16:39 +0200 Subject: [PATCH 15/57] Double the iterations in StackOverflowRepro - see if it fails MacOS (#18952) --- .../EmittedIL/TryCatch/StackOverflowRepro.fs | 2 +- .../EmittedIL/TryCatch/TryCatch.fs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TryCatch/StackOverflowRepro.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TryCatch/StackOverflowRepro.fs index 310a6615aba..22f501c4f85 100644 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TryCatch/StackOverflowRepro.fs +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TryCatch/StackOverflowRepro.fs @@ -31,4 +31,4 @@ let main (args:string[]) = with | ex -> printf "%s" (ex.GetType().ToString()) - 0 \ No newline at end of file + 0 diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TryCatch/TryCatch.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TryCatch/TryCatch.fs index bc3efb3cae2..b13739fa603 100644 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TryCatch/TryCatch.fs +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TryCatch/TryCatch.fs @@ -63,8 +63,9 @@ module TryCatch = let fsharpCoreFile = typeof>.Assembly.Location File.Copy(fsharpCoreFile, Path.Combine(Path.GetDirectoryName(dllFile), Path.GetFileName(fsharpCoreFile)), true) let result = CompilerAssert.ExecuteAndReturnResult (dllFile, isFsx=false, deps = s.Dependencies, newProcess=true) + printfn "%A" result - Assert.True(result.StdErr.Contains "stack overflow" || result.StdErr.Contains "StackOverflow") + Assert.True(result.StdErr.Contains "stack overflow" || result.StdErr.Contains "StackOverflow", result.StdErr) | _ -> failwith (sprintf "%A" compilationResult) From 10aa648f174bf16dc92444810566a87ff67cf241 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:56:40 +0200 Subject: [PATCH 16/57] [release/dev18.0] Update dependencies from dotnet/arcade (#18972) * Update dependencies from https://github.com/dotnet/arcade build 20251007.1 On relative base path root Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.25479.4 -> To Version 10.0.0-beta.25507.1 * Update dependencies from https://github.com/dotnet/arcade build 20251008.4 On relative base path root Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.25479.4 -> To Version 10.0.0-beta.25508.4 --------- Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 2 +- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 9cf05d9b6c2..a258cc872c1 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -18,7 +18,7 @@ This file should be imported by eng/Versions.props 9.0.0 9.0.0 - 10.0.0-beta.25479.4 + 10.0.0-beta.25508.4 1.0.0-prerelease.25467.1 1.0.0-prerelease.25467.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9ff3a6513d5..bfeaa775309 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -44,9 +44,9 @@ - + https://github.com/dotnet/arcade - e6f510cb87812d56ad781d93ff0513cdcccd0eb4 + 7ff6478d902606d65aa33cb8cedc2730e1843fe1 https://dev.azure.com/dnceng/internal/_git/dotnet-optimization diff --git a/global.json b/global.json index 2271576ea50..4e1e45d9fbd 100644 --- a/global.json +++ b/global.json @@ -22,7 +22,7 @@ "perl": "5.38.2.2" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25479.4", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25508.4", "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23255.2" } } From 358b2db7e11f462de6a673d76290592056ea453a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 10 Oct 2025 10:41:59 +0200 Subject: [PATCH 17/57] Update dependencies from https://github.com/dotnet/arcade build 20251009.2 (#18980) On relative base path root Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.25508.4 -> To Version 10.0.0-beta.25509.2 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 2 +- eng/Version.Details.xml | 4 +- eng/common/SetupNugetSources.ps1 | 71 +++++++------ eng/common/SetupNugetSources.sh | 175 ++++++++++++++++++------------- global.json | 2 +- 5 files changed, 145 insertions(+), 109 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index a258cc872c1..5c1f7c4f771 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -18,7 +18,7 @@ This file should be imported by eng/Versions.props 9.0.0 9.0.0 - 10.0.0-beta.25508.4 + 10.0.0-beta.25509.2 1.0.0-prerelease.25467.1 1.0.0-prerelease.25467.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index bfeaa775309..fd474d3c19e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -44,9 +44,9 @@ - + https://github.com/dotnet/arcade - 7ff6478d902606d65aa33cb8cedc2730e1843fe1 + 32a401ae573e0b2613c0ec9ce5bb0052d7b79147 https://dev.azure.com/dnceng/internal/_git/dotnet-optimization diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 9445c314325..fc8d618014e 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -7,7 +7,7 @@ # See example call for this script below. # # - task: PowerShell@2 -# displayName: Setup Private Feeds Credentials +# displayName: Setup internal Feeds Credentials # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: # filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 @@ -34,19 +34,28 @@ Set-StrictMode -Version 2.0 . $PSScriptRoot\tools.ps1 +# Adds or enables the package source with the given name +function AddOrEnablePackageSource($sources, $disabledPackageSources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { + if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource -DisabledPackageSources $disabledPackageSources -Creds $creds -PackageSourceName $SourceName)) { + AddPackageSource -Sources $sources -SourceName $SourceName -SourceEndPoint $SourceEndPoint -Creds $creds -Username $userName -pwd $Password + } +} + # Add source entry to PackageSources function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']") if ($packageSource -eq $null) { + Write-Host "Adding package source $SourceName" + $packageSource = $doc.CreateElement("add") $packageSource.SetAttribute("key", $SourceName) $packageSource.SetAttribute("value", $SourceEndPoint) $sources.AppendChild($packageSource) | Out-Null } else { - Write-Host "Package source $SourceName already present." + Write-Host "Package source $SourceName already present and enabled." } AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd @@ -59,6 +68,8 @@ function AddCredential($creds, $source, $username, $pwd) { return; } + Write-Host "Inserting credential for feed: " $source + # Looks for credential configuration for the given SourceName. Create it if none is found. $sourceElement = $creds.SelectSingleNode($Source) if ($sourceElement -eq $null) @@ -91,24 +102,27 @@ function AddCredential($creds, $source, $username, $pwd) { $passwordElement.SetAttribute("value", $pwd) } -function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) { - $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]") - - Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." - - ForEach ($PackageSource in $maestroPrivateSources) { - Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key - AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd +# Enable all darc-int package sources. +function EnableMaestroInternalPackageSources($DisabledPackageSources, $Creds) { + $maestroInternalSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") + ForEach ($DisabledPackageSource in $maestroInternalSources) { + EnableInternalPackageSource -DisabledPackageSources $DisabledPackageSources -Creds $Creds -PackageSourceName $DisabledPackageSource.key } } -function EnablePrivatePackageSources($DisabledPackageSources) { - $maestroPrivateSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") - ForEach ($DisabledPackageSource in $maestroPrivateSources) { - Write-Host "`tEnsuring private source '$($DisabledPackageSource.key)' is enabled by deleting it from disabledPackageSource" +# Enables an internal package source by name, if found. Returns true if the package source was found and enabled, false otherwise. +function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSourceName) { + $DisabledPackageSource = $DisabledPackageSources.SelectSingleNode("add[@key='$PackageSourceName']") + if ($DisabledPackageSource) { + Write-Host "Enabling internal source '$($DisabledPackageSource.key)'." + # Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries $DisabledPackageSources.RemoveChild($DisabledPackageSource) + + AddCredential -Creds $creds -Source $DisabledPackageSource.Key -Username $userName -pwd $Password + return $true } + return $false } if (!(Test-Path $ConfigFile -PathType Leaf)) { @@ -121,15 +135,17 @@ $doc = New-Object System.Xml.XmlDocument $filename = (Get-Item $ConfigFile).FullName $doc.Load($filename) -# Get reference to or create one if none exist already +# Get reference to - fail if none exist $sources = $doc.DocumentElement.SelectSingleNode("packageSources") if ($sources -eq $null) { - $sources = $doc.CreateElement("packageSources") - $doc.DocumentElement.AppendChild($sources) | Out-Null + Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 } $creds = $null +$feedSuffix = "v3/index.json" if ($Password) { + $feedSuffix = "v2" # Looks for a node. Create it if none is found. $creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") if ($creds -eq $null) { @@ -138,33 +154,22 @@ if ($Password) { } } +$userName = "dn-bot" + # Check for disabledPackageSources; we'll enable any darc-int ones we find there $disabledSources = $doc.DocumentElement.SelectSingleNode("disabledPackageSources") if ($disabledSources -ne $null) { Write-Host "Checking for any darc-int disabled package sources in the disabledPackageSources node" - EnablePrivatePackageSources -DisabledPackageSources $disabledSources -} - -$userName = "dn-bot" - -# Insert credential nodes for Maestro's private feeds -InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password - -# 3.1 uses a different feed url format so it's handled differently here -$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") -if ($dotnet31Source -ne $null) { - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password + EnableMaestroInternalPackageSources -DisabledPackageSources $disabledSources -Creds $creds } - $dotnetVersions = @('5','6','7','8','9','10') foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']") if ($dotnetSource -ne $null) { - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password } } diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index ddf4efc81a4..dd2564aef01 100755 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -52,78 +52,126 @@ if [[ `uname -s` == "Darwin" ]]; then TB='' fi -# Ensure there is a ... section. -grep -i "" $ConfigFile -if [ "$?" != "0" ]; then - echo "Adding ... section." - ConfigNodeHeader="" - PackageSourcesTemplate="${TB}${NL}${TB}" +# Enables an internal package source by name, if found. Returns 0 if found and enabled, 1 if not found. +EnableInternalPackageSource() { + local PackageSourceName="$1" + + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return 1 # No disabled sources section + fi + + # Check if this source name is disabled + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Enabling internal source '$PackageSourceName'." + # Remove the disabled entry + local OldDisableValue="" + local NewDisableValue="" + sed -i.bak "s|$OldDisableValue|$NewDisableValue|" "$ConfigFile" + + # Add the source name to PackageSources for credential handling + PackageSources+=("$PackageSourceName") + return 0 # Found and enabled + fi + + return 1 # Not found in disabled sources +} + +# Add source entry to PackageSources +AddPackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Check if source already exists + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Package source $SourceName already present and enabled." + PackageSources+=("$SourceName") + return + fi + + echo "Adding package source $SourceName" + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" "$ConfigFile" + PackageSources+=("$SourceName") +} + +# Adds or enables the package source with the given name +AddOrEnablePackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Try to enable if disabled, if not found then add new source + EnableInternalPackageSource "$SourceName" + if [ "$?" != "0" ]; then + AddPackageSource "$SourceName" "$SourceEndPoint" + fi +} - sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" $ConfigFile -fi +# Enable all darc-int package sources +EnableMaestroInternalPackageSources() { + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return # No disabled sources section + fi + + # Find all darc-int disabled sources + local DisabledDarcIntSources=() + DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' "$ConfigFile" | tr -d '"') + + for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do + if [[ $DisabledSourceName == darc-int* ]]; then + EnableInternalPackageSource "$DisabledSourceName" + fi + done +} -# Ensure there is a ... section. -grep -i "" $ConfigFile +# Ensure there is a ... section. +grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding ... section." - - PackageSourcesNodeFooter="" - PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile + Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 fi PackageSources=() -# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present -grep -i "... section. + grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + echo "Adding ... section." - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=('dotnet3.1-internal') - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal-transport to the packageSources." PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile fi - PackageSources+=('dotnet3.1-internal-transport') +fi + +# Check for disabledPackageSources; we'll enable any darc-int ones we find there +grep -i "" $ConfigFile > /dev/null +if [ "$?" == "0" ]; then + echo "Checking for any darc-int disabled package sources in the disabledPackageSources node" + EnableMaestroInternalPackageSources fi DotNetVersions=('5' '6' '7' '8' '9' '10') for DotNetVersion in ${DotNetVersions[@]} ; do FeedPrefix="dotnet${DotNetVersion}"; - grep -i " /dev/null if [ "$?" == "0" ]; then - grep -i "" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal") - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding $FeedPrefix-internal-transport to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal-transport") + AddOrEnablePackageSource "$FeedPrefix-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal/nuget/$FeedSuffix" + AddOrEnablePackageSource "$FeedPrefix-internal-transport" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal-transport/nuget/$FeedSuffix" fi done @@ -139,29 +187,12 @@ if [ "$CredToken" ]; then # Check if there is no existing credential for this FeedName grep -i "<$FeedName>" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding credentials for $FeedName." + echo " Inserting credential for feed: $FeedName" PackageSourceCredentialsNodeFooter="" - NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}" + NewCredential="${TB}${TB}<$FeedName>${NL}${TB}${NL}${TB}${TB}${NL}${TB}${TB}" sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile fi done fi - -# Re-enable any entries in disabledPackageSources where the feed name contains darc-int -grep -i "" $ConfigFile -if [ "$?" == "0" ]; then - DisabledDarcIntSources=() - echo "Re-enabling any disabled \"darc-int\" package sources in $ConfigFile" - DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' $ConfigFile | tr -d '"') - for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do - if [[ $DisabledSourceName == darc-int* ]] - then - OldDisableValue="" - NewDisableValue="" - sed -i.bak "s|$OldDisableValue|$NewDisableValue|" $ConfigFile - echo "Neutralized disablePackageSources entry for '$DisabledSourceName'" - fi - done -fi diff --git a/global.json b/global.json index 4e1e45d9fbd..dc3db6144d7 100644 --- a/global.json +++ b/global.json @@ -22,7 +22,7 @@ "perl": "5.38.2.2" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25508.4", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25509.2", "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23255.2" } } From e62989c2a4159ff195f7e6ff7f689052eba26e76 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 10:30:04 +0200 Subject: [PATCH 18/57] [release/dev18.0] Update dependencies from dotnet/arcade (#18988) * Update dependencies from https://github.com/dotnet/arcade build 20251010.1 On relative base path root Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.25509.2 -> To Version 10.0.0-beta.25510.1 * Update dependencies from https://github.com/dotnet/arcade build 20251013.2 On relative base path root Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.25509.2 -> To Version 10.0.0-beta.25513.2 --------- Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 2 +- eng/Version.Details.xml | 4 ++-- eng/common/SetupNugetSources.sh | 6 ++---- global.json | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 5c1f7c4f771..2c5ef89f26d 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -18,7 +18,7 @@ This file should be imported by eng/Versions.props 9.0.0 9.0.0 - 10.0.0-beta.25509.2 + 10.0.0-beta.25513.2 1.0.0-prerelease.25467.1 1.0.0-prerelease.25467.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index fd474d3c19e..1c1cb3c0db6 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -44,9 +44,9 @@ - + https://github.com/dotnet/arcade - 32a401ae573e0b2613c0ec9ce5bb0052d7b79147 + e8ca69398033dd1eea35e9667bf857234465de2b https://dev.azure.com/dnceng/internal/_git/dotnet-optimization diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index dd2564aef01..b97cc536379 100755 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -66,10 +66,8 @@ EnableInternalPackageSource() { grep -i " /dev/null if [ "$?" == "0" ]; then echo "Enabling internal source '$PackageSourceName'." - # Remove the disabled entry - local OldDisableValue="" - local NewDisableValue="" - sed -i.bak "s|$OldDisableValue|$NewDisableValue|" "$ConfigFile" + # Remove the disabled entry (including any surrounding comments or whitespace on the same line) + sed -i.bak "//d" "$ConfigFile" # Add the source name to PackageSources for credential handling PackageSources+=("$PackageSourceName") diff --git a/global.json b/global.json index dc3db6144d7..fcfaa76410a 100644 --- a/global.json +++ b/global.json @@ -22,7 +22,7 @@ "perl": "5.38.2.2" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25509.2", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25513.2", "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23255.2" } } From a89c75cd6171ee0b8fa5b37f599c753098c8f343 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Tue, 21 Oct 2025 10:53:00 +0200 Subject: [PATCH 19/57] Create 11.0.0.md Empty file to make backport bot happy --- docs/release-notes/.FSharp.Compiler.Service/11.0.0.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/release-notes/.FSharp.Compiler.Service/11.0.0.md diff --git a/docs/release-notes/.FSharp.Compiler.Service/11.0.0.md b/docs/release-notes/.FSharp.Compiler.Service/11.0.0.md new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/docs/release-notes/.FSharp.Compiler.Service/11.0.0.md @@ -0,0 +1 @@ + From ffe285285ea73f0d74fa33adebc60a88d2d7f7db Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 2 Oct 2025 12:42:33 +0200 Subject: [PATCH 20/57] Move Roslyn deps from manually managed to darc --- eng/Version.Details.xml | 32 ++++++++++++++++++++++++++++++++ eng/Versions.props | 19 +++++++++---------- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1c1cb3c0db6..c1f25fac382 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -42,6 +42,38 @@ https://github.com/dotnet/runtime 9d5a6a9aa463d6d10b0b0ba6d5982cc82f363dc3 + + https://github.com/dotnet/roslyn + ebf60fd9876294d15a47407b468709db1b31cc91 + + + https://github.com/dotnet/roslyn + ebf60fd9876294d15a47407b468709db1b31cc91 + + + https://github.com/dotnet/roslyn + ebf60fd9876294d15a47407b468709db1b31cc91 + + + https://github.com/dotnet/roslyn + ebf60fd9876294d15a47407b468709db1b31cc91 + + + https://github.com/dotnet/roslyn + ebf60fd9876294d15a47407b468709db1b31cc91 + + + https://github.com/dotnet/roslyn + ebf60fd9876294d15a47407b468709db1b31cc91 + + + https://github.com/dotnet/roslyn + ebf60fd9876294d15a47407b468709db1b31cc91 + + + https://github.com/dotnet/roslyn + ebf60fd9876294d15a47407b468709db1b31cc91 + diff --git a/eng/Versions.props b/eng/Versions.props index 1af06f79f5d..7f073043b07 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -94,23 +94,22 @@ 4.7.0 1.6.0 - 5.0.0-1.25276.102 17.14.188 17.14.40268 17.14.79 17.14.40254 17.14.15 - $(RoslynVersion) - $(RoslynVersion) - $(RoslynVersion) - 5.0.0-1.25275.2 - $(RoslynVersion) - $(RoslynVersion) - $(RoslynVersion) - $(RoslynVersion) + 5.0.0-2.25480.7 + 5.0.0-2.25480.7 + 5.0.0-2.25480.7 + $(MicrosoftCodeAnalysisEditorFeaturesTextVersion) + 5.0.0-2.25480.7 + 5.0.0-2.25480.7 + 5.0.0-2.25480.7 + 5.0.0-2.25480.7 2.0.28 - $(RoslynVersion) + 5.0.0-2.25480.7 $(MicrosoftVisualStudioShellPackagesVersion) From 9a9cf3f591a925ce9aaeb1cc06c40ded15f86185 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 2 Oct 2025 14:04:22 +0200 Subject: [PATCH 21/57] Cascade of consequences --- eng/Versions.props | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 7f073043b07..0278453decd 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -94,16 +94,17 @@ 4.7.0 1.6.0 - 17.14.188 - 17.14.40268 + 18.0.332-preview + 18.0.2101-preview.1 17.14.79 - 17.14.40254 - 17.14.15 + 18.0.2077-preview.1 + 17.15.20-alpha + 5.0.0-2.25480.7 5.0.0-2.25480.7 5.0.0-2.25480.7 - $(MicrosoftCodeAnalysisEditorFeaturesTextVersion) + 5.0.0-1.25377.2 5.0.0-2.25480.7 5.0.0-2.25480.7 5.0.0-2.25480.7 @@ -127,12 +128,13 @@ $(VisualStudioShellProjectsPackages) $(VisualStudioShellProjectsPackages) $(MicrosoftVisualStudioShellPackagesVersion) - 17.14.40270 + $(MicrosoftVisualStudioShellPackagesVersion) $(MicrosoftVisualStudioShellPackagesVersion) - 17.14.40270 + $(MicrosoftVisualStudioShellPackagesVersion) 10.0.30319 11.0.50727 15.0.25123-Dev15Preview + $(VisualStudioEditorPackagesVersion) @@ -145,22 +147,22 @@ $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) - 17.14.106 + $(MicrosoftVisualStudioShellPackagesVersion) 5.6.0 - 0.1.169-beta + 0.1.800-beta $(MicrosoftVisualStudioExtensibilityTestingVersion) $(MicrosoftVisualStudioExtensibilityTestingVersion) - - + + $(MicrosoftVisualStudioThreadingPackagesVersion) - + $(VisualStudioProjectSystemPackagesVersion) 2.3.6152103 - + - 17.10.2179 - 17.14.20 + 17.13.1100801-preview + 17.15.25-pre 17.0.0 17.8.8 12.0.4 @@ -172,21 +174,21 @@ 0.2.0 1.0.0 - 1.1.33 + 1.1.87 0.13.10 2.16.5 4.3.0.0 - 1.0.31 - 4.3.0-1.22220.8 + 17.13.50 + 4.12.0 3.1.0 - 5.0.0-preview.7.20364.11 - 5.0.0-preview.7.20364.11 + 6.0.0-rtm.21518.12 + 9.0.0-rc.2.24462.10 17.11.1 13.0.3 1.0.0-beta2-dev3 - 2.22.11 + 2.23.39-alpha 2.12.87 2.9.0 2.8.2 From c637c883d247d5d94f416741ca063c64b17961d7 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 2 Oct 2025 14:41:39 +0200 Subject: [PATCH 22/57] no nuget errors, lets see what VS integration says --- eng/Versions.props | 6 +++--- vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj | 2 +- .../FSharp.LanguageService.Base.csproj | 2 +- .../FSharp.LanguageService/FSharp.LanguageService.fsproj | 2 +- .../FSharp.ProjectSystem.Base.csproj | 4 ++-- .../FSharp.ProjectSystem.FSharp.fsproj | 4 ++-- .../FSharp.ProjectSystem.PropertyPages.vbproj | 2 +- vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 2 +- vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj | 2 +- vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj | 2 +- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 0278453decd..e9486870f68 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -147,7 +147,7 @@ $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) - $(MicrosoftVisualStudioShellPackagesVersion) + 18.0.2551-preview.1 5.6.0 0.1.800-beta $(MicrosoftVisualStudioExtensibilityTestingVersion) @@ -180,8 +180,8 @@ 0.13.10 2.16.5 4.3.0.0 - 17.13.50 - 4.12.0 + 1.0.31 + 4.3.0-1.22220.8 3.1.0 6.0.0-rtm.21518.12 9.0.0-rc.2.24462.10 diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 963332abc3c..2c196ea0421 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -174,7 +174,7 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index fead6828567..5d8e9584365 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -47,7 +47,7 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index 9968c121f7c..84ed47c3935 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -56,7 +56,7 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj index c5608f1a6b6..8efa6b01317 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj +++ b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj @@ -43,8 +43,8 @@ - - + + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj index 576dc2aa464..643e04d2368 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj @@ -104,8 +104,8 @@ - - + + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj index 91418865d89..a2082802752 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj @@ -46,7 +46,7 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index 0171cdf9b26..a3c034b3478 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -58,7 +58,7 @@ - + diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index e1e657a651a..59aee46dad6 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -51,7 +51,7 @@ - + diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index 96fde123dcc..2bd2d290517 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -128,7 +128,7 @@ - + From e429e9a2be2f7692304ca199a61e2952d3062ee3 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 2 Oct 2025 16:49:47 +0200 Subject: [PATCH 23/57] un-harcode csc,ildasm,ilasm deps for testframework --- tests/FSharp.Test.Utilities/TestFramework.fs | 36 ++++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/tests/FSharp.Test.Utilities/TestFramework.fs b/tests/FSharp.Test.Utilities/TestFramework.fs index bbb1b556746..72dbfa46f3d 100644 --- a/tests/FSharp.Test.Utilities/TestFramework.fs +++ b/tests/FSharp.Test.Utilities/TestFramework.fs @@ -6,6 +6,7 @@ open System open System.IO open System.Diagnostics open System.Reflection +open System.Xml.Linq open Scripting open Xunit open FSharp.Compiler.IO @@ -269,8 +270,31 @@ let requireFile dir path = | Some _ -> fullPathLower | None -> failwith (sprintf "Couldn't find \"%s\" on the following paths: \"%s\", \"%s\". Running 'build test' once might solve this issue" path fullPath fullPathLower) +let SCRIPT_ROOT = __SOURCE_DIRECTORY__ +let repoRoot = SCRIPT_ROOT ++ ".." ++ ".." + +let loadVersionsProps () = + let versionsPropsPath = repoRoot ++ "eng" ++ "Versions.props" + if not (File.Exists versionsPropsPath) then + failwithf "Versions.props file not found at %s" versionsPropsPath + XDocument.Load(versionsPropsPath) + +let getMsbuildPropValue (xdoc: XDocument) (propName: string) = + xdoc.Descendants "PropertyGroup" + |> Seq.collect (fun pg -> pg.Elements()) + |> Seq.tryFind (fun el -> el.Name.LocalName = propName) + |> function + | Some el -> el.Value + | None -> failwithf "Property '%s' not found in Versions.props" propName + +// Usage example: +let versionsPropsDoc = loadVersionsProps () +let cscVersion = getMsbuildPropValue versionsPropsDoc "MicrosoftNetCompilersVersion" +let ildasmVersion = getMsbuildPropValue versionsPropsDoc "MicrosoftNETCoreILDAsmVersion" +let ilasmVersion = getMsbuildPropValue versionsPropsDoc "MicrosoftNETCoreILAsmVersion" + let config configurationName envVars = - let SCRIPT_ROOT = __SOURCE_DIRECTORY__ + let fsharpCoreArchitecture = "netstandard2.0" let fsharpBuildArchitecture = "netstandard2.0" let fsharpCompilerInteractiveSettingsArchitecture = "netstandard2.0" @@ -284,10 +308,8 @@ let config configurationName envVars = let fsiArchitecture = dotnetArchitecture //let peverifyArchitecture = dotnetArchitecture #endif - let repoRoot = SCRIPT_ROOT ++ ".." ++ ".." let artifactsPath = repoRoot ++ "artifacts" let artifactsBinPath = artifactsPath ++ "bin" - let coreClrRuntimePackageVersion = "5.0.0-preview.7.20364.11" let csc_flags = "/nologo" let vbc_flags = "/nologo" let fsc_flags = "-r:System.Core.dll --nowarn:20 --define:COMPILED --preferreduilang:en-US" @@ -298,12 +320,12 @@ let config configurationName envVars = let packagesDir = getPackagesDir () let requirePackage = requireFile packagesDir let requireArtifact = requireFile artifactsBinPath - let CSC = requirePackage ("Microsoft.Net.Compilers" ++ "4.3.0-1.22220.8" ++ "tools" ++ "csc.exe") - let VBC = requirePackage ("Microsoft.Net.Compilers" ++ "4.3.0-1.22220.8" ++ "tools" ++ "vbc.exe") + let CSC = requirePackage ("Microsoft.Net.Compilers" ++ cscVersion ++ "tools" ++ "csc.exe") + let VBC = requirePackage ("Microsoft.Net.Compilers" ++ cscVersion ++ "tools" ++ "vbc.exe") let ILDASM_EXE = if operatingSystem = "win" then "ildasm.exe" else "ildasm" - let ILDASM = requirePackage (("runtime." + operatingSystem + "-" + architectureMoniker + ".Microsoft.NETCore.ILDAsm") ++ coreClrRuntimePackageVersion ++ "runtimes" ++ (operatingSystem + "-" + architectureMoniker) ++ "native" ++ ILDASM_EXE) + let ILDASM = requirePackage (("runtime." + operatingSystem + "-" + architectureMoniker + ".Microsoft.NETCore.ILDAsm") ++ ildasmVersion ++ "runtimes" ++ (operatingSystem + "-" + architectureMoniker) ++ "native" ++ ILDASM_EXE) let ILASM_EXE = if operatingSystem = "win" then "ilasm.exe" else "ilasm" - let ILASM = requirePackage (("runtime." + operatingSystem + "-" + architectureMoniker + ".Microsoft.NETCore.ILAsm") ++ coreClrRuntimePackageVersion ++ "runtimes" ++ (operatingSystem + "-" + architectureMoniker) ++ "native" ++ ILASM_EXE) + let ILASM = requirePackage (("runtime." + operatingSystem + "-" + architectureMoniker + ".Microsoft.NETCore.ILAsm") ++ ilasmVersion ++ "runtimes" ++ (operatingSystem + "-" + architectureMoniker) ++ "native" ++ ILASM_EXE) //let PEVERIFY_EXE = if operatingSystem = "win" then "PEVerify.exe" elif operatingSystem = "osx" then "PEVerify.dll" else "PEVerify" let PEVERIFY = "ilverify" //requireArtifact ("PEVerify" ++ configurationName ++ peverifyArchitecture ++ PEVERIFY_EXE) // let FSI_FOR_SCRIPTS = artifactsBinPath ++ "fsi" ++ configurationName ++ fsiArchitecture ++ "fsi.exe" From 4e32245b51c19c12d229a48152bd34a47a1a0f46 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 3 Oct 2025 09:32:22 +0200 Subject: [PATCH 24/57] Apply suggestion from @T-Gro --- eng/Versions.props | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index e9486870f68..ecbac8b3409 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -183,8 +183,9 @@ 1.0.31 4.3.0-1.22220.8 3.1.0 - 6.0.0-rtm.21518.12 - 9.0.0-rc.2.24462.10 + + 5.0.0-preview.7.20364.11 + 5.0.0-preview.7.20364.11 17.11.1 13.0.3 1.0.0-beta2-dev3 From 3bcfbf1d95472256b87716043c5dab8acedb2f75 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 3 Oct 2025 11:35:05 +0200 Subject: [PATCH 25/57] VSSDK Build Tools --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index ecbac8b3409..c47b55946c3 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -161,7 +161,7 @@ 2.3.6152103 - 17.13.1100801-preview + 17.14.4-preview1 17.15.25-pre 17.0.0 17.8.8 From 8a42a70ddaf4e52ac90a14d9a89ff95244e2ab13 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 3 Oct 2025 11:56:28 +0200 Subject: [PATCH 26/57] adapt roslyn api change --- .../src/FSharp.Editor/LanguageService/LanguageService.fs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs index 6c84d3fb810..9300b18c9a4 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs @@ -26,6 +26,7 @@ open Microsoft.CodeAnalysis.Host.Mef open Microsoft.VisualStudio.FSharp.Editor.Telemetry open CancellableTasks open FSharp.Compiler.Text +open Microsoft.VisualStudio.Editor #nowarn "9" // NativePtr.toNativeInt #nowarn "57" // Experimental stuff @@ -461,11 +462,11 @@ type internal FSharpLanguageService(package: FSharpPackage) = let outliningManagerService = this.Package.ComponentModel.GetService() - let wpfTextView = this.EditorAdaptersFactoryService.GetWpfTextView(textView) + let wpfTextView = this.Package.ComponentModel.GetService().GetWpfTextView(textView) let outliningManager = outliningManagerService.GetOutliningManager(wpfTextView) if not (isNull outliningManager) then - let settings = this.Workspace.Services.GetService() + let settings = this.Workspace.Value.Services.GetService() outliningManager.Enabled <- settings.Advanced.IsOutliningEnabled [] From 5cbbb4a44af5f51f7bf40361ecad82c25f898271 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 3 Oct 2025 11:58:30 +0200 Subject: [PATCH 27/57] Update LanguageService.fs --- .../src/FSharp.Editor/LanguageService/LanguageService.fs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs index 9300b18c9a4..cfb90fc9c37 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs @@ -462,7 +462,9 @@ type internal FSharpLanguageService(package: FSharpPackage) = let outliningManagerService = this.Package.ComponentModel.GetService() - let wpfTextView = this.Package.ComponentModel.GetService().GetWpfTextView(textView) + let wpfTextView = + this.Package.ComponentModel.GetService().GetWpfTextView(textView) + let outliningManager = outliningManagerService.GetOutliningManager(wpfTextView) if not (isNull outliningManager) then From 5475d476263918770c6f81cff6677f5c6b55b49e Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Fri, 3 Oct 2025 14:36:25 +0200 Subject: [PATCH 28/57] Fix CI crashes --- eng/Versions.props | 4 ++-- vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj | 4 +++- vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index c47b55946c3..b4dfb6e9217 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -96,9 +96,9 @@ 18.0.332-preview 18.0.2101-preview.1 - 17.14.79 + 18.0.1237-pre 18.0.2077-preview.1 - 17.15.20-alpha + 18.0.5 5.0.0-2.25480.7 diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj index 96fd6dc836d..5a6671c4d24 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj @@ -8,7 +8,9 @@ netcoreapp1.0 true net472 - true + true + false + true diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj index 10c18b8530e..49f1cc33ab6 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj @@ -9,7 +9,9 @@ true net472 - false + false + false + true From 5ff7a7d979adffaf323ad95020e5dc10001e96b3 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 14:58:11 +0200 Subject: [PATCH 29/57] drastically reduce direct package references for vsintegration to avoid nuget conflicts --- eng/Versions.props | 2 +- .../src/FSharp.Editor/FSharp.Editor.fsproj | 28 ++++--------------- .../FSharp.LanguageService.Base.csproj | 6 ---- .../FSharp.LanguageService.fsproj | 9 +----- .../ProjectSitesAndFiles.fs | 1 - .../FSharp.ProjectSystem.Base.csproj | 10 ------- .../FSharp.ProjectSystem.FSharp.fsproj | 11 +------- .../FSharp.ProjectSystem.PropertyPages.vbproj | 5 ---- .../src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 10 +------ .../FSharp.Editor.Tests.fsproj | 3 -- .../tests/Salsa/VisualFSharp.Salsa.fsproj | 12 +------- .../UnitTests/VisualFSharp.UnitTests.fsproj | 22 --------------- 12 files changed, 10 insertions(+), 109 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index b4dfb6e9217..a752ff7614b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -87,7 +87,7 @@ 4.6.0 6.1.0 - + diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 2c196ea0421..4227261091a 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -170,36 +170,18 @@ + - - - + - + - - - - - - - - - + - - - - - - - - - - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index 5d8e9584365..b0baabd173d 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -46,16 +46,10 @@ - - - - - - diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index 84ed47c3935..75bfc3dc401 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -57,23 +57,16 @@ - - + - - - - - - diff --git a/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs b/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs index b2a437dc99f..39fe59fc933 100644 --- a/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs +++ b/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs @@ -34,7 +34,6 @@ module internal rec Microsoft.VisualStudio.FSharp.LanguageService.SiteProvider open System open System.Collections.Concurrent -open System.ComponentModel.Composition open System.IO open System.Diagnostics open Microsoft.VisualStudio diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj index 8efa6b01317..cf4724a7f62 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj +++ b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj @@ -40,22 +40,12 @@ - - - - - - - - - - diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj index 643e04d2368..66400ffe744 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj @@ -106,21 +106,12 @@ - - - - - - - - - - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj index a2082802752..d7912c88fd8 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj @@ -48,13 +48,8 @@ - - - - - diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index a3c034b3478..c7432b4d5b7 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -19,7 +19,7 @@ - + @@ -57,18 +57,10 @@ - - - - - - - - diff --git a/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj b/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj index c084fc6f06a..94a57d466e2 100644 --- a/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj +++ b/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj @@ -95,12 +95,9 @@ - - - diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index 59aee46dad6..adec147feaf 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -16,7 +16,7 @@ - + CompilerLocation.fs @@ -53,20 +53,10 @@ - - - - - - - - - - diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index 2bd2d290517..c8a8bebb2c2 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -120,34 +120,12 @@ - - - - - - - - - - - - - - - - - - - - - - From d533ddab3576f0e48fb7f7afe235e1a57e30a25f Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:29:00 +0200 Subject: [PATCH 30/57] Remove unneeded versions --- eng/Versions.props | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index a752ff7614b..628190c1691 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -87,7 +87,7 @@ 4.6.0 6.1.0 - + @@ -101,57 +101,38 @@ 18.0.5 - 5.0.0-2.25480.7 - 5.0.0-2.25480.7 5.0.0-2.25480.7 - 5.0.0-1.25377.2 5.0.0-2.25480.7 5.0.0-2.25480.7 5.0.0-2.25480.7 5.0.0-2.25480.7 2.0.28 - 5.0.0-2.25480.7 $(MicrosoftVisualStudioShellPackagesVersion) - $(MicrosoftVisualStudioShellPackagesVersion) $(VisualStudioShellProjectsPackages) - $(MicrosoftVisualStudioShellPackagesVersion) $(MicrosoftVisualStudioShellPackagesVersion) $(MicrosoftVisualStudioShellPackagesVersion) $(MicrosoftVisualStudioShellPackagesVersion) - $(MicrosoftVisualStudioShellPackagesVersion) $(MicrosoftVisualStudioShellPackagesVersion) - $(MicrosoftVisualStudioShellPackagesVersion) $(MicrosoftVisualStudioShellPackagesVersion) $(MicrosoftVisualStudioShellPackagesVersion) $(VisualStudioShellProjectsPackages) - $(VisualStudioShellProjectsPackages) - $(MicrosoftVisualStudioShellPackagesVersion) - $(MicrosoftVisualStudioShellPackagesVersion) $(MicrosoftVisualStudioShellPackagesVersion) - $(MicrosoftVisualStudioShellPackagesVersion) 10.0.30319 11.0.50727 15.0.25123-Dev15Preview - $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) - $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) - $(VisualStudioEditorPackagesVersion) $(VisualStudioEditorPackagesVersion) - $(VisualStudioEditorPackagesVersion) - $(VisualStudioEditorPackagesVersion) - 18.0.2551-preview.1 5.6.0 0.1.800-beta $(MicrosoftVisualStudioExtensibilityTestingVersion) - $(MicrosoftVisualStudioExtensibilityTestingVersion) $(MicrosoftVisualStudioThreadingPackagesVersion) @@ -162,14 +143,7 @@ 17.14.4-preview1 - 17.15.25-pre 17.0.0 - 17.8.8 - 12.0.4 - 7.0.4 - 8.0.4 - 11.0.4 - 7.0.4 0.2.0 @@ -179,22 +153,16 @@ 0.13.10 2.16.5 - 4.3.0.0 1.0.31 4.3.0-1.22220.8 - 3.1.0 5.0.0-preview.7.20364.11 5.0.0-preview.7.20364.11 17.11.1 13.0.3 - 1.0.0-beta2-dev3 - 2.23.39-alpha - 2.12.87 2.9.0 2.8.2 3.1.17 - 2.2.0 From 4f2102ffd1d1d09a7252a708b28b975689535fb3 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:52:12 +0200 Subject: [PATCH 31/57] Apply suggestion from @T-Gro --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index 628190c1691..e694e4f4998 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -142,7 +142,7 @@ 2.3.6152103 - 17.14.4-preview1 + 17.14.2120 17.0.0 From 6f5fd540ae4409dea708dcb888cf560ec5f63805 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:53:31 +0200 Subject: [PATCH 32/57] Apply suggestion from @T-Gro --- vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 4227261091a..26621fac1e6 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -174,7 +174,6 @@ - From 0aa473eb4ff05b5e6ae11159ce8015e06a972b21 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:53:42 +0200 Subject: [PATCH 33/57] Apply suggestion from @T-Gro --- .../FSharp.LanguageService.Base.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index b0baabd173d..fbf420a0741 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -46,7 +46,6 @@ - From be3fd0595731c66e6985d74662e9f977876ffe78 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:53:50 +0200 Subject: [PATCH 34/57] Apply suggestion from @T-Gro --- .../src/FSharp.LanguageService/FSharp.LanguageService.fsproj | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index 75bfc3dc401..ac643efc71b 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -56,7 +56,6 @@ - From 80fcad92537faa3b5e5a09de4df66f56e30768bb Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:53:58 +0200 Subject: [PATCH 35/57] Apply suggestion from @T-Gro --- .../src/FSharp.LanguageService/FSharp.LanguageService.fsproj | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index ac643efc71b..0d948cc586b 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -57,7 +57,6 @@ - From 5a3e0201d9c2dda32407ce0e078b4e35b51c40b7 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:54:07 +0200 Subject: [PATCH 36/57] Apply suggestion from @T-Gro --- .../FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj index cf4724a7f62..be6eb82d080 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj +++ b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj @@ -41,8 +41,6 @@ - - From 0ddd987b375f358f904c0b49e1952f1f2d0485da Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:54:19 +0200 Subject: [PATCH 37/57] Apply suggestion from @T-Gro --- .../FSharp.ProjectSystem.FSharp.fsproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj index 66400ffe744..da59e918292 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj @@ -104,8 +104,6 @@ - - From 56cc10cf427f83029b0cc820baabe28ad786c6b4 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:54:29 +0200 Subject: [PATCH 38/57] Apply suggestion from @T-Gro --- .../FSharp.ProjectSystem.PropertyPages.vbproj | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj index d7912c88fd8..e964555f55f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj @@ -46,7 +46,6 @@ - From ecf62b7dd3aec3d74d1364369be911514d7f9b94 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:54:39 +0200 Subject: [PATCH 39/57] Apply suggestion from @T-Gro --- vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index c8a8bebb2c2..a1ca5b1fbf0 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -121,7 +121,6 @@ - From 127fc9a05d90cd4c4be628d7a3284438b73d5ae9 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:54:52 +0200 Subject: [PATCH 40/57] Apply suggestion from @T-Gro --- vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index adec147feaf..6396eada6a9 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -51,7 +51,6 @@ - From d0dde7e3a1fdf9fd554a394900ca4198ca6029f2 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 15:55:10 +0200 Subject: [PATCH 41/57] Apply suggestion from @T-Gro --- vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 1 - 1 file changed, 1 deletion(-) diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index c7432b4d5b7..2478700de2d 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -57,7 +57,6 @@ - From 6eb6275d834ece5163a5c7aba7e86e8b996f2fa5 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 20:21:59 +0200 Subject: [PATCH 42/57] Modify System.Collections.Immutable reference Updated PackageReference for System.Collections.Immutable to exclude all assets. --- tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index 484f8acfbb0..382361ab94c 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -92,8 +92,10 @@ $(NoWarn);NU1510 - - + + all From 645747ab3b0f4aa73cbf3225d4091d17cf9b5cd2 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 20:33:17 +0200 Subject: [PATCH 43/57] Apply suggestion from @T-Gro --- tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index 382361ab94c..60f64573e0f 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -93,8 +93,8 @@ + TEST IF WE CAN ELIMINATE THIS DIRECT REFERENCE --> + From ca1acf7edc63affabf3714b019d98d17aec22110 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 20:59:11 +0200 Subject: [PATCH 44/57] Apply suggestion from @T-Gro --- tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index 60f64573e0f..4e596ef9cc1 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -92,9 +92,7 @@ $(NoWarn);NU1510 - - + From 477f0579c2b1a5f325ac951dab6e8d3638cd2285 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Mon, 6 Oct 2025 21:53:36 +0200 Subject: [PATCH 45/57] Update FSharp.Test.Utilities.fsproj --- tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index 4e596ef9cc1..c58b4ecdae0 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -92,8 +92,7 @@ $(NoWarn);NU1510 - - + all @@ -102,7 +101,6 @@ - From ccaf4397038888084d597aeccff6f87269e58085 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Tue, 7 Oct 2025 10:44:27 +0200 Subject: [PATCH 46/57] showImmutableVersion --- tests/fsharp/Compiler/Language/OptionalInteropTests.fs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs index 17f22bbe378..65d4f9a0a95 100644 --- a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs +++ b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs @@ -11,10 +11,17 @@ open Microsoft.CodeAnalysis module OptionalInteropTests = + open System.Reflection + + let showImmutableVersion () = + let asm = typeof.Assembly + printfn "Loaded System.Collections.Immutable version: %s" (asm.GetName().Version.ToString()) + [] [] [] let ``C# method with an optional parameter and called with an option type should compile`` langVersion = + showImmutableVersion() let csSrc = """ using Microsoft.FSharp.Core; From a9e3ec73b649ca0c308de6149b63216c1aa708f9 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Tue, 7 Oct 2025 14:16:00 +0200 Subject: [PATCH 47/57] what is wrong with System.Collections.Immutable.ImmutableArray.Create --- tests/fsharp/Compiler/Language/OptionalInteropTests.fs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs index 65d4f9a0a95..6d2c62c28aa 100644 --- a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs +++ b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs @@ -14,6 +14,8 @@ module OptionalInteropTests = open System.Reflection let showImmutableVersion () = + let x = System.Collections.Immutable.ImmutableArray.Create(System.ReadOnlySpan.op_Implicit([|1;2;3|])) + printfn "Created ImmutableArray with length: %d ;; %A" x.Length x let asm = typeof.Assembly printfn "Loaded System.Collections.Immutable version: %s" (asm.GetName().Version.ToString()) From fa593f3aacb44d6a24d47ab58007048f7e963e7c Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 9 Oct 2025 12:40:46 +0200 Subject: [PATCH 48/57] Reduce duplicate test deps, downgrade roslyn used for testing (keep high one for vsintegration) --- FSharp.sln | 11 +++++-- eng/Versions.props | 6 ++-- .../FSharp.Test.Utilities.fsproj | 29 ++++++++++++------- .../Compiler/Language/OptionalInteropTests.fs | 10 +------ tests/fsharp/FSharpSuite.Tests.fsproj | 22 ++------------ 5 files changed, 34 insertions(+), 44 deletions(-) diff --git a/FSharp.sln b/FSharp.sln index 094d4302e5c..83933b62da3 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.1.32113.165 +# Visual Studio Version 18 +VisualStudioVersion = 18.0.11104.47 d18.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "src\FSharp.Core\FSharp.Core.fsproj", "{DED3BBD7-53F4-428A-8C9F-27968E768605}" EndProject @@ -166,6 +166,13 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".VisualStudio", ".VisualStu docs\release-notes\.VisualStudio\17.9.md = docs\release-notes\.VisualStudio\17.9.md EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "eng", "eng", "{79E058E4-79E9-4178-AFA4-A87C45373379}" + ProjectSection(SolutionItems) = preProject + eng\Version.Details.props = eng\Version.Details.props + eng\Version.Details.xml = eng\Version.Details.xml + eng\Versions.props = eng\Versions.props + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/eng/Versions.props b/eng/Versions.props index e694e4f4998..1b84f68b3cd 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -107,6 +107,8 @@ 5.0.0-2.25480.7 5.0.0-2.25480.7 2.0.28 + + 4.14.0 $(MicrosoftVisualStudioShellPackagesVersion) @@ -158,10 +160,10 @@ 5.0.0-preview.7.20364.11 5.0.0-preview.7.20364.11 - 17.11.1 + 17.14.1 13.0.3 2.9.0 - 2.8.2 + 3.1.4 3.1.17 diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index c58b4ecdae0..a05373966a7 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -69,8 +69,22 @@ - - + + runtime; native + all + + + runtime; native + all + + + runtime; native + all + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + @@ -83,8 +97,6 @@ - - @@ -93,13 +105,8 @@ - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + diff --git a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs index 6d2c62c28aa..868d46de779 100644 --- a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs +++ b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs @@ -2,6 +2,7 @@ namespace FSharp.Compiler.UnitTests +open System open System.Collections.Immutable open Xunit open FSharp.Test @@ -11,19 +12,10 @@ open Microsoft.CodeAnalysis module OptionalInteropTests = - open System.Reflection - - let showImmutableVersion () = - let x = System.Collections.Immutable.ImmutableArray.Create(System.ReadOnlySpan.op_Implicit([|1;2;3|])) - printfn "Created ImmutableArray with length: %d ;; %A" x.Length x - let asm = typeof.Assembly - printfn "Loaded System.Collections.Immutable version: %s" (asm.GetName().Version.ToString()) - [] [] [] let ``C# method with an optional parameter and called with an option type should compile`` langVersion = - showImmutableVersion() let csSrc = """ using Microsoft.FSharp.Core; diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index b4540de0b33..104ce17eddd 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -2,7 +2,7 @@ - net472;$(FSharpNetCoreProductTargetFramework) + net472;$(FSharpNetCoreProductTargetFramework) $(FSharpNetCoreProductTargetFramework) win-x86;win-x64 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81 @@ -112,27 +112,9 @@ - + false - - - - - - - - - - - - - - - - - - From 94e6c73cd24c2060bf8a7a8f24cf6d016b4573ec Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 9 Oct 2025 13:20:21 +0200 Subject: [PATCH 49/57] Avoid xunit catastrophic failure caused by testcollection ID --- tests/FSharp.Test.Utilities/XunitHelpers.fs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/FSharp.Test.Utilities/XunitHelpers.fs b/tests/FSharp.Test.Utilities/XunitHelpers.fs index 7e907492e65..7c3e8f16a0c 100644 --- a/tests/FSharp.Test.Utilities/XunitHelpers.fs +++ b/tests/FSharp.Test.Utilities/XunitHelpers.fs @@ -77,13 +77,21 @@ module TestCaseCustomizations = let oldTestClass = oldTestMethod.TestClass let oldTestCollection = oldTestMethod.TestClass.TestCollection + // Create a DETERMINISTIC collection ID based on the test case's unique ID + // This ensures the same test case always gets the same collection ID + let collectionId = + use sha = System.Security.Cryptography.SHA256.Create() + let bytes = System.Text.Encoding.UTF8.GetBytes(testCase.UniqueID) + let hash = sha.ComputeHash(bytes) + System.Guid(hash.[0..15]) // Take first 16 bytes for GUID + // Create a new collection with a unique id for the test case. let newTestCollection = new TestCollection( oldTestCollection.TestAssembly, oldTestCollection.CollectionDefinition, oldTestCollection.DisplayName, - Guid.NewGuid() + collectionId ) let newTestClass = new TestClass(newTestCollection, oldTestClass.Class) From 0d7bdff35536572c8e85c45fd1fe5aa276a90cb0 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 9 Oct 2025 13:27:05 +0200 Subject: [PATCH 50/57] IDE tests - enforce roslyn version matching editor components --- .../tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj | 5 ++++- vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj b/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj index 94a57d466e2..1625be60b9a 100644 --- a/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj +++ b/vsintegration/tests/FSharp.Editor.Tests/FSharp.Editor.Tests.fsproj @@ -95,7 +95,10 @@ - + + + + diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index a1ca5b1fbf0..d5167d28820 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -120,7 +120,10 @@ - + + + + From 29abb60a1153ec0ca619f56c7f66754f6e9a8c5c Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 9 Oct 2025 13:33:26 +0200 Subject: [PATCH 51/57] remove obsolete prop --- tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj | 1 - tests/fsharp/FSharpSuite.Tests.fsproj | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index a05373966a7..c1aebde1ed3 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -5,7 +5,6 @@ $(FSharpNetCoreProductTargetFramework) win-x86;win-x64;linux-x64;osx-x64 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81 - true Library true xunit diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 104ce17eddd..d1b45048e75 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -6,7 +6,6 @@ $(FSharpNetCoreProductTargetFramework) win-x86;win-x64 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81 - true Library true false From 47eab8b507f763974d58e2ee31272ecda5bade53 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Thu, 9 Oct 2025 14:36:25 +0200 Subject: [PATCH 52/57] workaround xunit bug that treat displayname as if it were a unique ID --- tests/FSharp.Test.Utilities/XunitHelpers.fs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/FSharp.Test.Utilities/XunitHelpers.fs b/tests/FSharp.Test.Utilities/XunitHelpers.fs index 7c3e8f16a0c..562ae04ce9b 100644 --- a/tests/FSharp.Test.Utilities/XunitHelpers.fs +++ b/tests/FSharp.Test.Utilities/XunitHelpers.fs @@ -85,12 +85,14 @@ module TestCaseCustomizations = let hash = sha.ComputeHash(bytes) System.Guid(hash.[0..15]) // Take first 16 bytes for GUID + let newDisplayName = $"{oldTestCollection.DisplayName}_{collectionId:N}" + // Create a new collection with a unique id for the test case. let newTestCollection = new TestCollection( oldTestCollection.TestAssembly, oldTestCollection.CollectionDefinition, - oldTestCollection.DisplayName, + newDisplayName, collectionId ) From db81a081913bbaa32e528305723c07d98fd598b8 Mon Sep 17 00:00:00 2001 From: Tomas Grosup Date: Wed, 22 Oct 2025 14:47:14 +0200 Subject: [PATCH 53/57] Backport PR #19010: Type relations cache: Add a failsafe in case of infinite types (#19022) --- src/Compiler/Checking/TypeRelations.fs | 14 ++++++++++---- src/Compiler/Utilities/TypeHashing.fs | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Compiler/Checking/TypeRelations.fs b/src/Compiler/Checking/TypeRelations.fs index 27274f7ebda..cb71ea87de8 100644 --- a/src/Compiler/Checking/TypeRelations.fs +++ b/src/Compiler/Checking/TypeRelations.fs @@ -28,8 +28,12 @@ type CanCoerce = [] type TTypeCacheKey = | TTypeCacheKey of TypeStructure * TypeStructure * CanCoerce - static member FromStrippedTypes(ty1, ty2, canCoerce) = - TTypeCacheKey(getTypeStructure ty1, getTypeStructure ty2, canCoerce) + static member TryGetFromStrippedTypes(ty1, ty2, canCoerce) = + let t1, t2 = getTypeStructure ty1, getTypeStructure ty2 + if t1.IsPossiblyInfinite || t2.IsPossiblyInfinite then + ValueNone + else + ValueSome (TTypeCacheKey(t1, t2, canCoerce)) let getTypeSubsumptionCache = let factory (g: TcGlobals) = @@ -157,8 +161,10 @@ let rec TypeFeasiblySubsumesType ndeep (g: TcGlobals) (amap: ImportMap) m (ty1: List.exists (TypeFeasiblySubsumesType (ndeep + 1) g amap m ty1 NoCoerce) interfaces if g.langVersion.SupportsFeature LanguageFeature.UseTypeSubsumptionCache then - let key = TTypeCacheKey.FromStrippedTypes(ty1, ty2, canCoerce) - (getTypeSubsumptionCache g).GetOrAdd(key, fun _ -> checkSubsumes ty1 ty2) + match TTypeCacheKey.TryGetFromStrippedTypes(ty1, ty2, canCoerce) with + | ValueSome key -> + (getTypeSubsumptionCache g).GetOrAdd(key, fun _ -> checkSubsumes ty1 ty2) + | _ -> checkSubsumes ty1 ty2 else checkSubsumes ty1 ty2 diff --git a/src/Compiler/Utilities/TypeHashing.fs b/src/Compiler/Utilities/TypeHashing.fs index af536a9d2b6..8e3752d5d33 100644 --- a/src/Compiler/Utilities/TypeHashing.fs +++ b/src/Compiler/Utilities/TypeHashing.fs @@ -401,7 +401,9 @@ module StructuralUtilities = | MeasureRational of int * int | NeverEqual of never: NeverEqual - type TypeStructure = TypeStructure of ImmutableArray + type TypeStructure = + | TypeStructure of TypeToken[] + | PossiblyInfinite of never: NeverEqual let inline toNullnessToken (n: Nullness) = match n.TryEvaluate() with @@ -464,6 +466,15 @@ module StructuralUtilities = | TType_measure m -> yield! accumulateMeasure m } + // If the sequence got too long, just drop it, we could be dealing with an infinite type. + let private toTypeStructure tokens = + let tokens = tokens |> Seq.truncate 256 |> Array.ofSeq + + if tokens.Length = 256 then + PossiblyInfinite NeverEqual.Singleton + else + TypeStructure tokens + /// Get the full structure of a type as a sequence of tokens, suitable for equality let getTypeStructure = - Extras.WeakMap.getOrCreate (fun ty -> accumulateTType ty |> ImmutableArray.ofSeq |> TypeStructure) + Extras.WeakMap.getOrCreate (fun ty -> accumulateTType ty |> toTypeStructure) From 3759e167a71ae30a81b21203bc7f14b60d6aa4eb Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:23:07 +0000 Subject: [PATCH 54/57] [release/dev18.0] Update dependencies from dotnet/roslyn (#19039) * Update dependencies from https://github.com/dotnet/roslyn build 20251029.2 On relative base path root Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.0.0-2.25480.7 -> To Version 5.0.0-2.25529.2 * Update dependencies from https://github.com/dotnet/roslyn build 20251029.7 On relative base path root Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.0.0-2.25480.7 -> To Version 5.0.0-2.25529.7 * Update Versions.props --------- Co-authored-by: dotnet-maestro[bot] Co-authored-by: Tomas Grosup --- eng/Version.Details.props | 18 ++++++++++++++++++ eng/Version.Details.xml | 32 ++++++++++++++++---------------- eng/Versions.props | 7 +------ 3 files changed, 35 insertions(+), 22 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 2c5ef89f26d..1bf8dd77a78 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -17,6 +17,15 @@ This file should be imported by eng/Versions.props 9.0.0 9.0.0 9.0.0 + + 5.0.0-2.25529.7 + 5.0.0-2.25529.7 + 5.0.0-2.25529.7 + 5.0.0-2.25529.7 + 5.0.0-2.25529.7 + 5.0.0-2.25529.7 + 5.0.0-2.25529.7 + 5.0.0-2.25529.7 10.0.0-beta.25513.2 @@ -40,6 +49,15 @@ This file should be imported by eng/Versions.props $(SystemDiagnosticsDiagnosticSourcePackageVersion) $(SystemReflectionMetadataPackageVersion) $(SystemThreadingTasksDataflowPackageVersion) + + $(MicrosoftCodeAnalysisPackageVersion) + $(MicrosoftCodeAnalysisCompilersPackageVersion) + $(MicrosoftCodeAnalysisCSharpPackageVersion) + $(MicrosoftCodeAnalysisEditorFeaturesPackageVersion) + $(MicrosoftCodeAnalysisEditorFeaturesTextPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessFSharpPackageVersion) + $(MicrosoftCodeAnalysisFeaturesPackageVersion) + $(MicrosoftVisualStudioLanguageServicesPackageVersion) $(MicrosoftDotNetArcadeSdkPackageVersion) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index c1f25fac382..c67fec8bff7 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -42,37 +42,37 @@ https://github.com/dotnet/runtime 9d5a6a9aa463d6d10b0b0ba6d5982cc82f363dc3 - + https://github.com/dotnet/roslyn - ebf60fd9876294d15a47407b468709db1b31cc91 + 68a9207cafc10bb08d345e32f06dd1a91ab7a6a2 - + https://github.com/dotnet/roslyn - ebf60fd9876294d15a47407b468709db1b31cc91 + 68a9207cafc10bb08d345e32f06dd1a91ab7a6a2 - + https://github.com/dotnet/roslyn - ebf60fd9876294d15a47407b468709db1b31cc91 + 68a9207cafc10bb08d345e32f06dd1a91ab7a6a2 - + https://github.com/dotnet/roslyn - ebf60fd9876294d15a47407b468709db1b31cc91 + 68a9207cafc10bb08d345e32f06dd1a91ab7a6a2 - + https://github.com/dotnet/roslyn - ebf60fd9876294d15a47407b468709db1b31cc91 + 68a9207cafc10bb08d345e32f06dd1a91ab7a6a2 - + https://github.com/dotnet/roslyn - ebf60fd9876294d15a47407b468709db1b31cc91 + 68a9207cafc10bb08d345e32f06dd1a91ab7a6a2 - + https://github.com/dotnet/roslyn - ebf60fd9876294d15a47407b468709db1b31cc91 + 68a9207cafc10bb08d345e32f06dd1a91ab7a6a2 - + https://github.com/dotnet/roslyn - ebf60fd9876294d15a47407b468709db1b31cc91 + 68a9207cafc10bb08d345e32f06dd1a91ab7a6a2 diff --git a/eng/Versions.props b/eng/Versions.props index 1b84f68b3cd..ee0a41feffd 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -100,12 +100,7 @@ 18.0.2077-preview.1 18.0.5 - - 5.0.0-2.25480.7 - 5.0.0-2.25480.7 - 5.0.0-2.25480.7 - 5.0.0-2.25480.7 - 5.0.0-2.25480.7 + 2.0.28 4.14.0 From b7ef3e159a55e8202d75f45283e8b94222661137 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 16:31:32 +0000 Subject: [PATCH 55/57] Update dependencies from https://github.com/dotnet/arcade build 20251020.2 (#19017) On relative base path root Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.25513.2 -> To Version 10.0.0-beta.25520.2 Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.props | 2 +- eng/Version.Details.xml | 4 ++-- eng/common/SetupNugetSources.ps1 | 17 +++++++++++++++-- eng/common/SetupNugetSources.sh | 17 +++++++++++++++-- .../core-templates/job/publish-build-assets.yml | 5 +++++ .../core-templates/post-build/post-build.yml | 5 +++++ .../core-templates/steps/install-microbuild.yml | 15 +++++++-------- global.json | 2 +- 8 files changed, 51 insertions(+), 16 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 1bf8dd77a78..c8725ae976b 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -27,7 +27,7 @@ This file should be imported by eng/Versions.props 5.0.0-2.25529.7 5.0.0-2.25529.7 - 10.0.0-beta.25513.2 + 10.0.0-beta.25555.6 1.0.0-prerelease.25467.1 1.0.0-prerelease.25467.1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index c67fec8bff7..cec28533549 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -76,9 +76,9 @@ - + https://github.com/dotnet/arcade - e8ca69398033dd1eea35e9667bf857234465de2b + 987d1a73ea67d323c0fc7537bce8ec65d87eb43f https://dev.azure.com/dnceng/internal/_git/dotnet-optimization diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index fc8d618014e..65ed3a8adef 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -1,6 +1,7 @@ # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # @@ -173,4 +174,16 @@ foreach ($dotnetVersion in $dotnetVersions) { } } +# Check for dotnet-eng and add dotnet-eng-internal if present +$dotnetEngSource = $sources.SelectSingleNode("add[@key='dotnet-eng']") +if ($dotnetEngSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-eng-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + +# Check for dotnet-tools and add dotnet-tools-internal if present +$dotnetToolsSource = $sources.SelectSingleNode("add[@key='dotnet-tools']") +if ($dotnetToolsSource -ne $null) { + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "dotnet-tools-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password +} + $doc.Save($filename) diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index b97cc536379..b2163abbe71 100755 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash # This script adds internal feeds required to build commits that depend on internal package sources. For instance, -# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. In addition also enables -# disabled internal Maestro (darc-int*) feeds. +# dotnet6-internal would be added automatically if dotnet6 was found in the nuget.config file. Similarly, +# dotnet-eng-internal and dotnet-tools-internal are added if dotnet-eng and dotnet-tools are present. +# In addition, this script also enables disabled internal Maestro (darc-int*) feeds. # # Optionally, this script also adds a credential entry for each of the internal feeds if supplied. # @@ -173,6 +174,18 @@ for DotNetVersion in ${DotNetVersions[@]} ; do fi done +# Check for dotnet-eng and add dotnet-eng-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-eng-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-eng-internal/nuget/$FeedSuffix" +fi + +# Check for dotnet-tools and add dotnet-tools-internal if present +grep -i " /dev/null +if [ "$?" == "0" ]; then + AddOrEnablePackageSource "dotnet-tools-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/dotnet-tools-internal/nuget/$FeedSuffix" +fi + # I want things split line by line PrevIFS=$IFS IFS=$'\n' diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 37dff559fc1..e7daa6d2faf 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -180,6 +180,11 @@ jobs: PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} is1ESPipeline: ${{ parameters.is1ESPipeline }} + # Darc is targeting 8.0, so make sure it's installed + - task: UseDotNet@2 + inputs: + version: 8.0.x + - task: AzureCLI@2 displayName: Publish Using Darc inputs: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index f6f87fe5c67..55361908c2e 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -307,6 +307,11 @@ stages: - task: NuGetAuthenticate@1 + # Darc is targeting 8.0, so make sure it's installed + - task: UseDotNet@2 + inputs: + version: 8.0.x + - task: AzureCLI@2 displayName: Publish Using Darc inputs: diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml index d6b9878f54d..f2248ebfd73 100644 --- a/eng/common/core-templates/steps/install-microbuild.yml +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -11,23 +11,22 @@ parameters: # Unfortunately, _SignType can't be used to exclude the use of the service connection in non-real sign scenarios. The # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. microbuildUseESRP: true - # Location of the MicroBuild output folder - # NOTE: There's something that relies on this being in the "default" source directory for tasks such as Signing to work properly. - microBuildOutputFolder: '$(Build.SourcesDirectory)' continueOnError: false steps: - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, 'true') }}: - # Needed to download the MicroBuild plugin nupkgs on Mac and Linux when nuget.exe is unavailable + # Installing .NET 8 is required to use the MicroBuild signing plugin on non-Windows platforms - task: UseDotNet@2 displayName: Install .NET 8.0 SDK for MicroBuild Plugin inputs: packageType: sdk version: 8.0.x - installationPath: ${{ parameters.microBuildOutputFolder }}/.dotnet - workingDirectory: ${{ parameters.microBuildOutputFolder }} + # Installing the SDK in a '.dotnet-microbuild' directory is required for signing. + # See target FindDotNetPathForMicroBuild in arcade/src/Microsoft.DotNet.Arcade.Sdk/tools/Sign.proj + # Do not remove '.dotnet-microbuild' from the path without changing the corresponding logic. + installationPath: $(Agent.TempDirectory)/.dotnet-microbuild condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) - script: | @@ -65,7 +64,7 @@ steps: ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca env: TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + MicroBuildOutputFolderOverride: $(Agent.TempDirectory)/MicroBuild SYSTEM_ACCESSTOKEN: $(System.AccessToken) continueOnError: ${{ parameters.continueOnError }} condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) @@ -85,7 +84,7 @@ steps: ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc env: TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + MicroBuildOutputFolderOverride: $(Agent.TempDirectory)/MicroBuild SYSTEM_ACCESSTOKEN: $(System.AccessToken) continueOnError: ${{ parameters.continueOnError }} condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/global.json b/global.json index fcfaa76410a..f51b87f8296 100644 --- a/global.json +++ b/global.json @@ -22,7 +22,7 @@ "perl": "5.38.2.2" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25513.2", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25555.6", "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.23255.2" } } From 1eb464c78b44bb1cf43215f86d4967cca0ae6481 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 12:12:41 +0000 Subject: [PATCH 56/57] [release/dev18.0] Source code updates from dotnet/dotnet (#19053) * Backflow from https://github.com/dotnet/dotnet / 8ee0cc0 build 289521 [[ commit created by automation ]] * Update dependencies from https://github.com/dotnet/dotnet build 289521 No dependency updates to commit * Update dependencies from https://github.com/dotnet/dotnet build 289695 No dependency updates to commit --------- Co-authored-by: dotnet-maestro[bot] Co-authored-by: Tomas Grosup --- eng/Version.Details.xml | 2 +- eng/Versions.props | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index cec28533549..6b9366b3249 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,6 +1,6 @@ - + https://github.com/dotnet/msbuild diff --git a/eng/Versions.props b/eng/Versions.props index ee0a41feffd..259447791b0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -12,13 +12,13 @@ - 2 - rc$(FSharpPreReleaseIteration) + + servicing$(FSharpPreReleaseIteration) 10 0 - 100 + 101 0 From 5cee16f7d917bc8878a0cbd15362c85fef2b403e Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:44:07 +0100 Subject: [PATCH 57/57] [release/dev18.0] Source code updates from dotnet/dotnet (#19088) * Backflow from https://github.com/dotnet/dotnet / f4701e0 build 290631 [[ commit created by automation ]] * Update dependencies from https://github.com/dotnet/dotnet build 290631 No dependency updates to commit --------- Co-authored-by: dotnet-maestro[bot] --- eng/Version.Details.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 6b9366b3249..b1a287a5e46 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,6 +1,6 @@ - + https://github.com/dotnet/msbuild