diff --git a/eng/PatchConfig.props b/eng/PatchConfig.props
index bf1e94ff22..efc05a36c7 100644
--- a/eng/PatchConfig.props
+++ b/eng/PatchConfig.props
@@ -56,5 +56,10 @@ Later on, this will be checked using this condition:
Microsoft.AspNetCore.AzureAppServices.SiteExtension;
+
+
+ Microsoft.AspNetCore.Mvc.Api.Analyzers;
+
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 5e06dbf685..10edfb8486 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -57,340 +57,340 @@
https://github.com/aspnet/EntityFrameworkCore
b9c9b57de1ba41f75427db0a51b2e897d0354656
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
https://github.com/dotnet/corefx
a28176b5ec68b6da1472934fe9493790d1665cae
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/core-setup
- 63abc77da6d99470caa5bfa0465afe244105e595
+ 372355272004e08c035c61077f5d6ca4d8f9cd22
-
+
https://github.com/dotnet/core-setup
- 63abc77da6d99470caa5bfa0465afe244105e595
+ 372355272004e08c035c61077f5d6ca4d8f9cd22
-
+
https://github.com/dotnet/core-setup
- 63abc77da6d99470caa5bfa0465afe244105e595
+ 372355272004e08c035c61077f5d6ca4d8f9cd22
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
https://github.com/dotnet/arcade
@@ -404,9 +404,9 @@
https://github.com/dotnet/arcade
e6a5d5f970bb872451c6310ae34eda31041fb552
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
diff --git a/eng/Versions.props b/eng/Versions.props
index 1755801069..3ff25c6135 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -23,95 +23,95 @@
1.0.0-beta.19302.2
- 3.0.0-preview6-27730-01
- 3.0.0-preview6-27730-01
- 2.1.0-preview6-27730-01
+ 3.0.0-preview6-27803-13
+ 3.0.0-preview6-27803-13
+ 2.1.0-preview6-27803-13
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
4.7.0-preview6.19264.9
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 1.7.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 1.7.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
- 3.0.0-preview6.19279.8
+ 3.0.0-preview6.19303.8
0.10.0-preview7.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
3.0.0-preview7.19303.12
3.0.0-preview7.19303.12
@@ -180,9 +180,9 @@
0.10.13
4.2.1
4.2.1
- 3.7.0
- 0.1.21-dev201905010701
- 1.20.0-pre3
+ 3.8.0
+ 0.1.21-pre1
+ 1.21.0
3.0.0-preview3.4
3.0.0-preview3.4
3.0.0-preview3.4
diff --git a/src/Components/Blazor/Build/src/targets/BuiltInBclLinkerDescriptor.xml b/src/Components/Blazor/Build/src/targets/BuiltInBclLinkerDescriptor.xml
index 4b442b1bb8..32533df8ca 100644
--- a/src/Components/Blazor/Build/src/targets/BuiltInBclLinkerDescriptor.xml
+++ b/src/Components/Blazor/Build/src/targets/BuiltInBclLinkerDescriptor.xml
@@ -13,5 +13,9 @@
+
+
+
+
diff --git a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs
index 382346efce..7bdacfbc4b 100644
--- a/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs
+++ b/src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs
@@ -155,6 +155,7 @@ namespace Microsoft.AspNetCore.Components
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, int existingValue) { throw null; }
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, long existingValue) { throw null; }
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, bool? existingValue) { throw null; }
+ public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, System.DateTime? existingValue) { throw null; }
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, decimal? existingValue) { throw null; }
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, double? existingValue) { throw null; }
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, int? existingValue) { throw null; }
@@ -162,7 +163,7 @@ namespace Microsoft.AspNetCore.Components
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, float? existingValue) { throw null; }
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, float existingValue) { throw null; }
public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, string existingValue) { throw null; }
- public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, T existingValue) where T : struct, System.Enum { throw null; }
+ public static Microsoft.AspNetCore.Components.EventCallback CreateBinder(this Microsoft.AspNetCore.Components.EventCallbackFactory factory, object receiver, System.Action setter, T existingValue) { throw null; }
}
public static partial class EventCallbackFactoryUIEventArgsExtensions
{
diff --git a/src/Components/Components/src/EventCallbackFactoryBinderExtensions.cs b/src/Components/Components/src/EventCallbackFactoryBinderExtensions.cs
index ba0a23dd0a..16fe53ad26 100644
--- a/src/Components/Components/src/EventCallbackFactoryBinderExtensions.cs
+++ b/src/Components/Components/src/EventCallbackFactoryBinderExtensions.cs
@@ -2,13 +2,27 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
+using System.Collections.Concurrent;
+using System.ComponentModel;
+using System.Diagnostics;
using System.Globalization;
+using System.Reflection;
namespace Microsoft.AspNetCore.Components
{
///
/// Contains extension methods for two-way binding using . For internal use only.
///
+ //
+ // NOTE: for number parsing, the HTML5 spec dictates that the DOM will represent
+ // number values as floating point numbers using `.` as the period separator. This is NOT culture senstive.
+ // Put another way, the user might see `,` as their decimal separator, but the value available in events
+ // to JS code is always simpilar to what .NET parses with InvariantCulture.
+ //
+ // See: https://www.w3.org/TR/html5/sec-forms.html#number-state-typenumber
+ // See: https://www.w3.org/TR/html5/infrastructure.html#valid-floating-point-number
+ //
+ // For now we're not necessarily handling this correctly since we parse the same way for number and text.
public static class EventCallbackFactoryBinderExtensions
{
private delegate bool BindConverter(object obj, out T value);
@@ -53,7 +67,7 @@ namespace Microsoft.AspNetCore.Components
return false;
}
- if (!int.TryParse(text, out var converted))
+ if (!int.TryParse(text, NumberStyles.Integer, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -72,7 +86,7 @@ namespace Microsoft.AspNetCore.Components
return true;
}
- if (!int.TryParse(text, out var converted))
+ if (!int.TryParse(text, NumberStyles.Integer, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -94,7 +108,7 @@ namespace Microsoft.AspNetCore.Components
return false;
}
- if (!long.TryParse(text, out var converted))
+ if (!long.TryParse(text, NumberStyles.Integer, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -113,7 +127,7 @@ namespace Microsoft.AspNetCore.Components
return true;
}
- if (!long.TryParse(text, out var converted))
+ if (!long.TryParse(text, NumberStyles.Integer, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -135,7 +149,7 @@ namespace Microsoft.AspNetCore.Components
return false;
}
- if (!float.TryParse(text, out var converted))
+ if (!float.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -154,7 +168,7 @@ namespace Microsoft.AspNetCore.Components
return true;
}
- if (!float.TryParse(text, out var converted))
+ if (!float.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -176,7 +190,7 @@ namespace Microsoft.AspNetCore.Components
return false;
}
- if (!double.TryParse(text, out var converted))
+ if (!double.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -195,7 +209,7 @@ namespace Microsoft.AspNetCore.Components
return true;
}
- if (!double.TryParse(text, out var converted))
+ if (!double.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -217,7 +231,7 @@ namespace Microsoft.AspNetCore.Components
return false;
}
- if (!decimal.TryParse(text, out var converted))
+ if (!decimal.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -236,7 +250,7 @@ namespace Microsoft.AspNetCore.Components
return true;
}
- if (!decimal.TryParse(text, out var converted))
+ if (!decimal.TryParse(text, NumberStyles.Number, CultureInfo.CurrentCulture, out var converted))
{
value = default;
return false;
@@ -246,28 +260,83 @@ namespace Microsoft.AspNetCore.Components
return true;
}
- private static class EnumConverter where T : struct, Enum
+ private static BindConverter ConvertToDateTime = ConvertToDateTimeCore;
+ private static BindConverter ConvertToNullableDateTime = ConvertToNullableDateTimeCore;
+
+ private static bool ConvertToDateTimeCore(object obj, out DateTime value)
{
- public static readonly BindConverter Convert = ConvertCore;
-
- public static bool ConvertCore(object obj, out T value)
+ var text = (string)obj;
+ if (string.IsNullOrEmpty(text))
{
- var text = (string)obj;
- if (string.IsNullOrEmpty(text))
- {
- value = default;
- return true;
- }
+ value = default;
+ return false;
+ }
- if (!Enum.TryParse(text, out var converted))
- {
- value = default;
- return false;
- }
+ if (!DateTime.TryParse(text, CultureInfo.CurrentCulture, DateTimeStyles.None, out var converted))
+ {
+ value = default;
+ return false;
+ }
- value = converted;
+ value = converted;
+ return true;
+ }
+
+ private static bool ConvertToNullableDateTimeCore(object obj, out DateTime? value)
+ {
+ var text = (string)obj;
+ if (string.IsNullOrEmpty(text))
+ {
+ value = default;
return true;
}
+
+ if (!DateTime.TryParse(text, CultureInfo.CurrentCulture, DateTimeStyles.None, out var converted))
+ {
+ value = default;
+ return false;
+ }
+
+ value = converted;
+ return true;
+ }
+
+ private static bool ConvertToEnum(object obj, out T value) where T : struct, Enum
+ {
+ var text = (string)obj;
+ if (string.IsNullOrEmpty(text))
+ {
+ value = default;
+ return true;
+ }
+
+ if (!Enum.TryParse(text, out var converted))
+ {
+ value = default;
+ return false;
+ }
+
+ value = converted;
+ return true;
+ }
+
+ private static bool ConvertToNullableEnum(object obj, out Nullable value) where T : struct, Enum
+ {
+ var text = (string)obj;
+ if (string.IsNullOrEmpty(text))
+ {
+ value = default;
+ return true;
+ }
+
+ if (!Enum.TryParse(text, out var converted))
+ {
+ value = default;
+ return false;
+ }
+
+ value = converted;
+ return true;
}
///
@@ -284,7 +353,6 @@ namespace Microsoft.AspNetCore.Components
Action setter,
string existingValue)
{
- ;
return CreateBinderCore(factory, receiver, setter, ConvertToString);
}
@@ -489,15 +557,6 @@ namespace Microsoft.AspNetCore.Components
Action setter,
decimal? existingValue)
{
- Func
+
+ Generic bind (int):
+
+ @textboxGenericIntValue
+
+
+
+ Generic bind (guid):
+
+ @textboxGenericGuidValue
+
+
+
Text Area
Initially blank:
@@ -138,36 +151,39 @@
@code {
- string textboxInitiallyBlankValue = null;
- string textboxInitiallyPopulatedValue = "Hello";
+string textboxInitiallyBlankValue = null;
+string textboxInitiallyPopulatedValue = "Hello";
- string textAreaInitiallyBlankValue = null;
- string textAreaInitiallyPopulatedValue = "Hello";
+string textAreaInitiallyBlankValue = null;
+string textAreaInitiallyPopulatedValue = "Hello";
- bool? checkboxInitiallyNullValue = null;
- bool checkboxInitiallyUncheckedValue = false;
- bool checkboxInitiallyCheckedValue = true;
+bool? checkboxInitiallyNullValue = null;
+bool checkboxInitiallyUncheckedValue = false;
+bool checkboxInitiallyCheckedValue = true;
- int textboxIntValue = -42;
- int? textboxNullableIntValue = null;
- long textboxLongValue = 3_000_000_000;
- long? textboxNullableLongValue = null;
- float textboxFloatValue = 3.141f;
- float? textboxNullableFloatValue = null;
- double textboxDoubleValue = 3.14159265359d;
- double? textboxNullableDoubleValue = null;
- decimal textboxDecimalValue = 0.0000000000000000000000000001M;
- decimal? textboxNullableDecimalValue = null;
- decimal textboxDecimalInvalidValue = 0.0000000000000000000000000001M;
- decimal? textboxNullableDecimalInvalidValue = null;
+int textboxIntValue = -42;
+int? textboxNullableIntValue = null;
+long textboxLongValue = 3_000_000_000;
+long? textboxNullableLongValue = null;
+float textboxFloatValue = 3.141f;
+float? textboxNullableFloatValue = null;
+double textboxDoubleValue = 3.14159265359d;
+double? textboxNullableDoubleValue = null;
+decimal textboxDecimalValue = 0.0000000000000000000000000001M;
+decimal? textboxNullableDecimalValue = null;
+decimal textboxDecimalInvalidValue = 0.0000000000000000000000000001M;
+decimal? textboxNullableDecimalInvalidValue = null;
- bool includeFourthOption = false;
- enum SelectableValue { First, Second, Third, Fourth }
- SelectableValue selectValue = SelectableValue.Second;
+int textboxGenericIntValue = -42;
+Guid textboxGenericGuidValue = Guid.Empty;
- void AddAndSelectNewSelectOption()
- {
- includeFourthOption = true;
- selectValue = SelectableValue.Fourth;
- }
+bool includeFourthOption = false;
+enum SelectableValue { First, Second, Third, Fourth }
+SelectableValue selectValue = SelectableValue.Second;
+
+void AddAndSelectNewSelectOption()
+{
+ includeFourthOption = true;
+ selectValue = SelectableValue.Fourth;
+}
}
diff --git a/src/Components/test/testassets/BasicTestApp/BindGenericComponent.razor b/src/Components/test/testassets/BasicTestApp/BindGenericComponent.razor
new file mode 100644
index 0000000000..54072b918e
--- /dev/null
+++ b/src/Components/test/testassets/BasicTestApp/BindGenericComponent.razor
@@ -0,0 +1,9 @@
+@typeparam TValue
+
+(this, _ => ValueChanged.InvokeAsync(_), Value))" />
+
+@code {
+ [Parameter] string Id { get; set; }
+ [Parameter] TValue Value { get; set; }
+ [Parameter] EventCallback ValueChanged { get; set; }
+}
diff --git a/src/Hosting/test/FunctionalTests/ShutdownTests.cs b/src/Hosting/test/FunctionalTests/ShutdownTests.cs
index 82e707487d..4c94b289a7 100644
--- a/src/Hosting/test/FunctionalTests/ShutdownTests.cs
+++ b/src/Hosting/test/FunctionalTests/ShutdownTests.cs
@@ -28,6 +28,7 @@ namespace Microsoft.AspNetCore.Hosting.FunctionalTests
[ConditionalFact]
[OSSkipCondition(OperatingSystems.Windows)]
[OSSkipCondition(OperatingSystems.MacOSX)]
+ [Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2577", FlakyOn.All)]
public async Task ShutdownTestRun()
{
await ExecuteShutdownTest(nameof(ShutdownTestRun), "Run");
diff --git a/src/Mvc/Mvc.Core/test/ModelBinding/Binders/FloatingPointTypeModelBinderTestOfT.cs b/src/Mvc/Mvc.Core/test/ModelBinding/Binders/FloatingPointTypeModelBinderTestOfT.cs
index 0a8f69b60f..ab30a8005b 100644
--- a/src/Mvc/Mvc.Core/test/ModelBinding/Binders/FloatingPointTypeModelBinderTestOfT.cs
+++ b/src/Mvc/Mvc.Core/test/ModelBinding/Binders/FloatingPointTypeModelBinderTestOfT.cs
@@ -5,6 +5,7 @@ using System;
using System.Globalization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing;
+using Microsoft.AspNetCore.Testing.xunit;
using Xunit;
namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
@@ -343,6 +344,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
[Theory]
[MemberData(nameof(ConvertibleTypeData))]
+ [Flaky("https://github.com/aspnet/AspNetCore-Internal/issues/2626", FlakyOn.AzP.Linux)]
public async Task BindModel_ReturnsModel_IfAttemptedValueIsValid_FrenchThirtyTwoThousandPointOne(Type destinationType)
{
// Arrange
diff --git a/src/Mvc/Mvc.ViewFeatures/test/Rendering/JsonHelperTestBase.cs b/src/Mvc/Mvc.ViewFeatures/test/Rendering/JsonHelperTestBase.cs
index 90d994af41..cfbabe735b 100644
--- a/src/Mvc/Mvc.ViewFeatures/test/Rendering/JsonHelperTestBase.cs
+++ b/src/Mvc/Mvc.ViewFeatures/test/Rendering/JsonHelperTestBase.cs
@@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Mvc.Rendering
protected abstract IJsonHelper GetJsonHelper();
[Fact]
- public void Serialize_EscapesHtmlByDefault()
+ public virtual void Serialize_EscapesHtmlByDefault()
{
// Arrange
var helper = GetJsonHelper();
diff --git a/src/Mvc/Mvc.ViewFeatures/test/Rendering/SystemTextJsonHelperTest.cs b/src/Mvc/Mvc.ViewFeatures/test/Rendering/SystemTextJsonHelperTest.cs
index 4550976a40..e754844dec 100644
--- a/src/Mvc/Mvc.ViewFeatures/test/Rendering/SystemTextJsonHelperTest.cs
+++ b/src/Mvc/Mvc.ViewFeatures/test/Rendering/SystemTextJsonHelperTest.cs
@@ -2,7 +2,9 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Text.Json.Serialization;
+using Microsoft.AspNetCore.Html;
using Microsoft.Extensions.Options;
+using Xunit;
namespace Microsoft.AspNetCore.Mvc.Rendering
{
@@ -13,5 +15,24 @@ namespace Microsoft.AspNetCore.Mvc.Rendering
var options = new JsonOptions() { JsonSerializerOptions = { PropertyNamingPolicy = JsonNamingPolicy.CamelCase } };
return new SystemTextJsonHelper(Options.Create(options));
}
+
+ [Fact]
+ public override void Serialize_EscapesHtmlByDefault()
+ {
+ // Arrange
+ var helper = GetJsonHelper();
+ var obj = new
+ {
+ HTML = "John Doe"
+ };
+ var expectedOutput = "{\"html\":\"\\u003cb\\u003eJohn Doe\\u003c\\u002fb\\u003e\"}";
+
+ // Act
+ var result = helper.Serialize(obj);
+
+ // Assert
+ var htmlString = Assert.IsType(result);
+ Assert.Equal(expectedOutput, htmlString.ToString());
+ }
}
}
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_CookieConsentPartial.cshtml b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_CookieConsentPartial.cshtml
deleted file mode 100644
index 999a0ed5bf..0000000000
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_CookieConsentPartial.cshtml
+++ /dev/null
@@ -1,25 +0,0 @@
-@using Microsoft.AspNetCore.Http.Features
-
-@{
- var consentFeature = Context.Features.Get();
- var showBanner = !consentFeature?.CanTrack ?? false;
- var cookieString = consentFeature?.CreateConsentCookie();
-}
-
-@if (showBanner)
-{
-
- Use this space to summarize your privacy and cookie use policy.
Learn More.
-
-
-
-}
diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_Layout.cshtml b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_Layout.cshtml
index a02915b198..198a48ef80 100644
--- a/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_Layout.cshtml
+++ b/src/ProjectTemplates/Web.ProjectTemplates/content/RazorPagesWeb-CSharp/Pages/Shared/_Layout.cshtml
@@ -34,13 +34,9 @@
-
-
+