From b53179267a385e040a4127b0887d5d86287fd447 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Thu, 2 Apr 2020 20:30:18 +0000 Subject: [PATCH 01/17] Merged PR 6773: Fix routing policy exit destination **Description** An infinite loop can happen in routing if there is a catch all route with host name matching. This problem is caused by the DFA matcher builder giving an incorrect exit destination to policies. Currently the exit destination is the catch all state, so the policy will transition to itself when there is no match. It will run again, transition to itself again, run again, etc. This causes the policy to run forever. What should happen is the host name policy fails, it transitions to the final state with no candidates, and the route matcher does not match any endpoints. The browser is returned a 404 status. **Customer Impact** This problem shows up in this situation: 1. If a customer has configured a catch all route in their app 2. The catch all route has host matching 3. A browser makes a request to the server that matches the catch all route but doesn't match the host name The route matcher will run forever, using up a threadpool thread. When threadpool threads are exhausted the server will stop responding. **Regression?** No. **Risk** Medium. The fix is simple but route matching is complex, and routing runs with every request. --- .../Routing/src/Matching/DfaMatcherBuilder.cs | 7 ++-- .../HostMatcherPolicyIntegrationTestBase.cs | 32 +++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs index b5b3721b23..180d91a177 100644 --- a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs +++ b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; @@ -429,7 +429,10 @@ namespace Microsoft.AspNetCore.Routing.Matching candidates, endpointSelectorPolicies?.ToArray() ?? Array.Empty(), JumpTableBuilder.Build(currentDefaultDestination, currentExitDestination, pathEntries), - BuildPolicy(currentExitDestination, node.NodeBuilder, policyEntries)); + // Use the final exit destination when building the policy state. + // We don't want to use either of the current destinations because they refer routing states, + // and a policy state should never transition back to a routing state. + BuildPolicy(exitDestination, node.NodeBuilder, policyEntries)); return currentStateIndex; diff --git a/src/Http/Routing/test/UnitTests/Matching/HostMatcherPolicyIntegrationTestBase.cs b/src/Http/Routing/test/UnitTests/Matching/HostMatcherPolicyIntegrationTestBase.cs index e3cb4732b6..2feddaace0 100644 --- a/src/Http/Routing/test/UnitTests/Matching/HostMatcherPolicyIntegrationTestBase.cs +++ b/src/Http/Routing/test/UnitTests/Matching/HostMatcherPolicyIntegrationTestBase.cs @@ -273,6 +273,38 @@ namespace Microsoft.AspNetCore.Routing.Matching MatcherAssert.AssertMatch(httpContext, endpoint); } + [Fact] + public async Task Match_CatchAllRouteWithMatchingHost_Success() + { + // Arrange + var endpoint = CreateEndpoint("/{**path}", hosts: new string[] { "contoso.com", }); + + var matcher = CreateMatcher(endpoint); + var httpContext = CreateContext("/hello", "contoso.com"); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + MatcherAssert.AssertMatch(httpContext, endpoint, new { path = "hello" }); + } + + [Fact] + public async Task Match_CatchAllRouteFailureHost_NoMatch() + { + // Arrange + var endpoint = CreateEndpoint("/{**path}", hosts: new string[] { "contoso.com", }); + + var matcher = CreateMatcher(endpoint); + var httpContext = CreateContext("/hello", "nomatch.com"); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + MatcherAssert.AssertNotMatch(httpContext); + } + private static Matcher CreateMatcher(params RouteEndpoint[] endpoints) { var services = new ServiceCollection() From 23c02ef9a982258b0687aefb18df799d0b87ddde Mon Sep 17 00:00:00 2001 From: Pranav Krishnamoorthy Date: Tue, 14 Apr 2020 22:38:24 +0000 Subject: [PATCH 02/17] Merged PR 7269: Avoid caching JsonSerializer Avoid caching JsonSerializer --- .../src/NewtonsoftJsonOutputFormatter.cs | 50 ++++++++++++++++--- .../test/NewtonsoftJsonOutputFormatterTest.cs | 34 +++++++++++++ 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/src/Mvc/Mvc.NewtonsoftJson/src/NewtonsoftJsonOutputFormatter.cs b/src/Mvc/Mvc.NewtonsoftJson/src/NewtonsoftJsonOutputFormatter.cs index b6889c1c2d..e98d4477bd 100644 --- a/src/Mvc/Mvc.NewtonsoftJson/src/NewtonsoftJsonOutputFormatter.cs +++ b/src/Mvc/Mvc.NewtonsoftJson/src/NewtonsoftJsonOutputFormatter.cs @@ -20,10 +20,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters { private readonly IArrayPool _charPool; private readonly MvcOptions _mvcOptions; - - // Perf: JsonSerializers are relatively expensive to create, and are thread safe. We cache - // the serializer and invalidate it when the settings change. - private JsonSerializer _serializer; + private JsonSerializerSettings _serializerSettings; /// /// Initializes a new instance. @@ -99,12 +96,13 @@ namespace Microsoft.AspNetCore.Mvc.Formatters /// The used during serialization and deserialization. protected virtual JsonSerializer CreateJsonSerializer() { - if (_serializer == null) + if (_serializerSettings == null) { - _serializer = JsonSerializer.Create(SerializerSettings); + // Lock the serializer settings once the first serialization has been initiated. + _serializerSettings = ShallowCopy(SerializerSettings); } - return _serializer; + return JsonSerializer.Create(_serializerSettings); } /// @@ -166,5 +164,43 @@ namespace Microsoft.AspNetCore.Mvc.Formatters } } } + + private static JsonSerializerSettings ShallowCopy(JsonSerializerSettings settings) + { + var copiedSettings = new JsonSerializerSettings + { + FloatParseHandling = settings.FloatParseHandling, + FloatFormatHandling = settings.FloatFormatHandling, + DateParseHandling = settings.DateParseHandling, + DateTimeZoneHandling = settings.DateTimeZoneHandling, + DateFormatHandling = settings.DateFormatHandling, + Formatting = settings.Formatting, + MaxDepth = settings.MaxDepth, + DateFormatString = settings.DateFormatString, + Context = settings.Context, + Error = settings.Error, + SerializationBinder = settings.SerializationBinder, + TraceWriter = settings.TraceWriter, + Culture = settings.Culture, + ReferenceResolverProvider = settings.ReferenceResolverProvider, + EqualityComparer = settings.EqualityComparer, + ContractResolver = settings.ContractResolver, + ConstructorHandling = settings.ConstructorHandling, + TypeNameAssemblyFormatHandling = settings.TypeNameAssemblyFormatHandling, + MetadataPropertyHandling = settings.MetadataPropertyHandling, + TypeNameHandling = settings.TypeNameHandling, + PreserveReferencesHandling = settings.PreserveReferencesHandling, + Converters = settings.Converters, + DefaultValueHandling = settings.DefaultValueHandling, + NullValueHandling = settings.NullValueHandling, + ObjectCreationHandling = settings.ObjectCreationHandling, + MissingMemberHandling = settings.MissingMemberHandling, + ReferenceLoopHandling = settings.ReferenceLoopHandling, + CheckAdditionalContent = settings.CheckAdditionalContent, + StringEscapeHandling = settings.StringEscapeHandling, + }; + + return copiedSettings; + } } } diff --git a/src/Mvc/Mvc.NewtonsoftJson/test/NewtonsoftJsonOutputFormatterTest.cs b/src/Mvc/Mvc.NewtonsoftJson/test/NewtonsoftJsonOutputFormatterTest.cs index a04c79c638..67fdde1b22 100644 --- a/src/Mvc/Mvc.NewtonsoftJson/test/NewtonsoftJsonOutputFormatterTest.cs +++ b/src/Mvc/Mvc.NewtonsoftJson/test/NewtonsoftJsonOutputFormatterTest.cs @@ -324,6 +324,40 @@ namespace Microsoft.AspNetCore.Mvc.Formatters stream.Verify(v => v.Flush(), Times.Never()); } + [Fact] + public async Task SerializingWithPreserveReferenceHandling() + { + // Arrange + var expected = "{\"$id\":\"1\",\"fullName\":\"John\",\"age\":35}"; + var user = new User { FullName = "John", age = 35 }; + + var settings = new JsonSerializerSettings + { + ContractResolver = new DefaultContractResolver + { + NamingStrategy = new CamelCaseNamingStrategy(), + }, + PreserveReferencesHandling = PreserveReferencesHandling.All, + }; + var formatter = new TestableJsonOutputFormatter(settings); + + for (var i = 0; i < 3; i++) + { + // Act + var context = GetOutputFormatterContext(user, typeof(User)); + await formatter.WriteResponseBodyAsync(context, Encoding.UTF8); + + // Assert + var body = context.HttpContext.Response.Body; + + Assert.NotNull(body); + body.Position = 0; + + var content = new StreamReader(body, Encoding.UTF8).ReadToEnd(); + Assert.Equal(expected, content); + } + } + private class TestableJsonOutputFormatter : NewtonsoftJsonOutputFormatter { public TestableJsonOutputFormatter(JsonSerializerSettings serializerSettings) From c53e15e8339deaf278e975e9bc27a0a84d5b354f Mon Sep 17 00:00:00 2001 From: DotNet Bot Date: Wed, 15 Apr 2020 18:12:52 +0000 Subject: [PATCH 03/17] Merged PR 6988: [internal/release/3.1] Update dependencies from 1 repositories This pull request updates the following dependencies [marker]: <> (Begin:7bf32a0c-3505-43af-42b0-08d79559e63d) ## From https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - **Subscription**: 7bf32a0c-3505-43af-42b0-08d79559e63d - **Build**: 20200414.7 - **Date Produced**: 4/15/2020 5:37 AM - **Commit**: 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 - **Branch**: refs/heads/internal/release/3.1 - **Updates**: - **Microsoft.AspNetCore.Mvc.Razor.Extensions**: from 3.1.3 to 3.1.4 - **Microsoft.AspNetCore.Razor.Language**: from 3.1.3 to 3.1.4 - **Microsoft.CodeAnalysis.Razor**: from 3.1.3 to 3.1.4 - **Microsoft.NET.Sdk.Razor**: from 3.1.3 to 3.1.4 [marker]: <> (End:7bf32a0c-3505-43af-42b0-08d79559e63d) [marker]: <> (Begin:Coherency Updates) ## Coherency Updates The following updates ensure that dependencies with a *CoherentParentDependency* attribute were produced in a build used as input to the parent dependency's build. See [Dependency Description Format](https://github.com/dotnet/arcade/blob/master/Documentation/DependencyDescriptionFormat.md#dependency-description-overview) - **Microsoft.AspNetCore.Analyzer.Testing**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.AspNetCore.BenchmarkRunner.Sources**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.Extensions.ActivatorUtilities.Sources**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.Extensions.CommandLineUtils.Sources**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.Extensions.HashCodeCombiner.Sources**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.Extensions.HostFactoryResolver.Sources**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.Extensions.Logging.Testing**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.Extensions.ParameterDefaultValue.Sources**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.Extensions.TypeNameHelper.Sources**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.Extensions.ValueStopwatch.Sources**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.NETCore.App.Internal**: from 3.1.4-servicing.20181.2 to 3.1.4-servicing.20202.1 (parent: Microsoft.Extensions.Logging) - **Internal.AspNetCore.Analyzers**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.20202.2 (parent: Microsoft.EntityFrameworkCore) - **Microsoft.AspNetCore.Testing**: from 3.1.4-servicing.20181.5 to 3.1.4-servicing.202 ... --- NuGet.config | 6 ++--- eng/Version.Details.xml | 50 ++++++++++++++++++++--------------------- eng/Versions.props | 34 ++++++++++++++-------------- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/NuGet.config b/NuGet.config index d3a2804e2a..bb31b0bcf9 100644 --- a/NuGet.config +++ b/NuGet.config @@ -3,11 +3,11 @@ - - - + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 94b3b13f14..6bd969ff7c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -13,21 +13,21 @@ https://github.com/aspnet/Blazor 7868699de745fd30a654c798a99dc541b77b95c0 - - https://github.com/dotnet/aspnetcore-tooling - 5ecfad7e0515ee580f7e1b51d1558fc2a1d27ee5 + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling + 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 - - https://github.com/dotnet/aspnetcore-tooling - 5ecfad7e0515ee580f7e1b51d1558fc2a1d27ee5 + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling + 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 - - https://github.com/dotnet/aspnetcore-tooling - 5ecfad7e0515ee580f7e1b51d1558fc2a1d27ee5 + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling + 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 - - https://github.com/dotnet/aspnetcore-tooling - 5ecfad7e0515ee580f7e1b51d1558fc2a1d27ee5 + + https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling + 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 https://github.com/dotnet/efcore @@ -57,15 +57,15 @@ https://github.com/dotnet/efcore 7c74e87eccf3a1785ff73d77b769226e6b2ab458 - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d @@ -85,7 +85,7 @@ https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d @@ -177,7 +177,7 @@ https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d @@ -189,7 +189,7 @@ https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d @@ -237,7 +237,7 @@ https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d @@ -261,7 +261,7 @@ https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d @@ -269,11 +269,11 @@ https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d @@ -389,7 +389,7 @@ https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - + https://github.com/dotnet/core-setup 57d5bbb58f17a8cb3a82c81839c9379b4fcfe0d8 @@ -409,7 +409,7 @@ https://github.com/dotnet/corefx 282d5b9f83e7a4e7fe0cef268f4f8f85e6162510 - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d @@ -425,7 +425,7 @@ https://github.com/dotnet/arcade 1a55276ab9d16792cec595ba870df39a9d97d5ca - + https://github.com/dotnet/extensions cf044102f01a3402a680fa58cabea8a9ca53aa3d diff --git a/eng/Versions.props b/eng/Versions.props index 082dc20102..c560f7df58 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -67,7 +67,7 @@ 3.4.1-beta4-20127-10 3.1.4 - 3.1.4-servicing.20181.2 + 3.1.4-servicing.20202.1 3.1.0 3.1.4 2.1.0 @@ -99,16 +99,16 @@ 3.1.0-preview4.19605.1 - 3.1.4-servicing.20181.5 - 3.1.4-servicing.20181.5 - 3.1.4-servicing.20181.5 - 3.1.4-servicing.20181.5 - 3.1.4-servicing.20181.5 + 3.1.4-servicing.20202.2 + 3.1.4-servicing.20202.2 + 3.1.4-servicing.20202.2 + 3.1.4-servicing.20202.2 + 3.1.4-servicing.20202.2 3.1.4 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20181.5 + 3.1.4-servicing.20202.2 3.1.4 3.1.4 3.1.4 @@ -131,10 +131,10 @@ 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20181.5 + 3.1.4-servicing.20202.2 3.1.4 3.1.4 - 3.1.4-servicing.20181.5 + 3.1.4-servicing.20202.2 3.1.4 3.1.4 3.1.4 @@ -146,16 +146,16 @@ 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20181.5 + 3.1.4-servicing.20202.2 3.1.4 3.1.4 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20181.5 + 3.1.4-servicing.20202.2 3.1.4 - 3.1.4-servicing.20181.5 - 3.1.4-servicing.20181.5 + 3.1.4-servicing.20202.2 + 3.1.4-servicing.20202.2 3.1.4 3.1.0-rtm.19565.4 3.1.4 @@ -168,10 +168,10 @@ 3.1.4 3.1.4 - 3.1.3 - 3.1.3 - 3.1.3 - 3.1.3 + 3.1.4 + 3.1.4 + 3.1.4 + 3.1.4 - - - - + + + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 6bd969ff7c..a497b1b1d0 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -30,264 +30,264 @@ 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 - https://github.com/dotnet/efcore - 7c74e87eccf3a1785ff73d77b769226e6b2ab458 + https://dev.azure.com/dnceng/internal/_git/dotnet-efcore + 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b - https://github.com/dotnet/efcore - 7c74e87eccf3a1785ff73d77b769226e6b2ab458 + https://dev.azure.com/dnceng/internal/_git/dotnet-efcore + 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b - https://github.com/dotnet/efcore - 7c74e87eccf3a1785ff73d77b769226e6b2ab458 + https://dev.azure.com/dnceng/internal/_git/dotnet-efcore + 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b - https://github.com/dotnet/efcore - 7c74e87eccf3a1785ff73d77b769226e6b2ab458 + https://dev.azure.com/dnceng/internal/_git/dotnet-efcore + 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b - https://github.com/dotnet/efcore - 7c74e87eccf3a1785ff73d77b769226e6b2ab458 + https://dev.azure.com/dnceng/internal/_git/dotnet-efcore + 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b - https://github.com/dotnet/efcore - 7c74e87eccf3a1785ff73d77b769226e6b2ab458 + https://dev.azure.com/dnceng/internal/_git/dotnet-efcore + 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b - https://github.com/dotnet/efcore - 7c74e87eccf3a1785ff73d77b769226e6b2ab458 + https://dev.azure.com/dnceng/internal/_git/dotnet-efcore + 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 - - https://github.com/dotnet/corefx - 0f7f38c4fd323b26da10cce95f857f77f0f09b48 + + https://dev.azure.com/dnceng/internal/_git/dotnet-corefx + c4164928b270ee2369808ab347d33423ef765216 https://github.com/dotnet/corefx @@ -317,17 +317,17 @@ https://github.com/dotnet/corefx 8a3ffed558ddf943c1efa87d693227722d6af094 - - https://github.com/dotnet/corefx - 0f7f38c4fd323b26da10cce95f857f77f0f09b48 + + https://dev.azure.com/dnceng/internal/_git/dotnet-corefx + c4164928b270ee2369808ab347d33423ef765216 - - https://github.com/dotnet/corefx - 0f7f38c4fd323b26da10cce95f857f77f0f09b48 + + https://dev.azure.com/dnceng/internal/_git/dotnet-corefx + c4164928b270ee2369808ab347d33423ef765216 - - https://github.com/dotnet/corefx - 0f7f38c4fd323b26da10cce95f857f77f0f09b48 + + https://dev.azure.com/dnceng/internal/_git/dotnet-corefx + c4164928b270ee2369808ab347d33423ef765216 https://github.com/dotnet/corefx @@ -357,41 +357,41 @@ https://github.com/dotnet/corefx 0f7f38c4fd323b26da10cce95f857f77f0f09b48 - - https://github.com/dotnet/corefx - 0f7f38c4fd323b26da10cce95f857f77f0f09b48 + + https://dev.azure.com/dnceng/internal/_git/dotnet-corefx + c4164928b270ee2369808ab347d33423ef765216 - https://github.com/dotnet/corefx - 282d5b9f83e7a4e7fe0cef268f4f8f85e6162510 + https://dev.azure.com/dnceng/internal/_git/dotnet-corefx + c4164928b270ee2369808ab347d33423ef765216 - - https://github.com/dotnet/corefx - 0f7f38c4fd323b26da10cce95f857f77f0f09b48 + + https://dev.azure.com/dnceng/internal/_git/dotnet-corefx + c4164928b270ee2369808ab347d33423ef765216 https://github.com/dotnet/corefx 0f7f38c4fd323b26da10cce95f857f77f0f09b48 - https://github.com/dotnet/core-setup - 57d5bbb58f17a8cb3a82c81839c9379b4fcfe0d8 + https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup + 009061358022e51c62bef1daa3535a08ca122750 - https://github.com/dotnet/core-setup - 57d5bbb58f17a8cb3a82c81839c9379b4fcfe0d8 + https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup + 009061358022e51c62bef1daa3535a08ca122750 https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - - https://github.com/dotnet/core-setup - 57d5bbb58f17a8cb3a82c81839c9379b4fcfe0d8 + + https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup + 009061358022e51c62bef1daa3535a08ca122750 @@ -406,12 +406,12 @@ - https://github.com/dotnet/corefx - 282d5b9f83e7a4e7fe0cef268f4f8f85e6162510 + https://dev.azure.com/dnceng/internal/_git/dotnet-corefx + c4164928b270ee2369808ab347d33423ef765216 - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 https://github.com/dotnet/arcade @@ -425,13 +425,13 @@ https://github.com/dotnet/arcade 1a55276ab9d16792cec595ba870df39a9d97d5ca - - https://github.com/dotnet/extensions - cf044102f01a3402a680fa58cabea8a9ca53aa3d + + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions + 7cc2a109d98493cf617de56709ec188fa5cd3fc1 https://github.com/dotnet/roslyn d8180a5ecafb92adcfbfe8cf9199eb23be1a1ccf - \ No newline at end of file + diff --git a/eng/Versions.props b/eng/Versions.props index c560f7df58..b3f174d11d 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -67,12 +67,12 @@ 3.4.1-beta4-20127-10 3.1.4 - 3.1.4-servicing.20202.1 + 3.1.4-servicing.20214.5 3.1.0 3.1.4 2.1.0 - 1.1.0 + 1.1.1 4.7.0 4.7.0 4.7.0 @@ -80,9 +80,9 @@ 4.7.0 4.7.0 4.7.1 - 4.7.0 - 4.7.0 - 1.8.0 + 4.7.1 + 4.7.1 + 1.8.1 4.7.1 4.7.0 4.7.0 @@ -90,25 +90,25 @@ 4.7.0 4.7.0 4.7.0 - 4.7.0 + 4.7.1 4.7.2 - 4.7.0 + 4.7.1 4.7.0 3.1.1 3.1.0-preview4.19605.1 - 3.1.4-servicing.20202.2 - 3.1.4-servicing.20202.2 - 3.1.4-servicing.20202.2 - 3.1.4-servicing.20202.2 - 3.1.4-servicing.20202.2 + 3.1.4-servicing.20214.9 + 3.1.4-servicing.20214.9 + 3.1.4-servicing.20214.9 + 3.1.4-servicing.20214.9 + 3.1.4-servicing.20214.9 3.1.4 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20202.2 + 3.1.4-servicing.20214.9 3.1.4 3.1.4 3.1.4 @@ -131,10 +131,10 @@ 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20202.2 + 3.1.4-servicing.20214.9 3.1.4 3.1.4 - 3.1.4-servicing.20202.2 + 3.1.4-servicing.20214.9 3.1.4 3.1.4 3.1.4 @@ -146,16 +146,16 @@ 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20202.2 + 3.1.4-servicing.20214.9 3.1.4 3.1.4 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20202.2 + 3.1.4-servicing.20214.9 3.1.4 - 3.1.4-servicing.20202.2 - 3.1.4-servicing.20202.2 + 3.1.4-servicing.20214.9 + 3.1.4-servicing.20214.9 3.1.4 3.1.0-rtm.19565.4 3.1.4 @@ -271,4 +271,4 @@ https://dotnetcli.blob.core.windows.net/dotnet/ https://dotnetclimsrc.blob.core.windows.net/dotnet/ - \ No newline at end of file + From 67e04394e98d5bfa6a5684d471a72fcbe30fd587 Mon Sep 17 00:00:00 2001 From: DotNet Bot Date: Thu, 16 Apr 2020 17:36:54 +0000 Subject: [PATCH 05/17] Merged PR 7373: [internal/release/3.1] Update dependencies from 1 repositories This pull request updates the following dependencies [marker]: <> (Begin:7bf32a0c-3505-43af-42b0-08d79559e63d) ## From https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - **Subscription**: 7bf32a0c-3505-43af-42b0-08d79559e63d - **Build**: 20200415.2 - **Date Produced**: 4/15/2020 6:12 PM - **Commit**: a49970f2f15efb27b91541bb4b94581693c92b8d - **Branch**: refs/heads/internal/release/3.1 - **Updates**: - **Microsoft.AspNetCore.Mvc.Razor.Extensions**: from 3.1.4 to 3.1.4 - **Microsoft.AspNetCore.Razor.Language**: from 3.1.4 to 3.1.4 - **Microsoft.CodeAnalysis.Razor**: from 3.1.4 to 3.1.4 - **Microsoft.NET.Sdk.Razor**: from 3.1.4 to 3.1.4 [marker]: <> (End:7bf32a0c-3505-43af-42b0-08d79559e63d) --- NuGet.config | 2 +- eng/Version.Details.xml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/NuGet.config b/NuGet.config index bf2ad9f773..923a78b74b 100644 --- a/NuGet.config +++ b/NuGet.config @@ -8,7 +8,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a497b1b1d0..8783b81196 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -15,19 +15,19 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 + a49970f2f15efb27b91541bb4b94581693c92b8d https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 + a49970f2f15efb27b91541bb4b94581693c92b8d https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 + a49970f2f15efb27b91541bb4b94581693c92b8d https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - 06ade7a064cbdcf80aa6457541c1a99b7e39b5a8 + a49970f2f15efb27b91541bb4b94581693c92b8d https://dev.azure.com/dnceng/internal/_git/dotnet-efcore From 2cad2edc3f46d0fef3323f4f785a4afa5a2d7e3b Mon Sep 17 00:00:00 2001 From: Will Godbe Date: Tue, 21 Apr 2020 20:27:42 +0000 Subject: [PATCH 06/17] Merged PR 7488: Downgrade WinHttpHandler to 4.7.0 --- eng/Version.Details.xml | 6 +++--- eng/Versions.props | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8783b81196..f87fe07b61 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -317,9 +317,9 @@ https://github.com/dotnet/corefx 8a3ffed558ddf943c1efa87d693227722d6af094 - - https://dev.azure.com/dnceng/internal/_git/dotnet-corefx - c4164928b270ee2369808ab347d33423ef765216 + + https://github.com/dotnet/corefx + 0f7f38c4fd323b26da10cce95f857f77f0f09b48 https://dev.azure.com/dnceng/internal/_git/dotnet-corefx diff --git a/eng/Versions.props b/eng/Versions.props index b3f174d11d..4e18dc4295 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -80,7 +80,7 @@ 4.7.0 4.7.0 4.7.1 - 4.7.1 + 4.7.0 4.7.1 1.8.1 4.7.1 From 335829259d3ae9b3c77b64289ef92d9ecfa1653e Mon Sep 17 00:00:00 2001 From: Will Godbe Date: Wed, 22 Apr 2020 20:52:23 +0000 Subject: [PATCH 07/17] Merged PR 7529: Update dependencies from efcore Update dependencies from efcore --- NuGet.config | 8 +- eng/Version.Details.xml | 178 ++++++++++++++++++++-------------------- eng/Versions.props | 26 +++--- 3 files changed, 106 insertions(+), 106 deletions(-) diff --git a/NuGet.config b/NuGet.config index 923a78b74b..bcf6930145 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,10 +4,10 @@ - - - - + + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index f87fe07b61..674880a1b1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -31,263 +31,263 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-efcore - 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b + 0e7e329a24deae8d22ccf9829957dc8cb10152c5 https://dev.azure.com/dnceng/internal/_git/dotnet-efcore - 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b + 0e7e329a24deae8d22ccf9829957dc8cb10152c5 https://dev.azure.com/dnceng/internal/_git/dotnet-efcore - 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b + 0e7e329a24deae8d22ccf9829957dc8cb10152c5 https://dev.azure.com/dnceng/internal/_git/dotnet-efcore - 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b + 0e7e329a24deae8d22ccf9829957dc8cb10152c5 https://dev.azure.com/dnceng/internal/_git/dotnet-efcore - 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b + 0e7e329a24deae8d22ccf9829957dc8cb10152c5 https://dev.azure.com/dnceng/internal/_git/dotnet-efcore - 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b + 0e7e329a24deae8d22ccf9829957dc8cb10152c5 https://dev.azure.com/dnceng/internal/_git/dotnet-efcore - 87b24bd1cdd8eaa0851dc0c525c8f12926321c3b + 0e7e329a24deae8d22ccf9829957dc8cb10152c5 - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://dev.azure.com/dnceng/internal/_git/dotnet-corefx - c4164928b270ee2369808ab347d33423ef765216 + 059a4a19e602494bfbed473dbbb18f2dbfbd0878 https://github.com/dotnet/corefx @@ -323,11 +323,11 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-corefx - c4164928b270ee2369808ab347d33423ef765216 + 059a4a19e602494bfbed473dbbb18f2dbfbd0878 https://dev.azure.com/dnceng/internal/_git/dotnet-corefx - c4164928b270ee2369808ab347d33423ef765216 + 059a4a19e602494bfbed473dbbb18f2dbfbd0878 https://github.com/dotnet/corefx @@ -359,15 +359,15 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-corefx - c4164928b270ee2369808ab347d33423ef765216 + 059a4a19e602494bfbed473dbbb18f2dbfbd0878 https://dev.azure.com/dnceng/internal/_git/dotnet-corefx - c4164928b270ee2369808ab347d33423ef765216 + 059a4a19e602494bfbed473dbbb18f2dbfbd0878 https://dev.azure.com/dnceng/internal/_git/dotnet-corefx - c4164928b270ee2369808ab347d33423ef765216 + 059a4a19e602494bfbed473dbbb18f2dbfbd0878 https://github.com/dotnet/corefx @@ -375,7 +375,7 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup - 009061358022e51c62bef1daa3535a08ca122750 + 0c2e69caa609d5164e16df91d6d646eb9ed74640 https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup - 009061358022e51c62bef1daa3535a08ca122750 + 0c2e69caa609d5164e16df91d6d646eb9ed74640 https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - + https://dev.azure.com/dnceng/internal/_git/dotnet-core-setup - 009061358022e51c62bef1daa3535a08ca122750 + 0c2e69caa609d5164e16df91d6d646eb9ed74640 @@ -407,11 +407,11 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-corefx - c4164928b270ee2369808ab347d33423ef765216 + 059a4a19e602494bfbed473dbbb18f2dbfbd0878 - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://github.com/dotnet/arcade @@ -425,9 +425,9 @@ https://github.com/dotnet/arcade 1a55276ab9d16792cec595ba870df39a9d97d5ca - + https://dev.azure.com/dnceng/internal/_git/dotnet-extensions - 7cc2a109d98493cf617de56709ec188fa5cd3fc1 + 3b1f2b7cd3f3a3de66e94c73435e7c6deac775bb https://github.com/dotnet/roslyn diff --git a/eng/Versions.props b/eng/Versions.props index 4e18dc4295..ea87e5032f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -67,7 +67,7 @@ 3.4.1-beta4-20127-10 3.1.4 - 3.1.4-servicing.20214.5 + 3.1.4-servicing.20221.3 3.1.0 3.1.4 2.1.0 @@ -99,16 +99,16 @@ 3.1.0-preview4.19605.1 - 3.1.4-servicing.20214.9 - 3.1.4-servicing.20214.9 - 3.1.4-servicing.20214.9 - 3.1.4-servicing.20214.9 - 3.1.4-servicing.20214.9 + 3.1.4-servicing.20221.11 + 3.1.4-servicing.20221.11 + 3.1.4-servicing.20221.11 + 3.1.4-servicing.20221.11 + 3.1.4-servicing.20221.11 3.1.4 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20214.9 + 3.1.4-servicing.20221.11 3.1.4 3.1.4 3.1.4 @@ -131,10 +131,10 @@ 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20214.9 + 3.1.4-servicing.20221.11 3.1.4 3.1.4 - 3.1.4-servicing.20214.9 + 3.1.4-servicing.20221.11 3.1.4 3.1.4 3.1.4 @@ -146,16 +146,16 @@ 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20214.9 + 3.1.4-servicing.20221.11 3.1.4 3.1.4 3.1.4 3.1.4 3.1.4 - 3.1.4-servicing.20214.9 + 3.1.4-servicing.20221.11 3.1.4 - 3.1.4-servicing.20214.9 - 3.1.4-servicing.20214.9 + 3.1.4-servicing.20221.11 + 3.1.4-servicing.20221.11 3.1.4 3.1.0-rtm.19565.4 3.1.4 From 35628a67800a3e269eb375989d2fffa9d67b8dbf Mon Sep 17 00:00:00 2001 From: DotNet Bot Date: Wed, 22 Apr 2020 23:59:27 +0000 Subject: [PATCH 08/17] Merged PR 7537: [internal/release/3.1] Update dependencies from 1 repositories This pull request updates the following dependencies [marker]: <> (Begin:Coherency Updates) ## Coherency Updates The following updates ensure that dependencies with a *CoherentParentDependency* attribute were produced in a build used as input to the parent dependency's build. See [Dependency Description Format](https://github.com/dotnet/arcade/blob/master/Documentation/DependencyDescriptionFormat.md#dependency-description-overview) - **System.Net.Http.WinHttpHandler**: from 4.7.0 to 4.7.1 (parent: Microsoft.NETCore.App.Runtime.win-x64) [marker]: <> (End:Coherency Updates) [marker]: <> (Begin:7bf32a0c-3505-43af-42b0-08d79559e63d) ## From https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - **Subscription**: 7bf32a0c-3505-43af-42b0-08d79559e63d - **Build**: 20200422.2 - **Date Produced**: 4/22/2020 7:47 PM - **Commit**: a8242d79df31dbff528c185dd62c290b7cc262de - **Branch**: refs/heads/internal/release/3.1 - **Updates**: - **Microsoft.AspNetCore.Mvc.Razor.Extensions**: from 3.1.4 to 3.1.4 - **Microsoft.AspNetCore.Razor.Language**: from 3.1.4 to 3.1.4 - **Microsoft.CodeAnalysis.Razor**: from 3.1.4 to 3.1.4 - **Microsoft.NET.Sdk.Razor**: from 3.1.4 to 3.1.4 - **System.Net.Http.WinHttpHandler**: from 4.7.0 to 4.7.1 [marker]: <> (End:7bf32a0c-3505-43af-42b0-08d79559e63d) --- NuGet.config | 2 +- eng/Version.Details.xml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/NuGet.config b/NuGet.config index bcf6930145..9b63a8f022 100644 --- a/NuGet.config +++ b/NuGet.config @@ -8,7 +8,7 @@ - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 674880a1b1..037cb728dc 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -15,19 +15,19 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - a49970f2f15efb27b91541bb4b94581693c92b8d + a8242d79df31dbff528c185dd62c290b7cc262de https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - a49970f2f15efb27b91541bb4b94581693c92b8d + a8242d79df31dbff528c185dd62c290b7cc262de https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - a49970f2f15efb27b91541bb4b94581693c92b8d + a8242d79df31dbff528c185dd62c290b7cc262de https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore-tooling - a49970f2f15efb27b91541bb4b94581693c92b8d + a8242d79df31dbff528c185dd62c290b7cc262de https://dev.azure.com/dnceng/internal/_git/dotnet-efcore From 736e57f402d132577eefa639df4d5c8822d1841a Mon Sep 17 00:00:00 2001 From: Will Godbe Date: Tue, 12 May 2020 16:03:04 -0700 Subject: [PATCH 09/17] Remove int feeds from nuget.config --- NuGet.config | 5 ----- 1 file changed, 5 deletions(-) diff --git a/NuGet.config b/NuGet.config index 9b63a8f022..389b3f7ed6 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,11 +4,6 @@ - - - - - From 58bb85a1b05aaffe30adc43d2d027d15fcccb8c1 Mon Sep 17 00:00:00 2001 From: Will Godbe Date: Tue, 12 May 2020 16:04:46 -0700 Subject: [PATCH 10/17] Update branding to 3.1.5 --- eng/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/Versions.props b/eng/Versions.props index ea87e5032f..c43b1c1855 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -8,7 +8,7 @@ 3 1 - 4 + 5 0 - 3.0.2 + 3.0.3 - 3.0.2 + 3.0.3 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - - - + + + - + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 @@ -109,39 +109,39 @@ - 3.1.3 + 3.1.4 - - - + + + - - - + + + - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - + @@ -184,277 +184,277 @@ - 3.1.3 + 3.1.4 - - - + + + - - - + + + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - - + + - - + + - 3.1.3 + 3.1.4 - + - + - 3.1.3 + 3.1.4 - - - - + + + + - - - - + + + + - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 - + - - + + - + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - + - + - + - 3.1.3 + 3.1.4 - - - - - - + + + + + + - - - - - - + + + + + + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 - - + + - - + + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - - - + + + - - - + + + - 3.1.3 + 3.1.4 - + - - + + - 3.1.3 + 3.1.4 - + - + - 3.1.3 + 3.1.4 - - + + - - + + - 3.1.3 + 3.1.4 - - - + + + - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 @@ -462,239 +462,239 @@ - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - - - + + + - 3.1.3 + 3.1.4 - - - + + + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - + - - + + - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 - - - - - - + + + + + + - - - - - + + + + + - 3.1.3 + 3.1.4 - - + + - - - + + + - 3.1.3 + 3.1.4 - + - + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - - - - + + + + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - + - 3.1.3 + 3.1.4 - - + + - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - 3.1.3 + 3.1.4 - - - + + + - 3.1.3 + 3.1.4 - - - + + + - - - + + + - 3.1.3 + 3.1.4 - - - + + + - - - + + + \ No newline at end of file diff --git a/eng/Baseline.xml b/eng/Baseline.xml index 8ae05ac449..a768d1d764 100644 --- a/eng/Baseline.xml +++ b/eng/Baseline.xml @@ -4,86 +4,86 @@ This file contains a list of all the packages and their versions which were rele Update this list when preparing for a new patch. --> - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 9e2a4809258e93e3fa5a68f3c2228894d0a245bf Mon Sep 17 00:00:00 2001 From: William Godbe Date: Wed, 13 May 2020 10:59:55 -0700 Subject: [PATCH 12/17] [release/3.1] Add .version file to shared framework zip (#21548) * Add .version file to shared framework zip * Fix test --- .../src/Microsoft.AspNetCore.App.Runtime.csproj | 14 ++++++++++---- src/Framework/test/SharedFxTests.cs | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj b/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj index 72d99ee575..3451584734 100644 --- a/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj +++ b/src/Framework/src/Microsoft.AspNetCore.App.Runtime.csproj @@ -67,7 +67,8 @@ This package is an internal implementation of the .NET Core SDK and is not meant $(IntermediateOutputPath)ignoreme.dev.runtimeconfig.json - $(IntermediateOutputPath)$(SharedFxName).versions.txt + $(IntermediateOutputPath)$(SharedFxName).versions.txt + $(IntermediateOutputPath).version none @@ -256,7 +257,12 @@ This package is an internal implementation of the .NET Core SDK and is not meant + + @@ -397,7 +403,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant - + @@ -496,7 +502,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant BeforeTargets="_GetPackageFiles"> - + diff --git a/src/Framework/test/SharedFxTests.cs b/src/Framework/test/SharedFxTests.cs index 558fc34439..2fc09b96b0 100644 --- a/src/Framework/test/SharedFxTests.cs +++ b/src/Framework/test/SharedFxTests.cs @@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore [Fact] public void ItContainsVersionFile() { - var versionFile = Path.Combine(_sharedFxRoot, "Microsoft.AspNetCore.App.versions.txt"); + var versionFile = Path.Combine(_sharedFxRoot, ".version"); AssertEx.FileExists(versionFile); var lines = File.ReadAllLines(versionFile); Assert.Equal(2, lines.Length); From 8ff1cb906d2bf937484f5cdbab2a951b82459b74 Mon Sep 17 00:00:00 2001 From: Brennan Date: Wed, 13 May 2020 11:11:02 -0700 Subject: [PATCH 13/17] Set certificate in some Kestrel tests to avoid global machine state (#21516) (#21542) --- .../BindTests/AddressRegistrationTests.cs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Servers/Kestrel/test/BindTests/AddressRegistrationTests.cs b/src/Servers/Kestrel/test/BindTests/AddressRegistrationTests.cs index 205bdbbe5f..b337578824 100644 --- a/src/Servers/Kestrel/test/BindTests/AddressRegistrationTests.cs +++ b/src/Servers/Kestrel/test/BindTests/AddressRegistrationTests.cs @@ -129,12 +129,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests } [ConditionalTheory] - [MemberData(nameof(AddressRegistrationDataIPv6Port5000Default))] + [MemberData(nameof(AddressRegistrationDataIPv6Port5000And5001Default))] [IPv6SupportedCondition] [Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2711", FlakyOn.AzP.All)] - public async Task RegisterAddresses_IPv6Port5000Default_Success(string addressInput, string[] testUrls) + public async Task RegisterAddresses_IPv6Port5000And5001Default_Success(string addressInput, string[] testUrls) { - if (!CanBindToEndpoint(IPAddress.Loopback, 5000) || !CanBindToEndpoint(IPAddress.IPv6Loopback, 5000)) + if ((!CanBindToEndpoint(IPAddress.Loopback, 5000) || !CanBindToEndpoint(IPAddress.IPv6Loopback, 5000)) && + (!CanBindToEndpoint(IPAddress.Loopback, 5001) || !CanBindToEndpoint(IPAddress.IPv6Loopback, 5001))) { return; } @@ -183,7 +184,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests private async Task RegisterAddresses_Success(string addressInput, string[] testUrls, int testPort = 0) { var hostBuilder = TransportSelector.GetWebHostBuilder() - .UseKestrel() + .UseKestrel(serverOptions => + { + serverOptions.ConfigureHttpsDefaults(httpsOptions => + { + httpsOptions.ServerCertificate = TestResources.GetTestCertificate(); + }); + }) .ConfigureServices(AddTestLogging) .UseUrls(addressInput) .Configure(ConfigureEchoAddress); @@ -1039,11 +1046,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests } } - public static TheoryData AddressRegistrationDataIPv6Port5000Default => + public static TheoryData AddressRegistrationDataIPv6Port5000And5001Default => new TheoryData { - { null, new[] { "http://127.0.0.1:5000/", "http://[::1]:5000/" } }, - { string.Empty, new[] { "http://127.0.0.1:5000/", "http://[::1]:5000/" } } + { null, new[] { "http://127.0.0.1:5000/", "http://[::1]:5000/", "https://127.0.0.1:5001/", "https://[::1]:5001/" } }, + { string.Empty, new[] { "http://127.0.0.1:5000/", "http://[::1]:5000/", "https://127.0.0.1:5001/", "https://[::1]:5001/" } } }; public static TheoryData AddressRegistrationDataIPv6Port80 => From b194b6c90af6fbc8e6667f6f70b244162928d005 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Wed, 13 May 2020 11:12:14 -0700 Subject: [PATCH 14/17] Fix use of precedence in endpoint routing DFA (#20801) (#21200) * Fix use of precedence in endpoint routing DFA Fixes: #18677 Fixes: #16579 This is a change to how sorting is use when building endpoint routing's graph of nodes that is eventually transformed into the route table. There were bugs in how this was done that made it incompatible in some niche scenarios both with previous implementations and how we describe the features in the abstract. There are a wide array of cases that might have been impacted by this bug because routing is a pattern language. Generally the bugs will involve a catch-all, and some something that changes ordering of templates. Issue #18677 has the simplest repro for this, the following templates would not behave as expected: ``` a/{*b} {a}/{b} ``` One would expect any URL Path starting with `/a` to match the first route, but that's not what happens. --- The change supports an opt-in via the following AppContext switch: ``` Microsoft.AspNetCore.Routing.UseCorrectCatchAllBehavior ``` Set to true to enable the correct behavior. --- The root cause of this bug was an issue in how the algorithm used to be build the DFA was designed. Specifically that it uses a BFS to build the graph, and it uses an up-front one-time sort of endpoints in order to drive that BFS. The building of the graph has the expectation that at each level, we will process **all** literal segments (`/a`) and then **all** parameter segments (`/{a}`) and then **all** catch-all segments (`/{*a}`). Routing defines a concept called *precedence* that defines the *conceptual* order in while segments types are ordered. So there are two problems: - We sort based on criteria other than precedence (#16579) - We can't rely on a one-time sort, it needs to be done at each level (#18677) --- The fix is to repeat the sort operation at each level and use precedence as the only key for sorting (as dictated by the graph building algo). We do a sort of the matches of each node *after* building the precedence-based part of the DFA, based on the full sorting criteria, to maintain compatibility. * Add test --- .../Microsoft.AspNetCore.Routing.Manual.cs | 2 + .../Routing/src/Matching/DfaMatcherBuilder.cs | 91 +++- .../Routing/src/Template/RoutePrecedence.cs | 4 +- .../test/UnitTests/GlobalSuppressions.cs | 11 + .../Matching/DfaMatcherBuilderTest.cs | 453 +++++++++++++++++- .../Matching/DfaMatcherConformanceTest.cs | 131 +++++ .../FullFeaturedMatcherConformanceTest.cs | 62 +++ .../Matching/RouteMatcherConformanceTest.cs | 40 +- .../TreeRouterMatcherConformanceTest.cs | 35 +- 9 files changed, 807 insertions(+), 22 deletions(-) create mode 100644 src/Http/Routing/test/UnitTests/GlobalSuppressions.cs diff --git a/src/Http/Routing/ref/Microsoft.AspNetCore.Routing.Manual.cs b/src/Http/Routing/ref/Microsoft.AspNetCore.Routing.Manual.cs index 3ce07a7861..d2518a0f31 100644 --- a/src/Http/Routing/ref/Microsoft.AspNetCore.Routing.Manual.cs +++ b/src/Http/Routing/ref/Microsoft.AspNetCore.Routing.Manual.cs @@ -199,6 +199,8 @@ namespace Microsoft.AspNetCore.Routing.Matching internal partial class DfaMatcherBuilder : Microsoft.AspNetCore.Routing.Matching.MatcherBuilder { public DfaMatcherBuilder(Microsoft.Extensions.Logging.ILoggerFactory loggerFactory, Microsoft.AspNetCore.Routing.ParameterPolicyFactory parameterPolicyFactory, Microsoft.AspNetCore.Routing.Matching.EndpointSelector selector, System.Collections.Generic.IEnumerable policies) { } + internal EndpointComparer Comparer { get; } + internal bool UseCorrectCatchAllBehavior { get; set; } public override void AddEndpoint(Microsoft.AspNetCore.Routing.RouteEndpoint endpoint) { } public override Microsoft.AspNetCore.Routing.Matching.Matcher Build() { throw null; } public Microsoft.AspNetCore.Routing.Matching.DfaNode BuildDfaTree(bool includeLabel = false) { throw null; } diff --git a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs index 180d91a177..628adf4b74 100644 --- a/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs +++ b/src/Http/Routing/src/Matching/DfaMatcherBuilder.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing.Patterns; +using Microsoft.AspNetCore.Routing.Template; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Routing.Matching @@ -40,6 +41,15 @@ namespace Microsoft.AspNetCore.Routing.Matching _parameterPolicyFactory = parameterPolicyFactory; _selector = selector; + if (AppContext.TryGetSwitch("Microsoft.AspNetCore.Routing.UseCorrectCatchAllBehavior", out var enabled)) + { + UseCorrectCatchAllBehavior = enabled; + } + else + { + UseCorrectCatchAllBehavior = false; // default to bugged behavior + } + var (nodeBuilderPolicies, endpointComparerPolicies, endpointSelectorPolicies) = ExtractPolicies(policies.OrderBy(p => p.Order)); _endpointSelectorPolicies = endpointSelectorPolicies; _nodeBuilders = nodeBuilderPolicies; @@ -52,6 +62,12 @@ namespace Microsoft.AspNetCore.Routing.Matching _constraints = new List>(); } + // Used in tests + internal EndpointComparer Comparer => _comparer; + + // Used in tests + internal bool UseCorrectCatchAllBehavior { get; set; } + public override void AddEndpoint(RouteEndpoint endpoint) { _endpoints.Add(endpoint); @@ -59,17 +75,20 @@ namespace Microsoft.AspNetCore.Routing.Matching public DfaNode BuildDfaTree(bool includeLabel = false) { - // We build the tree by doing a BFS over the list of entries. This is important - // because a 'parameter' node can also traverse the same paths that literal nodes - // traverse. This means that we need to order the entries first, or else we will - // miss possible edges in the DFA. - _endpoints.Sort(_comparer); + if (!UseCorrectCatchAllBehavior) + { + // In 3.0 we did a global sort of the endpoints up front. This was a bug, because we actually want + // do do the sort at each level of the tree based on precedence. + // + // _useLegacy30Behavior enables opt-out via an AppContext switch. + _endpoints.Sort(_comparer); + } // Since we're doing a BFS we will process each 'level' of the tree in stages // this list will hold the set of items we need to process at the current // stage. - var work = new List<(RouteEndpoint endpoint, List parents)>(_endpoints.Count); - List<(RouteEndpoint endpoint, List parents)> previousWork = null; + var work = new List<(RouteEndpoint endpoint, int precedenceDigit, List parents)>(_endpoints.Count); + List<(RouteEndpoint endpoint, int precedenceDigit, List parents)> previousWork = null; var root = new DfaNode() { PathDepth = 0, Label = includeLabel ? "/" : null }; @@ -79,21 +98,37 @@ namespace Microsoft.AspNetCore.Routing.Matching for (var i = 0; i < _endpoints.Count; i++) { var endpoint = _endpoints[i]; - maxDepth = Math.Max(maxDepth, endpoint.RoutePattern.PathSegments.Count); + var precedenceDigit = GetPrecedenceDigitAtDepth(endpoint, depth: 0); + work.Add((endpoint, precedenceDigit, new List() { root, })); - work.Add((endpoint, new List() { root, })); + maxDepth = Math.Max(maxDepth, endpoint.RoutePattern.PathSegments.Count); } + var workCount = work.Count; + // Sort work at each level by *PRECEDENCE OF THE CURRENT SEGMENT*. + // + // We build the tree by doing a BFS over the list of entries. This is important + // because a 'parameter' node can also traverse the same paths that literal nodes + // traverse. This means that we need to order the entries first, or else we will + // miss possible edges in the DFA. + // + // We'll sort the matches again later using the *real* comparer once building the + // precedence part of the DFA is over. + var precedenceDigitComparer = Comparer<(RouteEndpoint endpoint, int precedenceDigit, List parents)>.Create((x, y) => + { + return x.precedenceDigit.CompareTo(y.precedenceDigit); + }); + // Now we process the entries a level at a time. for (var depth = 0; depth <= maxDepth; depth++) { // As we process items, collect the next set of items. - List<(RouteEndpoint endpoint, List parents)> nextWork; + List<(RouteEndpoint endpoint, int precedenceDigit, List parents)> nextWork; var nextWorkCount = 0; if (previousWork == null) { - nextWork = new List<(RouteEndpoint endpoint, List parents)>(); + nextWork = new List<(RouteEndpoint endpoint, int precedenceDigit, List parents)>(); } else { @@ -102,9 +137,17 @@ namespace Microsoft.AspNetCore.Routing.Matching nextWork = previousWork; } + if (UseCorrectCatchAllBehavior) + { + // The fix for the 3.0 sorting behavior bug. + + // See comments on precedenceDigitComparer + work.Sort(0, workCount, precedenceDigitComparer); + } + for (var i = 0; i < workCount; i++) { - var (endpoint, parents) = work[i]; + var (endpoint, _, parents) = work[i]; if (!HasAdditionalRequiredSegments(endpoint, depth)) { @@ -122,7 +165,8 @@ namespace Microsoft.AspNetCore.Routing.Matching nextParents = nextWork[nextWorkCount].parents; nextParents.Clear(); - nextWork[nextWorkCount] = (endpoint, nextParents); + var nextPrecedenceDigit = GetPrecedenceDigitAtDepth(endpoint, depth + 1); + nextWork[nextWorkCount] = (endpoint, nextPrecedenceDigit, nextParents); } else { @@ -130,7 +174,8 @@ namespace Microsoft.AspNetCore.Routing.Matching // Add to the next set of work now so the list will be reused // even if there are no parents - nextWork.Add((endpoint, nextParents)); + var nextPrecedenceDigit = GetPrecedenceDigitAtDepth(endpoint, depth + 1); + nextWork.Add((endpoint, nextPrecedenceDigit, nextParents)); } var segment = GetCurrentSegment(endpoint, depth); @@ -281,7 +326,7 @@ namespace Microsoft.AspNetCore.Routing.Matching nextParents.Add(next); } - private RoutePatternPathSegment GetCurrentSegment(RouteEndpoint endpoint, int depth) + private static RoutePatternPathSegment GetCurrentSegment(RouteEndpoint endpoint, int depth) { if (depth < endpoint.RoutePattern.PathSegments.Count) { @@ -302,6 +347,18 @@ namespace Microsoft.AspNetCore.Routing.Matching return null; } + private static int GetPrecedenceDigitAtDepth(RouteEndpoint endpoint, int depth) + { + var segment = GetCurrentSegment(endpoint, depth); + if (segment is null) + { + // Treat "no segment" as high priority. it won't effect the algorithm, but we need to define a sort-order. + return 0; + } + + return RoutePrecedence.ComputeInboundPrecedenceDigit(endpoint.RoutePattern, segment); + } + public override Matcher Build() { #if DEBUG @@ -673,6 +730,10 @@ namespace Microsoft.AspNetCore.Routing.Matching return; } + // We're done with the precedence based work. Sort the endpoints + // before applying policies for simplicity in policy-related code. + node.Matches.Sort(_comparer); + // Start with the current node as the root. var work = new List() { node, }; List previousWork = null; diff --git a/src/Http/Routing/src/Template/RoutePrecedence.cs b/src/Http/Routing/src/Template/RoutePrecedence.cs index d5b3ebc03f..3bad48614b 100644 --- a/src/Http/Routing/src/Template/RoutePrecedence.cs +++ b/src/Http/Routing/src/Template/RoutePrecedence.cs @@ -219,7 +219,7 @@ namespace Microsoft.AspNetCore.Routing.Template // see description on ComputeInboundPrecedenceDigit(TemplateSegment segment) // // With a RoutePattern, parameters with a required value are treated as a literal segment - private static int ComputeInboundPrecedenceDigit(RoutePattern routePattern, RoutePatternPathSegment pathSegment) + internal static int ComputeInboundPrecedenceDigit(RoutePattern routePattern, RoutePatternPathSegment pathSegment) { if (pathSegment.Parts.Count > 1) { @@ -260,4 +260,4 @@ namespace Microsoft.AspNetCore.Routing.Template } } } -} \ No newline at end of file +} diff --git a/src/Http/Routing/test/UnitTests/GlobalSuppressions.cs b/src/Http/Routing/test/UnitTests/GlobalSuppressions.cs new file mode 100644 index 0000000000..1fbf994418 --- /dev/null +++ b/src/Http/Routing/test/UnitTests/GlobalSuppressions.cs @@ -0,0 +1,11 @@ +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. + +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage( + "Build", + "xUnit1013:Public method 'Quirks_CatchAllParameter' on test class 'FullFeaturedMatcherConformanceTest' should be marked as a Theory.", + Justification = "This is a bug in the xUnit analyzer. This method is already marked as a theory.", + Scope = "member", + Target = "~M:Microsoft.AspNetCore.Routing.Matching.FullFeaturedMatcherConformanceTest.Quirks_CatchAllParameter(System.String,System.String,System.String[],System.String[])~System.Threading.Tasks.Task")] diff --git a/src/Http/Routing/test/UnitTests/Matching/DfaMatcherBuilderTest.cs b/src/Http/Routing/test/UnitTests/Matching/DfaMatcherBuilderTest.cs index c031bdd4f9..6ac360a207 100644 --- a/src/Http/Routing/test/UnitTests/Matching/DfaMatcherBuilderTest.cs +++ b/src/Http/Routing/test/UnitTests/Matching/DfaMatcherBuilderTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; @@ -459,6 +459,403 @@ namespace Microsoft.AspNetCore.Routing.Matching Assert.Same(catchAll, catchAll.CatchAll); } + // Regression test for https://github.com/dotnet/aspnetcore/issues/16579 + // + // This case behaves the same for all combinations. + [Fact] + public void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order1_CorrectBehavior() + { + var builder = CreateDfaMatcherBuilder(); + builder.UseCorrectCatchAllBehavior = true; + BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order1_Core(builder); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/16579 + // + // This case behaves the same for all combinations. + [Fact] + public void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order1_DefaultBehavior() + { + var builder = CreateDfaMatcherBuilder(); + BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order1_Core(builder); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/16579 + // + // This case behaves the same for all combinations. + [Fact] + public void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order1_LegacyBehavior() + { + var builder = CreateDfaMatcherBuilder(); + builder.UseCorrectCatchAllBehavior = false; + BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order1_Core(builder); + } + + private void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order1_Core(DfaMatcherBuilder builder) + { + // Arrange + var endpoint1 = CreateEndpoint("a/{b}", order: 0); + builder.AddEndpoint(endpoint1); + + var endpoint2 = CreateEndpoint("a/{*b}", order: 1); + builder.AddEndpoint(endpoint2); + + // Act + var root = builder.BuildDfaTree(); + + // Assert + Assert.Null(root.Matches); + Assert.Null(root.Parameters); + + var next = Assert.Single(root.Literals); + Assert.Equal("a", next.Key); + + var a = next.Value; + Assert.Same(endpoint2, Assert.Single(a.Matches)); + Assert.Null(a.Literals); + + var b = a.Parameters; + Assert.Collection( + b.Matches, + e => Assert.Same(endpoint1, e), + e => Assert.Same(endpoint2, e)); + Assert.Null(b.Literals); + Assert.Null(b.Parameters); + Assert.NotNull(b.CatchAll); + + var catchAll = b.CatchAll; + Assert.Same(endpoint2, Assert.Single(catchAll.Matches)); + Assert.Null(catchAll.Literals); + Assert.Same(catchAll, catchAll.Parameters); + Assert.Same(catchAll, catchAll.CatchAll); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/16579 + [Fact] + public void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2_CorrectBehavior() + { + var builder = CreateDfaMatcherBuilder(); + builder.UseCorrectCatchAllBehavior = true; + BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2_CorrectBehavior_Core(builder); + } + + [Fact] + public void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2_DefaultBehavior() + { + var builder = CreateDfaMatcherBuilder(); + BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2_LegacyBehavior_Core(builder); + } + + [Fact] + public void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2_LegacyBehavior() + { + var builder = CreateDfaMatcherBuilder(); + builder.UseCorrectCatchAllBehavior = false; + BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2_LegacyBehavior_Core(builder); + } + + private void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2_CorrectBehavior_Core(DfaMatcherBuilder builder) + { + // Arrange + var endpoint1 = CreateEndpoint("a/{*b}", order: 0); + builder.AddEndpoint(endpoint1); + + var endpoint2 = CreateEndpoint("a/{b}", order: 1); + builder.AddEndpoint(endpoint2); + + // Act + var root = builder.BuildDfaTree(); + + // Assert + Assert.Null(root.Matches); + Assert.Null(root.Parameters); + + var next = Assert.Single(root.Literals); + Assert.Equal("a", next.Key); + + var a = next.Value; + Assert.Same(endpoint1, Assert.Single(a.Matches)); + Assert.Null(a.Literals); + + var b = a.Parameters; + Assert.Collection( + b.Matches, + e => Assert.Same(endpoint1, e), + e => Assert.Same(endpoint2, e)); + Assert.Null(b.Literals); + Assert.Null(b.Parameters); + Assert.NotNull(b.CatchAll); + + var catchAll = b.CatchAll; + Assert.Same(endpoint1, Assert.Single(catchAll.Matches)); + Assert.Null(catchAll.Literals); + Assert.Same(catchAll, catchAll.Parameters); + Assert.Same(catchAll, catchAll.CatchAll); + } + + private void BuildDfaTree_MultipleEndpoint_ParameterAndCatchAll_OnSameNode_Order2_LegacyBehavior_Core(DfaMatcherBuilder builder) + { + // Arrange + var endpoint1 = CreateEndpoint("a/{*b}", order: 0); + builder.AddEndpoint(endpoint1); + + var endpoint2 = CreateEndpoint("a/{b}", order: 1); + builder.AddEndpoint(endpoint2); + + // Act + var root = builder.BuildDfaTree(); + + // Assert + Assert.Null(root.Matches); + Assert.Null(root.Parameters); + + var next = Assert.Single(root.Literals); + Assert.Equal("a", next.Key); + + var a = next.Value; + Assert.Same(endpoint1, Assert.Single(a.Matches)); + Assert.Null(a.Literals); + + var b = a.Parameters; + Assert.Same(endpoint1, Assert.Single(a.Matches)); + Assert.Null(b.Literals); + Assert.Null(b.Parameters); + Assert.Null(b.CatchAll); + + var catchAll = a.CatchAll; + Assert.Same(endpoint1, Assert.Single(catchAll.Matches)); + Assert.Null(catchAll.Literals); + Assert.Same(catchAll, catchAll.Parameters); + Assert.Same(catchAll, catchAll.CatchAll); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/18677 + [Fact] + public void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order1_CorrectBehavior() + { + // Arrange + var builder = CreateDfaMatcherBuilder(); + builder.UseCorrectCatchAllBehavior = true; + + var endpoint1 = CreateEndpoint("{a}/{b}", order: 0); + builder.AddEndpoint(endpoint1); + + var endpoint2 = CreateEndpoint("a/{*b}", order: 1); + builder.AddEndpoint(endpoint2); + + // Act + var root = builder.BuildDfaTree(); + + // Assert + Assert.Null(root.Matches); + + var next = Assert.Single(root.Literals); + Assert.Equal("a", next.Key); + + var a1 = next.Value; + Assert.Same(endpoint2, Assert.Single(a1.Matches)); + Assert.Null(a1.Literals); + + var b1 = a1.Parameters; + Assert.Collection( + b1.Matches, + e => Assert.Same(endpoint1, e), + e => Assert.Same(endpoint2, e)); + Assert.Null(b1.Literals); + Assert.Null(b1.Parameters); + Assert.NotNull(b1.CatchAll); + + var catchAll1 = b1.CatchAll; + Assert.Same(endpoint2, Assert.Single(catchAll1.Matches)); + Assert.Null(catchAll1.Literals); + Assert.Same(catchAll1, catchAll1.Parameters); + Assert.Same(catchAll1, catchAll1.CatchAll); + + var a2 = root.Parameters; + Assert.Null(a2.Matches); + Assert.Null(a2.Literals); + + var b2 = a2.Parameters; + Assert.Collection( + b2.Matches, + e => Assert.Same(endpoint1, e)); + Assert.Null(b2.Literals); + Assert.Null(b2.Parameters); + Assert.Null(b2.CatchAll); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/18677 + [Fact] + public void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order2_CorrectBehavior() + { + // Arrange + var builder = CreateDfaMatcherBuilder(); + builder.UseCorrectCatchAllBehavior = true; + + var endpoint1 = CreateEndpoint("a/{*b}", order: 0); + builder.AddEndpoint(endpoint1); + + var endpoint2 = CreateEndpoint("{a}/{b}", order: 1); + builder.AddEndpoint(endpoint2); + + // Act + var root = builder.BuildDfaTree(); + + // Assert + Assert.Null(root.Matches); + + var next = Assert.Single(root.Literals); + Assert.Equal("a", next.Key); + + var a1 = next.Value; + Assert.Same(endpoint1, Assert.Single(a1.Matches)); + Assert.Null(a1.Literals); + + var b1 = a1.Parameters; + Assert.Collection( + b1.Matches, + e => Assert.Same(endpoint1, e), + e => Assert.Same(endpoint2, e)); + Assert.Null(b1.Literals); + Assert.Null(b1.Parameters); + Assert.NotNull(b1.CatchAll); + + var catchAll1 = b1.CatchAll; + Assert.Same(endpoint1, Assert.Single(catchAll1.Matches)); + Assert.Null(catchAll1.Literals); + Assert.Same(catchAll1, catchAll1.Parameters); + Assert.Same(catchAll1, catchAll1.CatchAll); + + var a2 = root.Parameters; + Assert.Null(a2.Matches); + Assert.Null(a2.Literals); + + var b2 = a2.Parameters; + Assert.Collection( + b2.Matches, + e => Assert.Same(endpoint2, e)); + Assert.Null(b2.Literals); + Assert.Null(b2.Parameters); + Assert.Null(b2.CatchAll); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/18677 + [Fact] + public void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order1_DefaultBehavior() + { + var builder = CreateDfaMatcherBuilder(); + BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order1_Legacy30Behavior_Core(builder); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/18677 + [Fact] + public void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order1_Legacy30Behavior() + { + var builder = CreateDfaMatcherBuilder(); + builder.UseCorrectCatchAllBehavior = false; + BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order1_Legacy30Behavior_Core(builder); + } + + private void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order1_Legacy30Behavior_Core(DfaMatcherBuilder builder) + { + // Arrange + var endpoint1 = CreateEndpoint("{a}/{b}", order: 0); + builder.AddEndpoint(endpoint1); + + var endpoint2 = CreateEndpoint("a/{*b}", order: 1); + builder.AddEndpoint(endpoint2); + + // Act + var root = builder.BuildDfaTree(); + + // Assert + Assert.Null(root.Matches); + + var next = Assert.Single(root.Literals); + Assert.Equal("a", next.Key); + + var a1 = next.Value; + Assert.Same(endpoint2, Assert.Single(a1.Matches)); + Assert.Null(a1.Literals); + Assert.Null(a1.Parameters); + + var catchAll1 = a1.CatchAll; + Assert.Same(endpoint2, Assert.Single(catchAll1.Matches)); + Assert.Null(catchAll1.Literals); + Assert.Same(catchAll1, catchAll1.Parameters); + Assert.Same(catchAll1, catchAll1.CatchAll); + + var a2 = root.Parameters; + Assert.Null(a2.Matches); + Assert.Null(a2.Literals); + + var b2 = a2.Parameters; + Assert.Collection( + b2.Matches, + e => Assert.Same(endpoint1, e)); + Assert.Null(b2.Literals); + Assert.Null(b2.Parameters); + Assert.Null(b2.CatchAll); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/18677 + [Fact] + public void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order2_DefaultBehavior() + { + var builder = CreateDfaMatcherBuilder(); + BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order2_Legacy30Behavior_Core(builder); + } + + // Regression test for https://github.com/dotnet/aspnetcore/issues/18677 + [Fact] + public void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order2_Legacy30Behavior() + { + var builder = CreateDfaMatcherBuilder(); + builder.UseCorrectCatchAllBehavior = false; + BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order2_Legacy30Behavior_Core(builder); + } + + private void BuildDfaTree_MultipleEndpoint_CatchAllWithHigherPrecedenceThanParameter_Order2_Legacy30Behavior_Core(DfaMatcherBuilder builder) + { + // Arrange + var endpoint1 = CreateEndpoint("a/{*b}", order: 0); + builder.AddEndpoint(endpoint1); + + var endpoint2 = CreateEndpoint("{a}/{b}", order: 1); + builder.AddEndpoint(endpoint2); + + // Act + var root = builder.BuildDfaTree(); + + // Assert + Assert.Null(root.Matches); + + var next = Assert.Single(root.Literals); + Assert.Equal("a", next.Key); + + var a1 = next.Value; + Assert.Same(endpoint1, Assert.Single(a1.Matches)); + Assert.Null(a1.Literals); + + var b1 = a1.Parameters; + Assert.Same(endpoint2, Assert.Single(b1.Matches)); + Assert.Null(b1.Literals); + Assert.Null(b1.Parameters); + Assert.Null(b1.CatchAll); + + var a2 = root.Parameters; + Assert.Null(a2.Matches); + Assert.Null(a2.Literals); + + var b2 = a2.Parameters; + Assert.Collection( + b2.Matches, + e => Assert.Same(endpoint2, e)); + Assert.Null(b2.Literals); + Assert.Null(b2.Parameters); + Assert.Null(b2.CatchAll); + } + [Fact] public void BuildDfaTree_WithPolicies() { @@ -729,6 +1126,50 @@ namespace Microsoft.AspNetCore.Routing.Matching Assert.Null(a.PolicyEdges); } + // Verifies that we sort the endpoints before calling into policies. + // + // The builder uses a different sort order when building the tree, vs when building the policy nodes. Policy + // nodes should see an "absolute" order. + [Fact] + public void BuildDfaTree_WithPolicies_SortedAccordingToScore() + { + // Arrange + // + // These cases where chosen where the absolute order incontrolled explicitly by setting .Order, but + // the precedence of segments is different, so these will be sorted into different orders when building + // the tree. + var policies = new MatcherPolicy[] + { + new TestMetadata1MatcherPolicy(), + new TestMetadata2MatcherPolicy(), + }; + + var comparer = new EndpointComparer(policies.OrderBy(p => p.Order).OfType().ToArray()); + + var builder = CreateDfaMatcherBuilder(policies); + + ((TestMetadata1MatcherPolicy)policies[0]).OnGetEdges = VerifyOrder; + ((TestMetadata2MatcherPolicy)policies[1]).OnGetEdges = VerifyOrder; + + var endpoint1 = CreateEndpoint("/a/{**b}", order: -1, metadata: new object[] { new TestMetadata1(0), new TestMetadata2(true), }); + builder.AddEndpoint(endpoint1); + + var endpoint2 = CreateEndpoint("/a/{b}/{**c}", order: 0, metadata: new object[] { new TestMetadata1(1), new TestMetadata2(true), }); + builder.AddEndpoint(endpoint2); + + var endpoint3 = CreateEndpoint("/a/b/{c}", order: 1, metadata: new object[] { new TestMetadata1(1), new TestMetadata2(false), }); + builder.AddEndpoint(endpoint3); + + // Act & Assert + _ = builder.BuildDfaTree(); + + void VerifyOrder(IReadOnlyList endpoints) + { + // The list should already be in sorted order, every time build is called. + Assert.Equal(endpoints, endpoints.OrderBy(e => e, comparer)); + } + } + [Fact] public void BuildDfaTree_RequiredValues() { @@ -1281,9 +1722,10 @@ namespace Microsoft.AspNetCore.Routing.Matching object defaults = null, object constraints = null, object requiredValues = null, + int order = 0, params object[] metadata) { - return EndpointFactory.CreateRouteEndpoint(template, defaults, constraints, requiredValues, metadata: metadata); + return EndpointFactory.CreateRouteEndpoint(template, defaults, constraints, requiredValues, order: order, metadata: metadata); } private class TestMetadata1 @@ -1306,6 +1748,8 @@ namespace Microsoft.AspNetCore.Routing.Matching public IComparer Comparer => EndpointMetadataComparer.Default; + public Action> OnGetEdges { get; set; } + public bool AppliesToEndpoints(IReadOnlyList endpoints) { return endpoints.Any(e => e.Metadata.GetMetadata() != null); @@ -1318,6 +1762,7 @@ namespace Microsoft.AspNetCore.Routing.Matching public IReadOnlyList GetEdges(IReadOnlyList endpoints) { + OnGetEdges?.Invoke(endpoints); return endpoints .GroupBy(e => e.Metadata.GetMetadata().State) .Select(g => new PolicyNodeEdge(g.Key, g.ToArray())) @@ -1345,6 +1790,9 @@ namespace Microsoft.AspNetCore.Routing.Matching public IComparer Comparer => EndpointMetadataComparer.Default; + public Action> OnGetEdges { get; set; } + + public bool AppliesToEndpoints(IReadOnlyList endpoints) { return endpoints.Any(e => e.Metadata.GetMetadata() != null); @@ -1357,6 +1805,7 @@ namespace Microsoft.AspNetCore.Routing.Matching public IReadOnlyList GetEdges(IReadOnlyList endpoints) { + OnGetEdges?.Invoke(endpoints); return endpoints .GroupBy(e => e.Metadata.GetMetadata().State) .Select(g => new PolicyNodeEdge(g.Key, g.ToArray())) diff --git a/src/Http/Routing/test/UnitTests/Matching/DfaMatcherConformanceTest.cs b/src/Http/Routing/test/UnitTests/Matching/DfaMatcherConformanceTest.cs index 46ca9fdb2c..66fb02c03a 100644 --- a/src/Http/Routing/test/UnitTests/Matching/DfaMatcherConformanceTest.cs +++ b/src/Http/Routing/test/UnitTests/Matching/DfaMatcherConformanceTest.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Xunit; namespace Microsoft.AspNetCore.Routing.Matching { @@ -23,7 +24,132 @@ namespace Microsoft.AspNetCore.Routing.Matching MatcherAssert.AssertMatch(httpContext, endpoint, keys, values); } + // https://github.com/dotnet/aspnetcore/issues/18677 + [Theory] + [InlineData("/middleware", 1)] + [InlineData("/middleware/test", 1)] + [InlineData("/middleware/test1/test2", 1)] + [InlineData("/bill/boga", 0)] + public async Task Match_Regression_1867_CorrectBehavior(string path, int endpointIndex) + { + var endpoints = new RouteEndpoint[] + { + EndpointFactory.CreateRouteEndpoint( + "{firstName}/{lastName}", + order: 0, + defaults: new { controller = "TestRoute", action = "Index", }), + + EndpointFactory.CreateRouteEndpoint( + "middleware/{**_}", + order: 0), + }; + + var expected = endpoints[endpointIndex]; + + var matcher = CreateMatcher(useCorrectCatchAllBehavior: true, endpoints); + var httpContext = CreateContext(path); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true); + } + + // https://github.com/dotnet/aspnetcore/issues/18677 + // + [Theory] + [InlineData("/middleware", 1)] + [InlineData("/middleware/test", 0)] + [InlineData("/middleware/test1/test2", -1)] + [InlineData("/bill/boga", 0)] + public async Task Match_Regression_1867_DefaultBehavior(string path, int endpointIndex) + { + var endpoints = new RouteEndpoint[] + { + EndpointFactory.CreateRouteEndpoint( + "{firstName}/{lastName}", + order: 0, + defaults: new { controller = "TestRoute", action = "Index", }), + + EndpointFactory.CreateRouteEndpoint( + "middleware/{**_}", + order: 0), + }; + + var expected = endpointIndex switch + { + -1 => null, + _ => endpoints[endpointIndex], + }; + + var matcher = CreateMatcher(useCorrectCatchAllBehavior: default, endpoints); + var httpContext = CreateContext(path); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + if (expected == null) + { + MatcherAssert.AssertNotMatch(httpContext); + } + else + { + MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true); + } + } + + // https://github.com/dotnet/aspnetcore/issues/18677 + // + [Theory] + [InlineData("/middleware", 1)] + [InlineData("/middleware/test", 0)] + [InlineData("/middleware/test1/test2", -1)] + [InlineData("/bill/boga", 0)] + public async Task Match_Regression_1867_LegacyBehavior(string path, int endpointIndex) + { + var endpoints = new RouteEndpoint[] + { + EndpointFactory.CreateRouteEndpoint( + "{firstName}/{lastName}", + order: 0, + defaults: new { controller = "TestRoute", action = "Index", }), + + EndpointFactory.CreateRouteEndpoint( + "middleware/{**_}", + order: 0), + }; + + var expected = endpointIndex switch + { + -1 => null, + _ => endpoints[endpointIndex], + }; + + var matcher = CreateMatcher(useCorrectCatchAllBehavior: false, endpoints); + var httpContext = CreateContext(path); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + if (expected == null) + { + MatcherAssert.AssertNotMatch(httpContext); + } + else + { + MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true); + } + } + internal override Matcher CreateMatcher(params RouteEndpoint[] endpoints) + { + return CreateMatcher(useCorrectCatchAllBehavior: default, endpoints); + } + + internal Matcher CreateMatcher(bool? useCorrectCatchAllBehavior, params RouteEndpoint[] endpoints) { var services = new ServiceCollection() .AddLogging() @@ -32,6 +158,11 @@ namespace Microsoft.AspNetCore.Routing.Matching .BuildServiceProvider(); var builder = services.GetRequiredService(); + if (useCorrectCatchAllBehavior.HasValue) + { + builder.UseCorrectCatchAllBehavior = useCorrectCatchAllBehavior.Value; + } + for (var i = 0; i < endpoints.Length; i++) { builder.AddEndpoint(endpoints[i]); diff --git a/src/Http/Routing/test/UnitTests/Matching/FullFeaturedMatcherConformanceTest.cs b/src/Http/Routing/test/UnitTests/Matching/FullFeaturedMatcherConformanceTest.cs index ca86fe3e1d..a3abad92fa 100644 --- a/src/Http/Routing/test/UnitTests/Matching/FullFeaturedMatcherConformanceTest.cs +++ b/src/Http/Routing/test/UnitTests/Matching/FullFeaturedMatcherConformanceTest.cs @@ -4,6 +4,7 @@ using System; using System.Linq; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Xunit; namespace Microsoft.AspNetCore.Routing.Matching @@ -442,5 +443,66 @@ namespace Microsoft.AspNetCore.Routing.Matching // Assert MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true); } + + // https://github.com/dotnet/aspnetcore/issues/16579 + [Fact] + public virtual async Task Match_Regression_16579_Order1() + { + var endpoints = new RouteEndpoint[] + { + EndpointFactory.CreateRouteEndpoint( + "{controller}/folder/{*path}", + order: 0, + defaults: new { controller = "File", action = "Folder", }, + requiredValues: new { controller = "File", }), + EndpointFactory.CreateRouteEndpoint( + "{controller}/{action}/{filename}", + order: 1, + defaults: new { controller = "File", action = "Index", }, + requiredValues: new { controller = "File", action = "Index", }), + }; + + var expected = endpoints[0]; + + var matcher = CreateMatcher(endpoints); + var httpContext = CreateContext("/file/folder/abc/abc"); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true); + } + + // https://github.com/dotnet/aspnetcore/issues/16579 + [Fact] + public virtual async Task Match_Regression_16579_Order2() + { + var endpoints = new RouteEndpoint[] + { + EndpointFactory.CreateRouteEndpoint( + "{controller}/{action}/{filename}", + order: 0, + defaults: new { controller = "File", action = "Index", }, + requiredValues: new { controller = "File", action = "Index", }), + + EndpointFactory.CreateRouteEndpoint( + "{controller}/folder/{*path}", + order: 1, + defaults: new { controller = "File", action = "Folder", }, + requiredValues: new { controller = "File", }), + }; + + var expected = endpoints[1]; + + var matcher = CreateMatcher(endpoints); + var httpContext = CreateContext("/file/folder/abc/abc"); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true); + } } } diff --git a/src/Http/Routing/test/UnitTests/Matching/RouteMatcherConformanceTest.cs b/src/Http/Routing/test/UnitTests/Matching/RouteMatcherConformanceTest.cs index 1690696951..fad408f5a1 100644 --- a/src/Http/Routing/test/UnitTests/Matching/RouteMatcherConformanceTest.cs +++ b/src/Http/Routing/test/UnitTests/Matching/RouteMatcherConformanceTest.cs @@ -1,16 +1,52 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Threading.Tasks; +using Xunit; + namespace Microsoft.AspNetCore.Routing.Matching { public class RouteMatcherConformanceTest : FullFeaturedMatcherConformanceTest { + // https://github.com/dotnet/aspnetcore/issues/18677 + // + [Theory] + [InlineData("/middleware", 1)] + [InlineData("/middleware/test", 1)] + [InlineData("/middleware/test1/test2", 1)] + [InlineData("/bill/boga", 0)] + public async Task Match_Regression_1867(string path, int endpointIndex) + { + var endpoints = new RouteEndpoint[] + { + EndpointFactory.CreateRouteEndpoint( + "{firstName}/{lastName}", + order: 0, + defaults: new { controller = "TestRoute", action = "Index", }), + + EndpointFactory.CreateRouteEndpoint( + "middleware/{**_}", + order: 0), + }; + + var expected = endpoints[endpointIndex]; + + var matcher = CreateMatcher(endpoints); + var httpContext = CreateContext(path); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true); + } + internal override Matcher CreateMatcher(params RouteEndpoint[] endpoints) { var builder = new RouteMatcherBuilder(); for (var i = 0; i < endpoints.Length; i++) { - builder.AddEndpoint(endpoints[i]); + builder.AddEndpoint(endpoints[i]); } return builder.Build(); } diff --git a/src/Http/Routing/test/UnitTests/Matching/TreeRouterMatcherConformanceTest.cs b/src/Http/Routing/test/UnitTests/Matching/TreeRouterMatcherConformanceTest.cs index e2c3a73108..dcf0d7e5ff 100644 --- a/src/Http/Routing/test/UnitTests/Matching/TreeRouterMatcherConformanceTest.cs +++ b/src/Http/Routing/test/UnitTests/Matching/TreeRouterMatcherConformanceTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading.Tasks; @@ -22,6 +22,39 @@ namespace Microsoft.AspNetCore.Routing.Matching return Task.CompletedTask; } + // https://github.com/dotnet/aspnetcore/issues/18677 + // + [Theory] + [InlineData("/middleware", 1)] + [InlineData("/middleware/test", 1)] + [InlineData("/middleware/test1/test2", 1)] + [InlineData("/bill/boga", 0)] + public async Task Match_Regression_1867(string path, int endpointIndex) + { + var endpoints = new RouteEndpoint[] + { + EndpointFactory.CreateRouteEndpoint( + "{firstName}/{lastName}", + order: 0, + defaults: new { controller = "TestRoute", action = "Index", }), + + EndpointFactory.CreateRouteEndpoint( + "middleware/{**_}", + order: 0), + }; + + var expected = endpoints[endpointIndex]; + + var matcher = CreateMatcher(endpoints); + var httpContext = CreateContext(path); + + // Act + await matcher.MatchAsync(httpContext); + + // Assert + MatcherAssert.AssertMatch(httpContext, expected, ignoreValues: true); + } + internal override Matcher CreateMatcher(params RouteEndpoint[] endpoints) { var builder = new TreeRouterMatcherBuilder(); From de38479e5f5c136032a9411c4442cd1d9cae1176 Mon Sep 17 00:00:00 2001 From: Doug Bunting <6431421+dougbu@users.noreply.github.com> Date: Wed, 13 May 2020 11:31:09 -0700 Subject: [PATCH 15/17] Improve build reliability (#20760) * Improve build reliability - ensure `ResolveCustomReferences` target executes before packages are used - `ResolveAssemblyReferences` and `ResolveAssemblyReferencesDesignTime` targets run too late - e.g. failed builds of Microsoft.AspNetCore.WebUtilities or Microsoft.AspNetCore.Hosting when building from root - add `GetReferenceProjectTargetPathMetadata` for ease of use as well as reliability - avoids extra work to get existing metadata (ref/ projects execute no tasks in this target) nit: rename `@(ReferenceProjectMetadata)` -> `@(ReferenceProjectTargetPathMetadata)` * Ensure `GetTargetPathMetadata` target runs with `$(TargetFramework)` set - ref/ projects all multi-target and otherwise no-op this target * Revert "Fix various "Type or namespace not found" errors (#20736)" - change is no longer needed with other fixes in this PR This reverts commit 8218d6e0e72dd9cb495baedb9644695d8747b8de. --- eng/scripts/CodeCheck.ps1 | 5 ++++ eng/targets/ResolveReferences.targets | 27 ++++++++++++++----- .../Microsoft.AspNetCore.Antiforgery.csproj | 5 +--- ...rosoft.AspNetCore.Components.Server.csproj | 12 ++++----- ...oft.AspNetCore.Hosting.Abstractions.csproj | 4 +-- .../src/Microsoft.AspNetCore.Hosting.csproj | 22 +++++++-------- ...NetCore.Hosting.Server.Abstractions.csproj | 4 +-- ...NetCore.Authentication.Abstractions.csproj | 6 ++--- .../src/Microsoft.Net.Http.Headers.csproj | 3 +-- ...rosoft.AspNetCore.Http.Abstractions.csproj | 4 +-- ...icrosoft.AspNetCore.Http.Extensions.csproj | 4 +-- .../Http/src/Microsoft.AspNetCore.Http.csproj | 6 ++--- .../src/Microsoft.AspNetCore.Routing.csproj | 10 +++---- .../Microsoft.AspNetCore.WebUtilities.csproj | 4 +-- .../CORS/src/Microsoft.AspNetCore.Cors.csproj | 10 +++---- .../Microsoft.AspNetCore.Diagnostics.csproj | 10 +++---- ...AspNetCore.Diagnostics.HealthChecks.csproj | 6 ++--- .../Microsoft.AspNetCore.HostFiltering.csproj | 4 +-- .../Microsoft.AspNetCore.HttpOverrides.csproj | 6 ++--- .../Microsoft.AspNetCore.HttpsPolicy.csproj | 6 ++--- .../Microsoft.AspNetCore.Localization.csproj | 8 +++--- ...etCore.ResponseCaching.Abstractions.csproj | 3 +-- ...icrosoft.AspNetCore.ResponseCaching.csproj | 6 ++--- ...soft.AspNetCore.ResponseCompression.csproj | 6 ++--- .../src/Microsoft.AspNetCore.Rewrite.csproj | 10 +++---- .../src/Microsoft.AspNetCore.Session.csproj | 8 +++--- .../Microsoft.AspNetCore.StaticFiles.csproj | 8 +++--- .../Microsoft.AspNetCore.WebSockets.csproj | 6 ++--- ...crosoft.AspNetCore.Mvc.Abstractions.csproj | 3 +-- .../src/Microsoft.AspNetCore.Mvc.Core.csproj | 14 +++++----- ...soft.AspNetCore.Mvc.DataAnnotations.csproj | 4 +-- ...crosoft.AspNetCore.Mvc.Localization.csproj | 7 +++-- .../src/Microsoft.AspNetCore.Mvc.Razor.csproj | 6 ++--- ...Microsoft.AspNetCore.Mvc.TagHelpers.csproj | 8 +++--- ...crosoft.AspNetCore.Mvc.ViewFeatures.csproj | 4 +-- .../Mvc/src/Microsoft.AspNetCore.Mvc.csproj | 6 ++--- .../src/Microsoft.AspNetCore.Razor.csproj | 4 +-- ...Microsoft.AspNetCore.Authentication.csproj | 8 +++--- .../Microsoft.AspNetCore.CookiePolicy.csproj | 6 ++--- ...Microsoft.AspNetCore.Server.HttpSys.csproj | 6 ++--- .../Microsoft.AspNetCore.Server.IIS.csproj | 10 +++---- ...ft.AspNetCore.Server.IISIntegration.csproj | 10 +++---- ...soft.AspNetCore.Server.Kestrel.Core.csproj | 10 +++---- ...re.Server.Kestrel.Transport.Sockets.csproj | 4 +-- ...crosoft.AspNetCore.Http.Connections.csproj | 6 ++--- .../Microsoft.AspNetCore.SignalR.Core.csproj | 6 ++--- 46 files changed, 135 insertions(+), 200 deletions(-) diff --git a/eng/scripts/CodeCheck.ps1 b/eng/scripts/CodeCheck.ps1 index 012819ff1b..072f55fe21 100644 --- a/eng/scripts/CodeCheck.ps1 +++ b/eng/scripts/CodeCheck.ps1 @@ -165,6 +165,11 @@ try { & $PSScriptRoot\GenerateProjectList.ps1 -ci:$ci } + Write-Host "Re-generating references assemblies" + Invoke-Block { + & $PSScriptRoot\GenerateReferenceAssemblies.ps1 -ci:$ci + } + Write-Host "Re-generating package baselines" Invoke-Block { & dotnet run -p "$repoRoot/eng/tools/BaselineGenerator/" diff --git a/eng/targets/ResolveReferences.targets b/eng/targets/ResolveReferences.targets index e77922ebcb..bfa4bdb132 100644 --- a/eng/targets/ResolveReferences.targets +++ b/eng/targets/ResolveReferences.targets @@ -144,7 +144,7 @@ This executes on NuGet restore and during DesignTimeBuild. It should not run in the outer, cross-targeting build. --> @@ -252,20 +252,35 @@ this assembly. Reset properties to avoid error when copying non-existent @(IntermediateRefAssembly) to $(TargetRefPath). --> - $(GetTargetPathWithTargetPlatformMonikerDependsOn);AddReferenceProjectMetadata + + $(GetTargetPathWithTargetPlatformMonikerDependsOn);AddReferenceProjectMetadata + RemoveReferenceProjectMetadata;$(PrepareForRunDependsOn) - + - ReferenceProjectMetadata false - + + + + + + + + + + @(IntermediateAssembly) + + + + true - @(ReferenceProjectMetadata) + @(ReferenceProjectTargetPathMetadata) diff --git a/src/Antiforgery/src/Microsoft.AspNetCore.Antiforgery.csproj b/src/Antiforgery/src/Microsoft.AspNetCore.Antiforgery.csproj index 6dee6dec2d..566e221871 100644 --- a/src/Antiforgery/src/Microsoft.AspNetCore.Antiforgery.csproj +++ b/src/Antiforgery/src/Microsoft.AspNetCore.Antiforgery.csproj @@ -7,7 +7,6 @@ true aspnetcore;antiforgery false - true @@ -15,9 +14,7 @@ - - - + diff --git a/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj b/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj index 036fe23821..b47c1c2fe3 100644 --- a/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj +++ b/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj @@ -10,7 +10,6 @@ CS0436;$(NoWarn) $(DefineConstants);MESSAGEPACK_INTERNAL;COMPONENTS_SERVER false - true @@ -19,12 +18,11 @@ - - - - - - + + + + + diff --git a/src/Hosting/Abstractions/src/Microsoft.AspNetCore.Hosting.Abstractions.csproj b/src/Hosting/Abstractions/src/Microsoft.AspNetCore.Hosting.Abstractions.csproj index e629f75f15..4def523880 100644 --- a/src/Hosting/Abstractions/src/Microsoft.AspNetCore.Hosting.Abstractions.csproj +++ b/src/Hosting/Abstractions/src/Microsoft.AspNetCore.Hosting.Abstractions.csproj @@ -8,14 +8,12 @@ true aspnetcore;hosting false - true - - + diff --git a/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj b/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj index 222c7798ba..38ec417cb4 100644 --- a/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj +++ b/src/Hosting/Hosting/src/Microsoft.AspNetCore.Hosting.csproj @@ -8,7 +8,6 @@ true aspnetcore;hosting false - true @@ -21,17 +20,16 @@ - - - - - - - - - - - + + + + + + + + + + diff --git a/src/Hosting/Server.Abstractions/src/Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj b/src/Hosting/Server.Abstractions/src/Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj index 2d24ec4ba4..4e6c350a51 100644 --- a/src/Hosting/Server.Abstractions/src/Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj +++ b/src/Hosting/Server.Abstractions/src/Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj @@ -8,13 +8,11 @@ true aspnetcore;hosting false - true - - + diff --git a/src/Http/Authentication.Abstractions/src/Microsoft.AspNetCore.Authentication.Abstractions.csproj b/src/Http/Authentication.Abstractions/src/Microsoft.AspNetCore.Authentication.Abstractions.csproj index 4210f73236..999e6741e5 100644 --- a/src/Http/Authentication.Abstractions/src/Microsoft.AspNetCore.Authentication.Abstractions.csproj +++ b/src/Http/Authentication.Abstractions/src/Microsoft.AspNetCore.Authentication.Abstractions.csproj @@ -7,14 +7,12 @@ true aspnetcore;authentication;security false - true - - - + + diff --git a/src/Http/Headers/src/Microsoft.Net.Http.Headers.csproj b/src/Http/Headers/src/Microsoft.Net.Http.Headers.csproj index 73e9b97b72..d0c27e7ed7 100644 --- a/src/Http/Headers/src/Microsoft.Net.Http.Headers.csproj +++ b/src/Http/Headers/src/Microsoft.Net.Http.Headers.csproj @@ -9,11 +9,10 @@ true http false - true - + diff --git a/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj b/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj index 26abf996c2..adea0a3059 100644 --- a/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj +++ b/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj @@ -14,7 +14,6 @@ Microsoft.AspNetCore.Http.HttpResponse aspnetcore $(NoWarn);CS1591 false - true @@ -23,9 +22,8 @@ Microsoft.AspNetCore.Http.HttpResponse + - - diff --git a/src/Http/Http.Extensions/src/Microsoft.AspNetCore.Http.Extensions.csproj b/src/Http/Http.Extensions/src/Microsoft.AspNetCore.Http.Extensions.csproj index f6e2da1920..73ba2b8a9c 100644 --- a/src/Http/Http.Extensions/src/Microsoft.AspNetCore.Http.Extensions.csproj +++ b/src/Http/Http.Extensions/src/Microsoft.AspNetCore.Http.Extensions.csproj @@ -8,7 +8,6 @@ true aspnetcore false - true @@ -18,8 +17,7 @@ - - + diff --git a/src/Http/Http/src/Microsoft.AspNetCore.Http.csproj b/src/Http/Http/src/Microsoft.AspNetCore.Http.csproj index ef3925b0d6..a7fb56774b 100644 --- a/src/Http/Http/src/Microsoft.AspNetCore.Http.csproj +++ b/src/Http/Http/src/Microsoft.AspNetCore.Http.csproj @@ -9,7 +9,6 @@ true aspnetcore false - true @@ -22,10 +21,9 @@ + + - - - diff --git a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj index ae3996e3c7..95a5f0327d 100644 --- a/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj +++ b/src/Http/Routing/src/Microsoft.AspNetCore.Routing.csproj @@ -12,7 +12,6 @@ Microsoft.AspNetCore.Routing.RouteCollection aspnetcore;routing true false - true @@ -31,11 +30,10 @@ Microsoft.AspNetCore.Routing.RouteCollection - - - - - + + + + diff --git a/src/Http/WebUtilities/src/Microsoft.AspNetCore.WebUtilities.csproj b/src/Http/WebUtilities/src/Microsoft.AspNetCore.WebUtilities.csproj index a64eb3bef8..63d3582d52 100644 --- a/src/Http/WebUtilities/src/Microsoft.AspNetCore.WebUtilities.csproj +++ b/src/Http/WebUtilities/src/Microsoft.AspNetCore.WebUtilities.csproj @@ -9,7 +9,6 @@ true aspnetcore false - true @@ -19,8 +18,7 @@ - - + diff --git a/src/Middleware/CORS/src/Microsoft.AspNetCore.Cors.csproj b/src/Middleware/CORS/src/Microsoft.AspNetCore.Cors.csproj index 31823a5384..656043ab16 100644 --- a/src/Middleware/CORS/src/Microsoft.AspNetCore.Cors.csproj +++ b/src/Middleware/CORS/src/Microsoft.AspNetCore.Cors.csproj @@ -11,17 +11,15 @@ Microsoft.AspNetCore.Cors.EnableCorsAttribute true aspnetcore;cors false - true - - - - - + + + + diff --git a/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj b/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj index fc4724f6e0..a8ac2a0901 100644 --- a/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj +++ b/src/Middleware/Diagnostics/src/Microsoft.AspNetCore.Diagnostics.csproj @@ -8,7 +8,6 @@ true aspnetcore;diagnostics false - true @@ -23,11 +22,10 @@ - - - - - + + + + diff --git a/src/Middleware/HealthChecks/src/Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj b/src/Middleware/HealthChecks/src/Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj index c4e859ed19..99c01627f6 100644 --- a/src/Middleware/HealthChecks/src/Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj +++ b/src/Middleware/HealthChecks/src/Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj @@ -8,16 +8,14 @@ true diagnostics;healthchecks false - true + + - - - diff --git a/src/Middleware/HostFiltering/src/Microsoft.AspNetCore.HostFiltering.csproj b/src/Middleware/HostFiltering/src/Microsoft.AspNetCore.HostFiltering.csproj index 2ec1e17645..b1098f3cea 100644 --- a/src/Middleware/HostFiltering/src/Microsoft.AspNetCore.HostFiltering.csproj +++ b/src/Middleware/HostFiltering/src/Microsoft.AspNetCore.HostFiltering.csproj @@ -9,14 +9,12 @@ true aspnetcore false - true + - - diff --git a/src/Middleware/HttpOverrides/src/Microsoft.AspNetCore.HttpOverrides.csproj b/src/Middleware/HttpOverrides/src/Microsoft.AspNetCore.HttpOverrides.csproj index 511ec8428f..aa225718c4 100644 --- a/src/Middleware/HttpOverrides/src/Microsoft.AspNetCore.HttpOverrides.csproj +++ b/src/Middleware/HttpOverrides/src/Microsoft.AspNetCore.HttpOverrides.csproj @@ -10,14 +10,12 @@ true aspnetcore;proxy;headers;xforwarded false - true - - - + + diff --git a/src/Middleware/HttpsPolicy/src/Microsoft.AspNetCore.HttpsPolicy.csproj b/src/Middleware/HttpsPolicy/src/Microsoft.AspNetCore.HttpsPolicy.csproj index 9e807899b0..c6c14dd30d 100644 --- a/src/Middleware/HttpsPolicy/src/Microsoft.AspNetCore.HttpsPolicy.csproj +++ b/src/Middleware/HttpsPolicy/src/Microsoft.AspNetCore.HttpsPolicy.csproj @@ -10,15 +10,13 @@ true aspnetcore;https;hsts false - true + + - - - diff --git a/src/Middleware/Localization/src/Microsoft.AspNetCore.Localization.csproj b/src/Middleware/Localization/src/Microsoft.AspNetCore.Localization.csproj index 49750865c4..20a32d0507 100644 --- a/src/Middleware/Localization/src/Microsoft.AspNetCore.Localization.csproj +++ b/src/Middleware/Localization/src/Microsoft.AspNetCore.Localization.csproj @@ -9,15 +9,13 @@ true aspnetcore;localization false - true - - - - + + + diff --git a/src/Middleware/ResponseCaching.Abstractions/src/Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj b/src/Middleware/ResponseCaching.Abstractions/src/Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj index 171db6b369..226e595816 100644 --- a/src/Middleware/ResponseCaching.Abstractions/src/Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj +++ b/src/Middleware/ResponseCaching.Abstractions/src/Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj @@ -7,11 +7,10 @@ true aspnetcore;cache;caching false - true - + diff --git a/src/Middleware/ResponseCaching/src/Microsoft.AspNetCore.ResponseCaching.csproj b/src/Middleware/ResponseCaching/src/Microsoft.AspNetCore.ResponseCaching.csproj index d7ed2100a9..2846ee5907 100644 --- a/src/Middleware/ResponseCaching/src/Microsoft.AspNetCore.ResponseCaching.csproj +++ b/src/Middleware/ResponseCaching/src/Microsoft.AspNetCore.ResponseCaching.csproj @@ -9,16 +9,14 @@ true aspnetcore;cache;caching false - true - - - + + diff --git a/src/Middleware/ResponseCompression/src/Microsoft.AspNetCore.ResponseCompression.csproj b/src/Middleware/ResponseCompression/src/Microsoft.AspNetCore.ResponseCompression.csproj index e7d03125a7..d63d281422 100644 --- a/src/Middleware/ResponseCompression/src/Microsoft.AspNetCore.ResponseCompression.csproj +++ b/src/Middleware/ResponseCompression/src/Microsoft.AspNetCore.ResponseCompression.csproj @@ -7,15 +7,13 @@ true aspnetcore false - true - - - + + diff --git a/src/Middleware/Rewrite/src/Microsoft.AspNetCore.Rewrite.csproj b/src/Middleware/Rewrite/src/Microsoft.AspNetCore.Rewrite.csproj index 5e6acc822f..1f23363732 100644 --- a/src/Middleware/Rewrite/src/Microsoft.AspNetCore.Rewrite.csproj +++ b/src/Middleware/Rewrite/src/Microsoft.AspNetCore.Rewrite.csproj @@ -11,17 +11,15 @@ true aspnetcore;urlrewrite;mod_rewrite false - true - - - - - + + + + diff --git a/src/Middleware/Session/src/Microsoft.AspNetCore.Session.csproj b/src/Middleware/Session/src/Microsoft.AspNetCore.Session.csproj index 4eb2cbef68..4763fe2b20 100644 --- a/src/Middleware/Session/src/Microsoft.AspNetCore.Session.csproj +++ b/src/Middleware/Session/src/Microsoft.AspNetCore.Session.csproj @@ -9,16 +9,14 @@ true aspnetcore;session;sessionstate false - true - - - - + + + diff --git a/src/Middleware/StaticFiles/src/Microsoft.AspNetCore.StaticFiles.csproj b/src/Middleware/StaticFiles/src/Microsoft.AspNetCore.StaticFiles.csproj index bfc3c8719e..52f563a36b 100644 --- a/src/Middleware/StaticFiles/src/Microsoft.AspNetCore.StaticFiles.csproj +++ b/src/Middleware/StaticFiles/src/Microsoft.AspNetCore.StaticFiles.csproj @@ -8,7 +8,6 @@ true aspnetcore;staticfiles false - true @@ -19,10 +18,9 @@ - - - - + + + diff --git a/src/Middleware/WebSockets/src/Microsoft.AspNetCore.WebSockets.csproj b/src/Middleware/WebSockets/src/Microsoft.AspNetCore.WebSockets.csproj index d87f72c751..74b48aea51 100644 --- a/src/Middleware/WebSockets/src/Microsoft.AspNetCore.WebSockets.csproj +++ b/src/Middleware/WebSockets/src/Microsoft.AspNetCore.WebSockets.csproj @@ -9,14 +9,12 @@ true aspnetcore false - true - - - + + diff --git a/src/Mvc/Mvc.Abstractions/src/Microsoft.AspNetCore.Mvc.Abstractions.csproj b/src/Mvc/Mvc.Abstractions/src/Microsoft.AspNetCore.Mvc.Abstractions.csproj index 6552972c8d..71d459fb80 100644 --- a/src/Mvc/Mvc.Abstractions/src/Microsoft.AspNetCore.Mvc.Abstractions.csproj +++ b/src/Mvc/Mvc.Abstractions/src/Microsoft.AspNetCore.Mvc.Abstractions.csproj @@ -9,7 +9,6 @@ Microsoft.AspNetCore.Mvc.IActionResult true aspnetcore;aspnetcoremvc false - true @@ -22,7 +21,7 @@ Microsoft.AspNetCore.Mvc.IActionResult - + diff --git a/src/Mvc/Mvc.Core/src/Microsoft.AspNetCore.Mvc.Core.csproj b/src/Mvc/Mvc.Core/src/Microsoft.AspNetCore.Mvc.Core.csproj index 46526209d6..4c3e760a90 100644 --- a/src/Mvc/Mvc.Core/src/Microsoft.AspNetCore.Mvc.Core.csproj +++ b/src/Mvc/Mvc.Core/src/Microsoft.AspNetCore.Mvc.Core.csproj @@ -16,7 +16,6 @@ Microsoft.AspNetCore.Mvc.RouteAttribute true aspnetcore;aspnetcoremvc false - true @@ -43,16 +42,15 @@ Microsoft.AspNetCore.Mvc.RouteAttribute - - - - + + + - - - + + + diff --git a/src/Mvc/Mvc.DataAnnotations/src/Microsoft.AspNetCore.Mvc.DataAnnotations.csproj b/src/Mvc/Mvc.DataAnnotations/src/Microsoft.AspNetCore.Mvc.DataAnnotations.csproj index d896e59ba4..dcd837d20b 100644 --- a/src/Mvc/Mvc.DataAnnotations/src/Microsoft.AspNetCore.Mvc.DataAnnotations.csproj +++ b/src/Mvc/Mvc.DataAnnotations/src/Microsoft.AspNetCore.Mvc.DataAnnotations.csproj @@ -7,12 +7,10 @@ true aspnetcore;aspnetcoremvc false - true - - + diff --git a/src/Mvc/Mvc.Localization/src/Microsoft.AspNetCore.Mvc.Localization.csproj b/src/Mvc/Mvc.Localization/src/Microsoft.AspNetCore.Mvc.Localization.csproj index b571ad70ca..e3f4cfd3c8 100644 --- a/src/Mvc/Mvc.Localization/src/Microsoft.AspNetCore.Mvc.Localization.csproj +++ b/src/Mvc/Mvc.Localization/src/Microsoft.AspNetCore.Mvc.Localization.csproj @@ -10,15 +10,14 @@ Microsoft.AspNetCore.Mvc.Localization.IViewLocalizer true aspnetcore;aspnetcoremvc;localization false - true - - - + + + diff --git a/src/Mvc/Mvc.Razor/src/Microsoft.AspNetCore.Mvc.Razor.csproj b/src/Mvc/Mvc.Razor/src/Microsoft.AspNetCore.Mvc.Razor.csproj index 4a7dd37297..e9fc306a9e 100644 --- a/src/Mvc/Mvc.Razor/src/Microsoft.AspNetCore.Mvc.Razor.csproj +++ b/src/Mvc/Mvc.Razor/src/Microsoft.AspNetCore.Mvc.Razor.csproj @@ -8,15 +8,13 @@ true aspnetcore;aspnetcoremvc;cshtml;razor false - true - - - + + diff --git a/src/Mvc/Mvc.TagHelpers/src/Microsoft.AspNetCore.Mvc.TagHelpers.csproj b/src/Mvc/Mvc.TagHelpers/src/Microsoft.AspNetCore.Mvc.TagHelpers.csproj index a4291cdbc5..4d31ad0585 100644 --- a/src/Mvc/Mvc.TagHelpers/src/Microsoft.AspNetCore.Mvc.TagHelpers.csproj +++ b/src/Mvc/Mvc.TagHelpers/src/Microsoft.AspNetCore.Mvc.TagHelpers.csproj @@ -7,7 +7,6 @@ aspnetcore;aspnetcoremvc;taghelper;taghelpers true false - true @@ -19,9 +18,8 @@ - - - - + + + diff --git a/src/Mvc/Mvc.ViewFeatures/src/Microsoft.AspNetCore.Mvc.ViewFeatures.csproj b/src/Mvc/Mvc.ViewFeatures/src/Microsoft.AspNetCore.Mvc.ViewFeatures.csproj index 06d70acbab..56f7a39218 100644 --- a/src/Mvc/Mvc.ViewFeatures/src/Microsoft.AspNetCore.Mvc.ViewFeatures.csproj +++ b/src/Mvc/Mvc.ViewFeatures/src/Microsoft.AspNetCore.Mvc.ViewFeatures.csproj @@ -15,7 +15,6 @@ aspnetcore;aspnetcoremvc true false - true @@ -26,10 +25,9 @@ + - - diff --git a/src/Mvc/Mvc/src/Microsoft.AspNetCore.Mvc.csproj b/src/Mvc/Mvc/src/Microsoft.AspNetCore.Mvc.csproj index 469e8ea754..fbc44beae3 100644 --- a/src/Mvc/Mvc/src/Microsoft.AspNetCore.Mvc.csproj +++ b/src/Mvc/Mvc/src/Microsoft.AspNetCore.Mvc.csproj @@ -7,7 +7,6 @@ aspnetcore;aspnetcoremvc true false - true @@ -19,9 +18,8 @@ - - - + + diff --git a/src/Razor/Razor/src/Microsoft.AspNetCore.Razor.csproj b/src/Razor/Razor/src/Microsoft.AspNetCore.Razor.csproj index 6ada5367af..9f8d7443c4 100644 --- a/src/Razor/Razor/src/Microsoft.AspNetCore.Razor.csproj +++ b/src/Razor/Razor/src/Microsoft.AspNetCore.Razor.csproj @@ -14,7 +14,6 @@ Microsoft.AspNetCore.Razor.TagHelpers.ITagHelper $(PackageTags);taghelper;taghelpers $(NoWarn);CS1591 false - true true @@ -22,8 +21,7 @@ Microsoft.AspNetCore.Razor.TagHelpers.ITagHelper - - + diff --git a/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj b/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj index 3174f810dd..e81a55f314 100644 --- a/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj +++ b/src/Security/Authentication/Core/src/Microsoft.AspNetCore.Authentication.csproj @@ -8,7 +8,6 @@ true aspnetcore;authentication;security false - true @@ -20,10 +19,9 @@ - - - - + + + diff --git a/src/Security/CookiePolicy/src/Microsoft.AspNetCore.CookiePolicy.csproj b/src/Security/CookiePolicy/src/Microsoft.AspNetCore.CookiePolicy.csproj index 20be02e4a5..d401e8d69f 100644 --- a/src/Security/CookiePolicy/src/Microsoft.AspNetCore.CookiePolicy.csproj +++ b/src/Security/CookiePolicy/src/Microsoft.AspNetCore.CookiePolicy.csproj @@ -8,14 +8,12 @@ true aspnetcore false - true - - - + + diff --git a/src/Servers/HttpSys/src/Microsoft.AspNetCore.Server.HttpSys.csproj b/src/Servers/HttpSys/src/Microsoft.AspNetCore.Server.HttpSys.csproj index 5ce3a5155a..06d5ad8b82 100644 --- a/src/Servers/HttpSys/src/Microsoft.AspNetCore.Server.HttpSys.csproj +++ b/src/Servers/HttpSys/src/Microsoft.AspNetCore.Server.HttpSys.csproj @@ -9,7 +9,6 @@ true aspnetcore;weblistener;httpsys false - true @@ -21,9 +20,8 @@ - - - + + diff --git a/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj b/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj index 901f954df6..c645b12741 100644 --- a/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj +++ b/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj @@ -11,7 +11,6 @@ true $(DefaultNetCoreTargetFramework) false - true @@ -38,11 +37,10 @@ - - - - - + + + + diff --git a/src/Servers/IIS/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration.csproj b/src/Servers/IIS/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration.csproj index 4fad3da051..addaf56ff2 100644 --- a/src/Servers/IIS/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration.csproj +++ b/src/Servers/IIS/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration.csproj @@ -9,7 +9,6 @@ aspnetcore;iis true false - true @@ -19,11 +18,10 @@ - - - - - + + + + diff --git a/src/Servers/Kestrel/Core/src/Microsoft.AspNetCore.Server.Kestrel.Core.csproj b/src/Servers/Kestrel/Core/src/Microsoft.AspNetCore.Server.Kestrel.Core.csproj index f36b501a52..6c18f1a078 100644 --- a/src/Servers/Kestrel/Core/src/Microsoft.AspNetCore.Server.Kestrel.Core.csproj +++ b/src/Servers/Kestrel/Core/src/Microsoft.AspNetCore.Server.Kestrel.Core.csproj @@ -9,7 +9,6 @@ true CS1591;$(NoWarn) false - true @@ -23,12 +22,11 @@ + + + - - - - - + diff --git a/src/Servers/Kestrel/Transport.Sockets/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj b/src/Servers/Kestrel/Transport.Sockets/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj index 217212a4ab..ecdca4391b 100644 --- a/src/Servers/Kestrel/Transport.Sockets/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj +++ b/src/Servers/Kestrel/Transport.Sockets/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj @@ -9,7 +9,6 @@ true CS1591;$(NoWarn) false - true @@ -24,8 +23,7 @@ - - + diff --git a/src/SignalR/common/Http.Connections/src/Microsoft.AspNetCore.Http.Connections.csproj b/src/SignalR/common/Http.Connections/src/Microsoft.AspNetCore.Http.Connections.csproj index c86676c7ec..1e8738d9a9 100644 --- a/src/SignalR/common/Http.Connections/src/Microsoft.AspNetCore.Http.Connections.csproj +++ b/src/SignalR/common/Http.Connections/src/Microsoft.AspNetCore.Http.Connections.csproj @@ -5,7 +5,6 @@ $(DefaultNetCoreTargetFramework) true false - true @@ -32,9 +31,8 @@ - - - + + diff --git a/src/SignalR/server/Core/src/Microsoft.AspNetCore.SignalR.Core.csproj b/src/SignalR/server/Core/src/Microsoft.AspNetCore.SignalR.Core.csproj index f24889b204..9a18d8ac74 100644 --- a/src/SignalR/server/Core/src/Microsoft.AspNetCore.SignalR.Core.csproj +++ b/src/SignalR/server/Core/src/Microsoft.AspNetCore.SignalR.Core.csproj @@ -6,7 +6,6 @@ true Microsoft.AspNetCore.SignalR false - true @@ -21,9 +20,8 @@ - - - + + From 016e3d6e208837e4dea98d28b5f77bb4d012190a Mon Sep 17 00:00:00 2001 From: William Godbe Date: Wed, 13 May 2020 12:35:53 -0700 Subject: [PATCH 16/17] [release/3.1] Move SDL validation to ringed release (#21153) * Move SDL validation to ringed release * Remove unneeded stuff * Add back variables * fixup * Add missing param --- .azure/pipelines/ci.yml | 17 ----------------- eng/sdl-tsa-vars.config | 12 ++++++++++++ 2 files changed, 12 insertions(+), 17 deletions(-) create mode 100644 eng/sdl-tsa-vars.config diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index a50a42de86..87d067bb56 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -73,8 +73,6 @@ variables: /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) /p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory) - # used for post-build phases, internal builds only - - group: DotNet-AspNet-SDLValidation-Params - ${{ if in(variables['Build.Reason'], 'PullRequest') }}: - name: _BuildArgs value: '' @@ -746,18 +744,3 @@ stages: # See https://github.com/dotnet/arcade/issues/2871 enableSymbolValidation: false publishInstallersAndChecksums: true - # This is to enable SDL runs part of Post-Build Validation Stage - SDLValidationParameters: - enable: false - continueOnError: false - params: ' -SourceToolsList @("policheck","credscan") - -TsaInstanceURL $(_TsaInstanceURL) - -TsaProjectName $(_TsaProjectName) - -TsaNotificationEmail $(_TsaNotificationEmail) - -TsaCodebaseAdmin $(_TsaCodebaseAdmin) - -TsaBugAreaPath $(_TsaBugAreaPath) - -TsaIterationPath $(_TsaIterationPath) - -TsaRepositoryName "AspNetCore" - -TsaCodebaseName "AspNetCore" - -TsaPublish $True - -PoliCheckAdditionalRunConfigParams @("UserExclusionPath < $(Build.SourcesDirectory)/eng/PoliCheckExclusions.xml")' diff --git a/eng/sdl-tsa-vars.config b/eng/sdl-tsa-vars.config new file mode 100644 index 0000000000..18d6a50c51 --- /dev/null +++ b/eng/sdl-tsa-vars.config @@ -0,0 +1,12 @@ +-SourceToolsList @("policheck","credscan") +-TsaInstanceURL https://devdiv.visualstudio.com/ +-TsaProjectName DEVDIV +-TsaNotificationEmail aspnetcore-build@microsoft.com +-TsaCodebaseAdmin REDMOND\kevinpi +-TsaBugAreaPath "DevDiv\ASP.NET Core" +-TsaIterationPath DevDiv +-TsaRepositoryName AspNetCore +-TsaCodebaseName AspNetCore +-TsaOnboard $True +-TsaPublish $True +-PoliCheckAdditionalRunConfigParams @("UserExclusionPath < $(Build.SourcesDirectory)/eng/PoliCheckExclusions.xml") From 8fba9b0c90ec8f7ffca7aa08edd17d9fb5b1246f Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 13 May 2020 22:23:30 -0700 Subject: [PATCH 17/17] Use ActivatorUtilities shared source --- .../src/Microsoft.AspNetCore.Http.Abstractions.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj b/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj index 166634bfb7..5216c69c07 100644 --- a/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj +++ b/src/Http/Http.Abstractions/src/Microsoft.AspNetCore.Http.Abstractions.csproj @@ -18,11 +18,11 @@ Microsoft.AspNetCore.Http.HttpResponse + -