Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[main] Update dependencies from dotnet/efcore, dotnet/runtime #55010

Merged
merged 17 commits into from
Apr 17, 2024

Conversation

dotnet-maestro[bot]
Copy link
Contributor

@dotnet-maestro dotnet-maestro bot commented Apr 8, 2024

This pull request updates the following dependencies

From https://github.com/dotnet/efcore

  • Subscription: 8ce5251e-8269-419d-3b2a-08d8b8050dda
  • Build: 20240417.1
  • Date Produced: April 17, 2024 10:42:55 AM UTC
  • Commit: ef5f7a3d7208a5d6f3d82ceeb44da26b19446c83
  • Branch: refs/heads/main

From https://github.com/dotnet/runtime

  • Subscription: 32db3699-5666-45da-a1b7-08d8b804cd75
  • Build: 20240417.4
  • Date Produced: April 17, 2024 2:51:28 PM UTC
  • Commit: 3e569f5696ddf6c93e56eeaaf1703bb64e561f1b
  • Branch: refs/heads/main

…408.1

dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Design , Microsoft.EntityFrameworkCore.InMemory , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.SqlServer , Microsoft.EntityFrameworkCore.Tools
 From Version 9.0.0-preview.4.24205.3 -> To Version 9.0.0-preview.4.24208.1
@dotnet-maestro dotnet-maestro bot requested review from wtgodbe and a team as code owners April 8, 2024 12:06
@dotnet-issue-labeler dotnet-issue-labeler bot added the area-infrastructure Includes: MSBuild projects/targets, build scripts, CI, Installers and shared framework label Apr 8, 2024
Copy link
Contributor

@dotnet-policy-service dotnet-policy-service bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Auto-approving dependency update.

…0408.10

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24208.10
@dotnet-maestro dotnet-maestro bot changed the title [main] Update dependencies from dotnet/efcore [main] Update dependencies from dotnet/efcore, dotnet/runtime Apr 9, 2024
…0410.1

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24210.1
…410.1

dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Design , Microsoft.EntityFrameworkCore.InMemory , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.SqlServer , Microsoft.EntityFrameworkCore.Tools
 From Version 9.0.0-preview.4.24205.3 -> To Version 9.0.0-preview.4.24210.1
@eerhardt
Copy link
Member

Looks to be blocked by dotnet/runtime#100862. cc @sbomer

dotnet-maestro bot and others added 6 commits April 11, 2024 12:00
…0410.9

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24210.9
…0411.4

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24211.4
…0412.29

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24212.29
…0413.9

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24213.9
…0413.9

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24213.9
@sebastienros
Copy link
Member

/azp run

Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@sebastienros
Copy link
Member

The SDK was updated which fixed the first issue, but now it seems to be blocked on dotnet/runtime#101010

/cc @MichalStrehovsky

@MichalStrehovsky
Copy link
Member

The SDK was updated which fixed the first issue, but now it seems to be blocked on dotnet/runtime#101010

/cc @MichalStrehovsky

This is now fixed in runtime repo and we have an official build with the fix but looks like it's not flowing over.

…0415.19

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24215.19
…410.1

dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Design , Microsoft.EntityFrameworkCore.InMemory , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.SqlServer , Microsoft.EntityFrameworkCore.Tools
 From Version 9.0.0-preview.4.24205.3 -> To Version 9.0.0-preview.4.24210.1
@akoeplinger
Copy link
Member

akoeplinger commented Apr 16, 2024

New runtime build flowed but it's hitting ambiguous call compiler errors now, the new overloads were added in dotnet/runtime#100898

/cc @stephentoub @jozkee

@stephentoub
Copy link
Member

I'm not sure why this would be ambiguous. On my phone, but it's complaining about choosing between `string.Join(string?, params string?[])' and 'string.Join(string?, params ReadOnlySpan<string?>)' when passing in a StringValues as the arg. We'd said params span should win over params array. What version of the compiler is being used? @AlekseyTs?

@martincostello
Copy link
Member

Just hit this too with my own validation for dotnet/runtime#101010: martincostello/alexa-london-travel#1173 (comment)

@stephentoub
Copy link
Member

Just hit this too with my own validation for dotnet/runtime#101010: martincostello/alexa-london-travel#1173 (comment)

That's different... there you're somehow building and running against two different versions.

@martincostello
Copy link
Member

That's probably an artifact of my automation not being as smart as your own dependency flow and just taking the latest package versions with a common prefix of 9.0.0-preview.4 so they aren't necessarily coherent with respect to what's in the SDK and what's in the NuGet feed. Most of the time that doesn't matter for my simple canary validation.

@akoeplinger
Copy link
Member

akoeplinger commented Apr 16, 2024

What version of the compiler is being used?

Microsoft (R) Visual C# Compiler version 4.11.0-1.24214.4 (84c5476e)

…0415.19

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24215.19
@AlekseyTs
Copy link

@stephentoub I will be happy to look at the scenario if you provide a complete (and preferably minimal) repro code.

@AlekseyTs
Copy link

AlekseyTs commented Apr 16, 2024

For what it's worth, the following test succeeds for me:

        [Fact]
        public void Test()
        {
            string source = """
using System;

class Program
{
    static void Main()
    {
        var p = "b";

        System.Console.Write(Join(p));
        System.Console.Write(" ");
        System.Console.Write(Join(p, "a"));
    }
                
    public static string Join (string separator, params string[] value) => "array";

    public static string Join (string separator, params ReadOnlySpan<string> value) => "span";
}
""";
            CompileAndVerify(source, targetFramework: TargetFramework.Net80, expectedOutput: "span span", verify: Verification.Skipped).VerifyDiagnostics();
        }

@eerhardt
Copy link
Member

eerhardt commented Apr 16, 2024

@AlekseyTs - one of the places that is failing to compile is:

foreach (var header in context.Request.Headers)
{
await context.Response.WriteAsync($"'/' Got Header '{header.Key}': {string.Join(", ", header.Value)}\r\n");

var header is of type Microsoft.Extensions.Primitives.StringValues. So try changing your code above to:

        [Fact]
        public void Test()
        {
            string source = """
using System;

class Program
{
    static void Main()
    {
        var p = new StringValues("b");

        System.Console.Write(string.Join(", ", p));
    }
                
}
""";
            CompileAndVerify(source, targetFramework: TargetFramework.Net80, expectedOutput: "span span", verify: Verification.Skipped).VerifyDiagnostics();
        }

Note you will need to add a PackageReference to https://www.nuget.org/packages/Microsoft.Extensions.Primitives/ or copy the code from https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.Extensions.Primitives/src/StringValues.cs.

@AlekseyTs
Copy link

AlekseyTs commented Apr 16, 2024

@eerhardt What does the error message say? If it complains about methods that use different type for the first parameter, the ambiguity is expected as long as neither type is "better". It really doesn't matter what the params type in that case. Otherwise, I will be happy to look at the scenario if you provide a complete, standalone (all methods are in the repro), and preferably minimal repro code.

@eerhardt
Copy link
Member

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <LangVersion>preview</LangVersion>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>
using System;
using System.Collections;
using System.Diagnostics;
using System.Runtime.CompilerServices;

class Program
{
    static void Main()
    {
        var p = new StringValues("b");

        Console.Write(Join(", ", p));
    }

    public static string Join(string separator, params string[] value) => "array";

    public static string Join(string separator, params ReadOnlySpan<string> value) => "span";
}

/// <summary>
/// Represents zero/null, one, or many strings in an efficient way.
/// </summary>
[DebuggerDisplay("{ToString()}")]
[DebuggerTypeProxy(typeof(StringValuesDebugView))]
public readonly struct StringValues : IList<string?>, IReadOnlyList<string?>, IEquatable<StringValues>, IEquatable<string?>, IEquatable<string?[]?>
{
    /// <summary>
    /// A readonly instance of the <see cref="StringValues"/> struct whose value is an empty string array.
    /// </summary>
    /// <remarks>
    /// In application code, this field is most commonly used to safely represent a <see cref="StringValues"/> that has null string values.
    /// </remarks>
    public static readonly StringValues Empty = new StringValues(Array.Empty<string>());

    private readonly object? _values;

    /// <summary>
    /// Initializes a new instance of the <see cref="StringValues"/> structure using the specified string.
    /// </summary>
    /// <param name="value">A string value or <c>null</c>.</param>
    public StringValues(string? value)
    {
        _values = value;
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="StringValues"/> structure using the specified array of strings.
    /// </summary>
    /// <param name="values">A string array.</param>
    public StringValues(string?[]? values)
    {
        _values = values;
    }

    /// <summary>
    /// Defines an implicit conversion of a given string to a <see cref="StringValues"/>.
    /// </summary>
    /// <param name="value">A string to implicitly convert.</param>
    public static implicit operator StringValues(string? value)
    {
        return new StringValues(value);
    }

    /// <summary>
    /// Defines an implicit conversion of a given string array to a <see cref="StringValues"/>.
    /// </summary>
    /// <param name="values">A string array to implicitly convert.</param>
    public static implicit operator StringValues(string?[]? values)
    {
        return new StringValues(values);
    }

    /// <summary>
    /// Defines an implicit conversion of a given <see cref="StringValues"/> to a string, with multiple values joined as a comma separated string.
    /// </summary>
    /// <remarks>
    /// Returns <c>null</c> where <see cref="StringValues"/> has been initialized from an empty string array or is <see cref="StringValues.Empty"/>.
    /// </remarks>
    /// <param name="values">A <see cref="StringValues"/> to implicitly convert.</param>
    public static implicit operator string?(StringValues values)
    {
        return values.GetStringValue();
    }

    /// <summary>
    /// Defines an implicit conversion of a given <see cref="StringValues"/> to a string array.
    /// </summary>
    /// <param name="value">A <see cref="StringValues"/> to implicitly convert.</param>
    public static implicit operator string?[]?(StringValues value)
    {
        return value.GetArrayValue();
    }

    /// <summary>
    /// Gets the number of <see cref="string"/> elements contained in this <see cref="StringValues" />.
    /// </summary>
    public int Count
    {
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        get
        {
            // Take local copy of _values so type checks remain valid even if the StringValues is overwritten in memory
            object? value = _values;
            if (value is null)
            {
                return 0;
            }
            if (value is string)
            {
                return 1;
            }
            else
            {
                // Not string, not null, can only be string[]
                return Unsafe.As<string?[]>(value).Length;
            }
        }
    }

    bool ICollection<string?>.IsReadOnly => true;

    /// <summary>
    /// Gets the <see cref="string"/> at index.
    /// </summary>
    /// <value>The string at the specified index.</value>
    /// <param name="index">The zero-based index of the element to get.</param>
    /// <exception cref="NotSupportedException">Set operations are not supported on readonly <see cref="StringValues"/>.</exception>
    string? IList<string?>.this[int index]
    {
        get => this[index];
        set => throw new NotSupportedException();
    }

    /// <summary>
    /// Gets the <see cref="string"/> at index.
    /// </summary>
    /// <value>The string at the specified index.</value>
    /// <param name="index">The zero-based index of the element to get.</param>
    public string? this[int index]
    {
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        get
        {
            // Take local copy of _values so type checks remain valid even if the StringValues is overwritten in memory
            object? value = _values;
            if (value is string str)
            {
                if (index == 0)
                {
                    return str;
                }
            }
            else if (value != null)
            {
                // Not string, not null, can only be string[]
                return Unsafe.As<string?[]>(value)[index]; // may throw
            }

            return OutOfBounds(); // throws
        }
    }

    [MethodImpl(MethodImplOptions.NoInlining)]
    private static string OutOfBounds()
    {
        return Array.Empty<string>()[0]; // throws
    }

    /// <summary>
    /// Converts the value of the current <see cref="StringValues"/> object to its equivalent string representation, with multiple values joined as a comma separated string.
    /// </summary>
    /// <returns>A string representation of the value of the current <see cref="StringValues"/> object.</returns>
    public override string ToString()
    {
        return GetStringValue() ?? string.Empty;
    }

    private string? GetStringValue()
    {
        // Take local copy of _values so type checks remain valid even if the StringValues is overwritten in memory
        object? value = _values;
        if (value is string s)
        {
            return s;
        }
        else
        {
            return GetStringValueFromArray(value);
        }

        static string? GetStringValueFromArray(object? value)
        {
            if (value is null)
            {
                return null;
            }

            Debug.Assert(value is string[]);
            // value is not null or string, array, can only be string[]
            string?[] values = Unsafe.As<string?[]>(value);
            return values.Length switch
            {
                0 => null,
                1 => values[0],
                _ => GetJoinedStringValueFromArray(values),
            };
        }

        static string GetJoinedStringValueFromArray(string?[] values)
        {
            // Calculate final length
            int length = 0;
            for (int i = 0; i < values.Length; i++)
            {
                string? value = values[i];
                // Skip null and empty values
                if (value != null && value.Length > 0)
                {
                    if (length > 0)
                    {
                        // Add separator
                        length++;
                    }

                    length += value.Length;
                }
            }
#if NETCOREAPP
            // Create the new string
            return string.Create(length, values, (span, strings) =>
            {
                int offset = 0;
                // Skip null and empty values
                for (int i = 0; i < strings.Length; i++)
                {
                    string? value = strings[i];
                    if (value != null && value.Length > 0)
                    {
                        if (offset > 0)
                        {
                            // Add separator
                            span[offset] = ',';
                            offset++;
                        }

                        value.AsSpan().CopyTo(span.Slice(offset));
                        offset += value.Length;
                    }
                }
            });
#else
                var sb = new ValueStringBuilder(length);
                bool hasAdded = false;
                // Skip null and empty values
                for (int i = 0; i < values.Length; i++)
                {
                    string? value = values[i];
                    if (value != null && value.Length > 0)
                    {
                        if (hasAdded)
                        {
                            // Add separator
                            sb.Append(',');
                        }

                        sb.Append(value);
                        hasAdded = true;
                    }
                }

                return sb.ToString();
#endif
        }
    }

    /// <summary>
    /// Creates a string array from the current <see cref="StringValues"/> object.
    /// </summary>
    /// <returns>A string array represented by this instance.</returns>
    /// <remarks>
    /// <para>If the <see cref="StringValues"/> contains a single string internally, it is copied to a new array.</para>
    /// <para>If the <see cref="StringValues"/> contains an array internally it returns that array instance.</para>
    /// </remarks>
    public string?[] ToArray()
    {
        return GetArrayValue() ?? Array.Empty<string>();
    }

    private string?[]? GetArrayValue()
    {
        // Take local copy of _values so type checks remain valid even if the StringValues is overwritten in memory
        object? value = _values;
        if (value is string[] values)
        {
            return values;
        }
        else if (value != null)
        {
            // value not array, can only be string
            return new[] { Unsafe.As<string>(value) };
        }
        else
        {
            return null;
        }
    }

    /// <summary>
    /// Returns the zero-based index of the first occurrence of an item in the <see cref="StringValues" />.
    /// </summary>
    /// <param name="item">The string to locate in the <see cref="StringValues"></see>.</param>
    /// <returns>the zero-based index of the first occurrence of <paramref name="item" /> within the <see cref="StringValues"></see>, if found; otherwise, -1.</returns>
    int IList<string?>.IndexOf(string? item)
    {
        return IndexOf(item);
    }

    private int IndexOf(string? item)
    {
        // Take local copy of _values so type checks remain valid even if the StringValues is overwritten in memory
        object? value = _values;
        if (value is string[] values)
        {
            for (int i = 0; i < values.Length; i++)
            {
                if (string.Equals(values[i], item, StringComparison.Ordinal))
                {
                    return i;
                }
            }
            return -1;
        }

        if (value != null)
        {
            // value not array, can only be string
            return string.Equals(Unsafe.As<string>(value), item, StringComparison.Ordinal) ? 0 : -1;
        }

        return -1;
    }

    /// <summary>Determines whether a string is in the <see cref="StringValues" />.</summary>
    /// <param name="item">The <see cref="string"/> to locate in the <see cref="StringValues" />.</param>
    /// <returns>true if <paramref name="item">item</paramref> is found in the <see cref="StringValues" />; otherwise, false.</returns>
    bool ICollection<string?>.Contains(string? item)
    {
        return IndexOf(item) >= 0;
    }

    /// <summary>
    /// Copies the entire <see cref="StringValues" />to a string array, starting at the specified index of the target array.
    /// </summary>
    /// <param name="array">The one-dimensional <see cref="Array" /> that is the destination of the elements copied from. The <see cref="Array" /> must have zero-based indexing.</param>
    /// <param name="arrayIndex">The zero-based index in the destination array at which copying begins.</param>
    /// <exception cref="ArgumentNullException"><paramref name="array">array</paramref> is null.</exception>
    /// <exception cref="ArgumentOutOfRangeException"><paramref name="arrayIndex">arrayIndex</paramref> is less than 0.</exception>
    /// <exception cref="ArgumentException">The number of elements in the source <see cref="StringValues"></see> is greater than the available space from <paramref name="arrayIndex">arrayIndex</paramref> to the end of the destination <paramref name="array">array</paramref>.</exception>
    void ICollection<string?>.CopyTo(string?[] array, int arrayIndex)
    {
        CopyTo(array, arrayIndex);
    }

    private void CopyTo(string?[] array, int arrayIndex)
    {
        // Take local copy of _values so type checks remain valid even if the StringValues is overwritten in memory
        object? value = _values;
        if (value is string[] values)
        {
            Array.Copy(values, 0, array, arrayIndex, values.Length);
            return;
        }

        if (value != null)
        {
            ArgumentNullException.ThrowIfNull(array);

            if (arrayIndex < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(arrayIndex));
            }
            if (array.Length - arrayIndex < 1)
            {
                throw new ArgumentException(
                    $"'{nameof(array)}' is not long enough to copy all the items in the collection. Check '{nameof(arrayIndex)}' and '{nameof(array)}' length.");
            }

            // value not array, can only be string
            array[arrayIndex] = Unsafe.As<string>(value);
        }
    }

    void ICollection<string?>.Add(string? item) => throw new NotSupportedException();

    void IList<string?>.Insert(int index, string? item) => throw new NotSupportedException();

    bool ICollection<string?>.Remove(string? item) => throw new NotSupportedException();

    void IList<string?>.RemoveAt(int index) => throw new NotSupportedException();

    void ICollection<string?>.Clear() => throw new NotSupportedException();

    /// <summary>Retrieves an object that can iterate through the individual strings in this <see cref="StringValues" />.</summary>
    /// <returns>An enumerator that can be used to iterate through the <see cref="StringValues" />.</returns>
    public Enumerator GetEnumerator()
    {
        return new Enumerator(_values);
    }

    /// <inheritdoc cref="GetEnumerator()" />
    IEnumerator<string?> IEnumerable<string?>.GetEnumerator()
    {
        return GetEnumerator();
    }

    /// <inheritdoc cref="GetEnumerator()" />
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }

    /// <summary>
    /// Indicates whether the specified <see cref="StringValues"/> contains no string values.
    /// </summary>
    /// <param name="value">The <see cref="StringValues"/> to test.</param>
    /// <returns>true if <paramref name="value">value</paramref> contains a single null or empty string or an empty array; otherwise, false.</returns>
    public static bool IsNullOrEmpty(StringValues value)
    {
        object? data = value._values;
        if (data is null)
        {
            return true;
        }
        if (data is string[] values)
        {
            return values.Length switch
            {
                0 => true,
                1 => string.IsNullOrEmpty(values[0]),
                _ => false,
            };
        }
        else
        {
            // Not array, can only be string
            return string.IsNullOrEmpty(Unsafe.As<string>(data));
        }
    }

    /// <summary>
    /// Concatenates two specified instances of <see cref="StringValues"/>.
    /// </summary>
    /// <param name="values1">The first <see cref="StringValues"/> to concatenate.</param>
    /// <param name="values2">The second <see cref="StringValues"/> to concatenate.</param>
    /// <returns>The concatenation of <paramref name="values1"/> and <paramref name="values2"/>.</returns>
    public static StringValues Concat(StringValues values1, StringValues values2)
    {
        int count1 = values1.Count;
        int count2 = values2.Count;

        if (count1 == 0)
        {
            return values2;
        }

        if (count2 == 0)
        {
            return values1;
        }

        var combined = new string[count1 + count2];
        values1.CopyTo(combined, 0);
        values2.CopyTo(combined, count1);
        return new StringValues(combined);
    }

    /// <summary>
    /// Concatenates specified instance of <see cref="StringValues"/> with specified <see cref="string"/>.
    /// </summary>
    /// <param name="values">The <see cref="StringValues"/> to concatenate.</param>
    /// <param name="value">The <see cref="string" /> to concatenate.</param>
    /// <returns>The concatenation of <paramref name="values"/> and <paramref name="value"/>.</returns>
    public static StringValues Concat(in StringValues values, string? value)
    {
        if (value == null)
        {
            return values;
        }

        int count = values.Count;
        if (count == 0)
        {
            return new StringValues(value);
        }

        var combined = new string[count + 1];
        values.CopyTo(combined, 0);
        combined[count] = value;
        return new StringValues(combined);
    }

    /// <summary>
    /// Concatenates specified instance of <see cref="string"/> with specified <see cref="StringValues"/>.
    /// </summary>
    /// <param name="value">The <see cref="string" /> to concatenate.</param>
    /// <param name="values">The <see cref="StringValues"/> to concatenate.</param>
    /// <returns>The concatenation of <paramref name="values"/> and <paramref name="values"/>.</returns>
    public static StringValues Concat(string? value, in StringValues values)
    {
        if (value == null)
        {
            return values;
        }

        int count = values.Count;
        if (count == 0)
        {
            return new StringValues(value);
        }

        var combined = new string[count + 1];
        combined[0] = value;
        values.CopyTo(combined, 1);
        return new StringValues(combined);
    }

    /// <summary>
    /// Determines whether two specified <see cref="StringValues"/> objects have the same values in the same order.
    /// </summary>
    /// <param name="left">The first <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The second <see cref="StringValues"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is the same as the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool Equals(StringValues left, StringValues right)
    {
        int count = left.Count;

        if (count != right.Count)
        {
            return false;
        }

        for (int i = 0; i < count; i++)
        {
            if (left[i] != right[i])
            {
                return false;
            }
        }

        return true;
    }

    /// <summary>
    /// Determines whether two specified <see cref="StringValues"/> have the same values.
    /// </summary>
    /// <param name="left">The first <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The second <see cref="StringValues"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is the same as the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator ==(StringValues left, StringValues right)
    {
        return Equals(left, right);
    }

    /// <summary>
    /// Determines whether two specified <see cref="StringValues"/> have different values.
    /// </summary>
    /// <param name="left">The first <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The second <see cref="StringValues"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is different to the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator !=(StringValues left, StringValues right)
    {
        return !Equals(left, right);
    }

    /// <summary>
    /// Determines whether this instance and another specified <see cref="StringValues"/> object have the same values.
    /// </summary>
    /// <param name="other">The string to compare to this instance.</param>
    /// <returns><c>true</c> if the value of <paramref name="other"/> is the same as the value of this instance; otherwise, <c>false</c>.</returns>
    public bool Equals(StringValues other) => Equals(this, other);

    /// <summary>
    /// Determines whether the specified <see cref="string"/> and <see cref="StringValues"/> objects have the same values.
    /// </summary>
    /// <param name="left">The <see cref="string"/> to compare.</param>
    /// <param name="right">The <see cref="StringValues"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is the same as the value of <paramref name="right"/>; otherwise, <c>false</c>. If <paramref name="left"/> is <c>null</c>, the method returns <c>false</c>.</returns>
    public static bool Equals(string? left, StringValues right) => Equals(new StringValues(left), right);

    /// <summary>
    /// Determines whether the specified <see cref="StringValues"/> and <see cref="string"/> objects have the same values.
    /// </summary>
    /// <param name="left">The <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The <see cref="string"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is the same as the value of <paramref name="right"/>; otherwise, <c>false</c>. If <paramref name="right"/> is <c>null</c>, the method returns <c>false</c>.</returns>
    public static bool Equals(StringValues left, string? right) => Equals(left, new StringValues(right));

    /// <summary>
    /// Determines whether this instance and a specified <see cref="string"/>, have the same value.
    /// </summary>
    /// <param name="other">The <see cref="string"/> to compare to this instance.</param>
    /// <returns><c>true</c> if the value of <paramref name="other"/> is the same as this instance; otherwise, <c>false</c>. If <paramref name="other"/> is <c>null</c>, returns <c>false</c>.</returns>
    public bool Equals(string? other) => Equals(this, new StringValues(other));

    /// <summary>
    /// Determines whether the specified string array and <see cref="StringValues"/> objects have the same values.
    /// </summary>
    /// <param name="left">The string array to compare.</param>
    /// <param name="right">The <see cref="StringValues"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is the same as the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool Equals(string?[]? left, StringValues right) => Equals(new StringValues(left), right);

    /// <summary>
    /// Determines whether the specified <see cref="StringValues"/> and string array objects have the same values.
    /// </summary>
    /// <param name="left">The <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The string array to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is the same as the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool Equals(StringValues left, string?[]? right) => Equals(left, new StringValues(right));

    /// <summary>
    /// Determines whether this instance and a specified string array have the same values.
    /// </summary>
    /// <param name="other">The string array to compare to this instance.</param>
    /// <returns><c>true</c> if the value of <paramref name="other"/> is the same as this instance; otherwise, <c>false</c>.</returns>
    public bool Equals(string?[]? other) => Equals(this, new StringValues(other));

    /// <inheritdoc cref="Equals(StringValues, string)" />
    public static bool operator ==(StringValues left, string? right) => Equals(left, new StringValues(right));

    /// <summary>
    /// Determines whether the specified <see cref="StringValues"/> and <see cref="string"/> objects have different values.
    /// </summary>
    /// <param name="left">The <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The <see cref="string"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is different to the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator !=(StringValues left, string? right) => !Equals(left, new StringValues(right));

    /// <inheritdoc cref="Equals(string, StringValues)" />
    public static bool operator ==(string? left, StringValues right) => Equals(new StringValues(left), right);

    /// <summary>
    /// Determines whether the specified <see cref="string"/> and <see cref="StringValues"/> objects have different values.
    /// </summary>
    /// <param name="left">The <see cref="string"/> to compare.</param>
    /// <param name="right">The <see cref="StringValues"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is different to the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator !=(string? left, StringValues right) => !Equals(new StringValues(left), right);

    /// <inheritdoc cref="Equals(StringValues, string[])" />
    public static bool operator ==(StringValues left, string?[]? right) => Equals(left, new StringValues(right));

    /// <summary>
    /// Determines whether the specified <see cref="StringValues"/> and string array have different values.
    /// </summary>
    /// <param name="left">The <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The string array to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is different to the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator !=(StringValues left, string?[]? right) => !Equals(left, new StringValues(right));

    /// <inheritdoc cref="Equals(string[], StringValues)" />
    public static bool operator ==(string?[]? left, StringValues right) => Equals(new StringValues(left), right);

    /// <summary>
    /// Determines whether the specified string array and <see cref="StringValues"/> have different values.
    /// </summary>
    /// <param name="left">The string array to compare.</param>
    /// <param name="right">The <see cref="StringValues"/> to compare.</param>
    /// <returns><c>true</c> if the value of <paramref name="left"/> is different to the value of <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator !=(string?[]? left, StringValues right) => !Equals(new StringValues(left), right);

    /// <summary>
    /// Determines whether the specified <see cref="StringValues"/> and <see cref="object"/>, which must be a
    /// <see cref="StringValues"/>, <see cref="string"/>, or array of <see cref="string"/>, have the same value.
    /// </summary>
    /// <param name="left">The <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The <see cref="object"/> to compare.</param>
    /// <returns><c>true</c> if the <paramref name="left"/> object is equal to the <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator ==(StringValues left, object? right) => left.Equals(right);

    /// <summary>
    /// Determines whether the specified <see cref="StringValues"/> and <see cref="object"/>, which must be a
    /// <see cref="StringValues"/>, <see cref="string"/>, or array of <see cref="string"/>, have different values.
    /// </summary>
    /// <param name="left">The <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The <see cref="object"/> to compare.</param>
    /// <returns><c>true</c> if the <paramref name="left"/> object is equal to the <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator !=(StringValues left, object? right) => !left.Equals(right);

    /// <summary>
    /// Determines whether the specified <see cref="object"/>, which must be a
    /// <see cref="StringValues"/>, <see cref="string"/>, or array of <see cref="string"/>, and specified <see cref="StringValues"/>,  have the same value.
    /// </summary>
    /// <param name="left">The <see cref="StringValues"/> to compare.</param>
    /// <param name="right">The <see cref="object"/> to compare.</param>
    /// <returns><c>true</c> if the <paramref name="left"/> object is equal to the <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator ==(object? left, StringValues right) => right.Equals(left);

    /// <summary>
    /// Determines whether the specified <see cref="object"/> and <see cref="StringValues"/> object have the same values.
    /// </summary>
    /// <param name="left">The <see cref="object"/> to compare.</param>
    /// <param name="right">The <see cref="StringValues"/> to compare.</param>
    /// <returns><c>true</c> if the <paramref name="left"/> object is equal to the <paramref name="right"/>; otherwise, <c>false</c>.</returns>
    public static bool operator !=(object? left, StringValues right) => !right.Equals(left);

    /// <summary>
    /// Determines whether this instance and a specified object have the same value.
    /// </summary>
    /// <param name="obj">An object to compare with this object.</param>
    /// <returns><c>true</c> if the current object is equal to <paramref name="obj"/>; otherwise, <c>false</c>.</returns>
    public override bool Equals(object? obj)
    {
        if (obj == null)
        {
            return Equals(this, StringValues.Empty);
        }

        if (obj is string str)
        {
            return Equals(this, str);
        }

        if (obj is string[] array)
        {
            return Equals(this, array);
        }

        if (obj is StringValues stringValues)
        {
            return Equals(this, stringValues);
        }

        return false;
    }

    /// <summary>
    /// Returns a hash code for this instance.
    /// </summary>
    /// <returns>
    /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
    /// </returns>
    public override int GetHashCode()
    {
        object? value = _values;
        if (value is string[] values)
        {
            if (Count == 1)
            {
                return Unsafe.As<string>(this[0])?.GetHashCode() ?? Count.GetHashCode();
            }
            int hashCode = 0;
            for (int i = 0; i < values.Length; i++)
            {
                hashCode = Combine(hashCode, values[i]?.GetHashCode() ?? 0);
            }
            return hashCode;
        }
        else
        {
            return Unsafe.As<string>(value)?.GetHashCode() ?? Count.GetHashCode();
        }
    }

    private static int Combine(int h1, int h2)
    {
        // RyuJIT optimizes this to use the ROL instruction
        // Related GitHub pull request: https://github.com/dotnet/coreclr/pull/1830
        uint rol5 = ((uint)h1 << 5) | ((uint)h1 >> 27);
        return ((int)rol5 + h1) ^ h2;
    }

    /// <summary>
    /// Enumerates the string values of a <see cref="StringValues" />.
    /// </summary>
    public struct Enumerator : IEnumerator<string?>
    {
        private readonly string?[]? _values;
        private int _index;
        private string? _current;

        internal Enumerator(object? value)
        {
            if (value is string str)
            {
                _values = null;
                _current = str;
            }
            else
            {
                _current = null;
                _values = Unsafe.As<string?[]>(value);
            }
            _index = 0;
        }

        /// <summary>
        /// Instantiates an <see cref="Enumerator"/> using a <see cref="StringValues"/>.
        /// </summary>
        /// <param name="values">The <see cref="StringValues"/> to enumerate.</param>
        public Enumerator(ref StringValues values) : this(values._values)
        { }

        /// <summary>
        /// Advances the enumerator to the next element of the <see cref="StringValues"/>.
        /// </summary>
        /// <returns><see langword="true"/> if the enumerator was successfully advanced to the next element; <see langword="false"/> if the enumerator has passed the end of the <see cref="StringValues"/>.</returns>
        public bool MoveNext()
        {
            int index = _index;
            if (index < 0)
            {
                return false;
            }

            string?[]? values = _values;
            if (values != null)
            {
                if ((uint)index < (uint)values.Length)
                {
                    _index = index + 1;
                    _current = values[index];
                    return true;
                }

                _index = -1;
                return false;
            }

            _index = -1; // sentinel value
            return _current != null;
        }

        /// <summary>
        /// Gets the element at the current position of the enumerator.
        /// </summary>
        public string? Current => _current;

        object? IEnumerator.Current => _current;

        void IEnumerator.Reset()
        {
            throw new NotSupportedException();
        }

        /// <summary>
        /// Releases all resources used by the <see cref="Enumerator" />.
        /// </summary>
        public void Dispose()
        {
        }
    }

    private sealed class StringValuesDebugView(StringValues values)
    {
        [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
        public string?[] Items => values.ToArray();
    }
}

dotnet build results in:

❯ dotnet build
Restore complete (0.4s)
You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy
  ReproCompilerIssue failed with 1 error(s) (0.3s)
    C:\DotNetTest\ReproCompilerIssue\Program.cs(12,23): error CS0121: The call is ambiguous between the following methods or properties: 'Program.Join(string, params string[])' and 'Program.Join(string, params ReadOnlySpan<string>)'

Build failed with 1 error(s) in 1.1s

@AlekseyTs
Copy link

The public static string Join(string separator, params string[] value) is applicable in normal form because there is a conversion from StringValues to string[]. Given the arguments, params on this candidate doesn't matter. An expanded form is never considered when a normal form is applicable.

The public static string Join(string separator, params ReadOnlySpan<string> value) is applicable only in expanded form because there is no conversion from StringValues to ReadOnlySpan<string>, but there is a conversion from StringValues to string

We have a conflict between normal signature (string, string[]) and expanded signature (string, string), types are different. For the second types in the signatures string[] is not better than string and vise-versa. An ambiguity is expected.

@AlekseyTs
Copy link

Any params specific tie breaks are applied only when both candidates are in expanded form and the expanded signatures are equivalent. Only then better-ness between params can be used to disambiguate.

@AlekseyTs
Copy link

For example, if we drop public static implicit operator string?[]?(StringValues value), span overload will be called.

@jozkee
Copy link
Member

jozkee commented Apr 16, 2024

We have a conflict between normal signature (string, string[]) and expanded signature (string, string), types are different. For the second types in the signatures string[] is not better than string and vise-versa. An ambiguity is expected.

@AlekseyTs, both normal and expanded signatures comes from Join(string, params string[]), correct?
How is this ambiguous only when Join(string, params ReadOnlySpan<string>) is added?
How does signature resolution work without the latter said signature, and why it doesn't keep working like that after its added?

@AlekseyTs
Copy link

both normal and expanded signatures comes from Join(string, params string[]), correct?

No, incorrect. Please see #55010 (comment). Each applicable candidate contributes a signature

…417.1

dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.Design , Microsoft.EntityFrameworkCore.InMemory , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.SqlServer , Microsoft.EntityFrameworkCore.Tools
 From Version 9.0.0-preview.4.24205.3 -> To Version 9.0.0-preview.4.24217.1
…0417.1

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24217.1
…0417.4

Microsoft.Bcl.AsyncInterfaces , Microsoft.Bcl.TimeProvider , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.Diagnostics , Microsoft.Extensions.Diagnostics.Abstractions , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Hosting , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Http , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.NETCore.App.Ref , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.Platforms , System.Collections.Immutable , System.Composition , System.Configuration.ConfigurationManager , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , System.Diagnostics.PerformanceCounter , System.DirectoryServices.Protocols , System.IO.Hashing , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Reflection.Metadata , System.Resources.Extensions , System.Runtime.Caching , System.Security.Cryptography.Pkcs , System.Security.Cryptography.Xml , System.Security.Permissions , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.AccessControl , System.Threading.Channels , System.Threading.RateLimiting , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24206.3 -> To Version 9.0.0-preview.4.24217.4
@lewing
Copy link
Member

lewing commented Apr 17, 2024

I triggered the runtime flow with the params revert so hopefully this will unblock

@dotnet-maestro dotnet-maestro bot merged commit afbcecb into main Apr 17, 2024
28 checks passed
@dotnet-maestro dotnet-maestro bot deleted the darc-main-35d9d605-0671-45ef-845d-44420baa58be branch April 17, 2024 20:44
@dotnet-policy-service dotnet-policy-service bot added this to the 9.0-preview4 milestone Apr 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-infrastructure Includes: MSBuild projects/targets, build scripts, CI, Installers and shared framework Type: Dependency Update 🔼
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants