diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b6ad95fd684c..981468d74b21 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -9,304 +9,304 @@ --> - + https://github.com/dotnet/efcore - 7af5e17706cf5414b273d1aa4a2d45c2b98cffd0 + 99166b37d72cb6adca7fe1cb9f8511b8a6dd3192 - + https://github.com/dotnet/efcore - 7af5e17706cf5414b273d1aa4a2d45c2b98cffd0 + 99166b37d72cb6adca7fe1cb9f8511b8a6dd3192 - + https://github.com/dotnet/efcore - 7af5e17706cf5414b273d1aa4a2d45c2b98cffd0 + 99166b37d72cb6adca7fe1cb9f8511b8a6dd3192 - + https://github.com/dotnet/efcore - 7af5e17706cf5414b273d1aa4a2d45c2b98cffd0 + 99166b37d72cb6adca7fe1cb9f8511b8a6dd3192 - + https://github.com/dotnet/efcore - 7af5e17706cf5414b273d1aa4a2d45c2b98cffd0 + 99166b37d72cb6adca7fe1cb9f8511b8a6dd3192 - + https://github.com/dotnet/efcore - 7af5e17706cf5414b273d1aa4a2d45c2b98cffd0 + 99166b37d72cb6adca7fe1cb9f8511b8a6dd3192 - + https://github.com/dotnet/efcore - 7af5e17706cf5414b273d1aa4a2d45c2b98cffd0 + 99166b37d72cb6adca7fe1cb9f8511b8a6dd3192 - + https://github.com/dotnet/efcore - 7af5e17706cf5414b273d1aa4a2d45c2b98cffd0 + 99166b37d72cb6adca7fe1cb9f8511b8a6dd3192 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/emsdk - e51b2a920817aec200d7306b95f616f9451d47a3 + 4352f818926282e9d5ecbc9d8a411e006d5a7853 - + https://github.com/dotnet/emsdk - e51b2a920817aec200d7306b95f616f9451d47a3 + 4352f818926282e9d5ecbc9d8a411e006d5a7853 - + https://github.com/dotnet/emsdk - e51b2a920817aec200d7306b95f616f9451d47a3 + 4352f818926282e9d5ecbc9d8a411e006d5a7853 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 - + https://github.com/dotnet/runtime - 355eff52bed00e7ca9d4a6d769ddbe2bbadbea47 + d25620b3fe5fba7b8fd7065f2d5947d0a20c6a30 https://github.com/dotnet/arcade diff --git a/eng/Versions.props b/eng/Versions.props index 3d653a726e61..1b22b4921d27 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -65,81 +65,81 @@ --> - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21212.1 - 6.0.0-preview.4.21212.1 - 6.0.0-preview.4.21212.1 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 - 6.0.0-preview.4.21211.7 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.5.21216.2 + 6.0.0-preview.5.21216.2 + 6.0.0-preview.5.21216.2 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 + 6.0.0-preview.4.21215.13 - 6.0.0-preview.4.21211.7 + 6.0.0-preview.4.21215.13 - 6.0.0-preview.4.21212.2 - 6.0.0-preview.4.21212.2 - 6.0.0-preview.4.21212.2 - 6.0.0-preview.4.21212.2 - 6.0.0-preview.4.21212.2 - 6.0.0-preview.4.21212.2 - 6.0.0-preview.4.21212.2 - 6.0.0-preview.4.21212.2 + 6.0.0-preview.4.21215.1 + 6.0.0-preview.4.21215.1 + 6.0.0-preview.4.21215.1 + 6.0.0-preview.4.21215.1 + 6.0.0-preview.4.21215.1 + 6.0.0-preview.4.21215.1 + 6.0.0-preview.4.21215.1 + 6.0.0-preview.4.21215.1 6.0.0-beta.21209.17 @@ -206,8 +206,8 @@ 1.0.705.50 1.4.0 6.10.0 - 5.9.0 - 5.9.0 + 5.10.0-preview.2.7203 + 5.10.0-preview.2.7203 5.0.0-alpha.20560.6 2.1.1 diff --git a/global.json b/global.json index 80a4bed0a310..2769795efc49 100644 --- a/global.json +++ b/global.json @@ -1,9 +1,9 @@ { "sdk": { - "version": "6.0.100-preview.3.21168.19" + "version": "6.0.100-preview.4.21216.8" }, "tools": { - "dotnet": "6.0.100-preview.3.21168.19", + "dotnet": "6.0.100-preview.4.21216.8", "runtimes": { "dotnet/x64": [ "2.1.25", diff --git a/src/Components/WebAssembly/testassets/WasmLinkerTest/WasmLinkerTest.csproj b/src/Components/WebAssembly/testassets/WasmLinkerTest/WasmLinkerTest.csproj index 978ad91b8215..94c22eb57ff4 100644 --- a/src/Components/WebAssembly/testassets/WasmLinkerTest/WasmLinkerTest.csproj +++ b/src/Components/WebAssembly/testassets/WasmLinkerTest/WasmLinkerTest.csproj @@ -3,6 +3,7 @@ $(DefaultNetCoreTargetFramework) browser-wasm true + true diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/ObjectResultExecutor.cs b/src/Mvc/Mvc.Core/src/Infrastructure/ObjectResultExecutor.cs index d4a634d4e94d..d1005b9144b7 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/ObjectResultExecutor.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/ObjectResultExecutor.cs @@ -21,8 +21,6 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure /// public class ObjectResultExecutor : IActionResultExecutor { - private readonly AsyncEnumerableReader _asyncEnumerableReaderFactory; - /// /// Creates a new . /// @@ -54,8 +52,6 @@ public ObjectResultExecutor( FormatterSelector = formatterSelector; WriterFactory = writerFactory.CreateWriter; Logger = loggerFactory.CreateLogger(); - var options = mvcOptions?.Value ?? throw new ArgumentNullException(nameof(mvcOptions)); - _asyncEnumerableReaderFactory = new AsyncEnumerableReader(options); } /// @@ -103,23 +99,9 @@ public virtual Task ExecuteAsync(ActionContext context, ObjectResult result) } var value = result.Value; - - if (value != null && _asyncEnumerableReaderFactory.TryGetReader(value.GetType(), out var reader)) - { - return ExecuteAsyncEnumerable(context, result, value, reader); - } - return ExecuteAsyncCore(context, result, objectType, value); } - private async Task ExecuteAsyncEnumerable(ActionContext context, ObjectResult result, object asyncEnumerable, Func> reader) - { - Log.BufferingAsyncEnumerable(Logger, asyncEnumerable); - - var enumerated = await reader(asyncEnumerable); - await ExecuteAsyncCore(context, result, enumerated.GetType(), enumerated); - } - private Task ExecuteAsyncCore(ActionContext context, ObjectResult result, Type? objectType, object? value) { var formatterContext = new OutputFormatterWriteContext( @@ -166,21 +148,7 @@ private static void InferContentTypes(ActionContext context, ObjectResult result } } - private static class Log - { - private static readonly Action _bufferingAsyncEnumerable = LoggerMessage.Define( - LogLevel.Debug, - new EventId(1, "BufferingAsyncEnumerable"), - "Buffering IAsyncEnumerable instance of type '{Type}'.", - skipEnabledCheck: true); - - public static void BufferingAsyncEnumerable(ILogger logger, object asyncEnumerable) - { - if (logger.IsEnabled(LogLevel.Debug)) - { - _bufferingAsyncEnumerable(logger, asyncEnumerable.GetType().FullName, null); - } - } - } + // Removed Log. + // new EventId(1, "BufferingAsyncEnumerable") } } diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/SystemTextJsonResultExecutor.cs b/src/Mvc/Mvc.Core/src/Infrastructure/SystemTextJsonResultExecutor.cs index 563927356d0a..5c7c6e8b5b7e 100644 --- a/src/Mvc/Mvc.Core/src/Infrastructure/SystemTextJsonResultExecutor.cs +++ b/src/Mvc/Mvc.Core/src/Infrastructure/SystemTextJsonResultExecutor.cs @@ -69,12 +69,6 @@ public async Task ExecuteAsync(ActionContext context, JsonResult result) Log.JsonResultExecuting(_logger, result.Value); var value = result.Value; - if (value != null && _asyncEnumerableReaderFactory.TryGetReader(value.GetType(), out var reader)) - { - Log.BufferingAsyncEnumerable(_logger, value); - value = await reader(value); - } - var objectType = value?.GetType() ?? typeof(object); // Keep this code in sync with SystemTextJsonOutputFormatter @@ -147,11 +141,7 @@ private static class Log "Executing JsonResult, writing value of type '{Type}'.", skipEnabledCheck: true); - private static readonly Action _bufferingAsyncEnumerable = LoggerMessage.Define( - LogLevel.Debug, - new EventId(2, "BufferingAsyncEnumerable"), - "Buffering IAsyncEnumerable instance of type '{Type}'.", - skipEnabledCheck: true); + // EventId 2 BufferingAsyncEnumerable public static void JsonResultExecuting(ILogger logger, object? value) { @@ -161,14 +151,6 @@ public static void JsonResultExecuting(ILogger logger, object? value) _jsonResultExecuting(logger, type, null); } } - - public static void BufferingAsyncEnumerable(ILogger logger, object asyncEnumerable) - { - if (logger.IsEnabled(LogLevel.Debug)) - { - _bufferingAsyncEnumerable(logger, asyncEnumerable.GetType().FullName, null); - } - } } } } diff --git a/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs b/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs index 35ab869d9b01..b4d96cbad7ef 100644 --- a/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs +++ b/src/Mvc/Mvc.Core/test/Formatters/SystemTextJsonOutputFormatterTest.cs @@ -1,8 +1,10 @@ -// 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; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; @@ -81,6 +83,36 @@ public async Task WriteResponseBodyAsync_WithNonUtf8Encoding_FormattingErrorsAre await Assert.ThrowsAsync(() => formatter.WriteResponseBodyAsync(outputFormatterContext, Encoding.GetEncoding("utf-16"))); } + [Fact] + public async Task WriteResponseBodyAsync_ForLargeAsyncEnumerable() + { + // Arrange + var expected = new MemoryStream(); + await JsonSerializer.SerializeAsync(expected, LargeAsync(), new JsonSerializerOptions(JsonSerializerDefaults.Web)); + var formatter = GetOutputFormatter(); + var mediaType = MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + var encoding = CreateOrGetSupportedEncoding(formatter, "utf-8", isDefaultEncoding: true); + + var body = new MemoryStream(); + var actionContext = GetActionContext(mediaType, body); + + var asyncEnumerable = LargeAsync(); + var outputFormatterContext = new OutputFormatterWriteContext( + actionContext.HttpContext, + new TestHttpResponseStreamWriterFactory().CreateWriter, + asyncEnumerable.GetType(), + asyncEnumerable) + { + ContentType = new StringSegment(mediaType.ToString()), + }; + + // Act + await formatter.WriteResponseBodyAsync(outputFormatterContext, Encoding.GetEncoding("utf-8")); + + // Assert + Assert.Equal(expected.ToArray(), body.ToArray()); + } + private class Person { public string Name { get; set; } @@ -108,5 +140,15 @@ public override void Write(Utf8JsonWriter writer, ThrowingFormatterModel value, throw new TimeZoneNotFoundException(); } } + + private static async IAsyncEnumerable LargeAsync() + { + await Task.Yield(); + // MvcOptions.MaxIAsyncEnumerableBufferLimit is 8192. Pick some value larger than that. + foreach (var i in Enumerable.Range(0, 9000)) + { + yield return i; + } + } } } diff --git a/src/Mvc/Mvc.Core/test/Infrastructure/AsyncEnumerableReaderTest.cs b/src/Mvc/Mvc.Core/test/Infrastructure/AsyncEnumerableReaderTest.cs index daf1e98d1f5e..63e27aea006a 100644 --- a/src/Mvc/Mvc.Core/test/Infrastructure/AsyncEnumerableReaderTest.cs +++ b/src/Mvc/Mvc.Core/test/Infrastructure/AsyncEnumerableReaderTest.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; @@ -190,6 +190,19 @@ public async Task Reader_ThrowsIfBufferLimitIsReached() Assert.Equal(expected, ex.Message); } + [Fact] + public async Task Reader_ThrowsIfIAsyncEnumerableThrows() + { + // Arrange + var enumerable = ThrowingAsyncEnumerable(); + var options = new MvcOptions(); + var readerFactory = new AsyncEnumerableReader(options); + + // Act & Assert + Assert.True(readerFactory.TryGetReader(enumerable.GetType(), out var reader)); + await Assert.ThrowsAsync(() => reader(enumerable)); + } + public static async IAsyncEnumerable TestEnumerable(int count = 3) { await Task.Yield(); @@ -225,5 +238,18 @@ public IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellatio IAsyncEnumerator IAsyncEnumerable.GetAsyncEnumerator(CancellationToken cancellationToken) => GetAsyncEnumerator(cancellationToken); } + + private static async IAsyncEnumerable ThrowingAsyncEnumerable() + { + await Task.Yield(); + for (var i = 0; i < 10; i++) + { + yield return $"Hello {i}"; + if (i == 5) + { + throw new TimeZoneNotFoundException(); + } + } + } } } diff --git a/src/Mvc/Mvc.Core/test/Infrastructure/JsonResultExecutorTestBase.cs b/src/Mvc/Mvc.Core/test/Infrastructure/JsonResultExecutorTestBase.cs index cb5d3f18970d..80ea0c5a8bb3 100644 --- a/src/Mvc/Mvc.Core/test/Infrastructure/JsonResultExecutorTestBase.cs +++ b/src/Mvc/Mvc.Core/test/Infrastructure/JsonResultExecutorTestBase.cs @@ -333,7 +333,7 @@ public async Task ExecuteAsync_WithNullValue() public async Task ExecuteAsync_SerializesAsyncEnumerables() { // Arrange - var expected = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(new[] { "Hello", "world" })); + var expected = JsonSerializer.Serialize(new[] { "Hello", "world" }); var context = GetActionContext(); var result = new JsonResult(TestAsyncEnumerable()); @@ -344,7 +344,7 @@ public async Task ExecuteAsync_SerializesAsyncEnumerables() // Assert var written = GetWrittenBytes(context.HttpContext); - Assert.Equal(expected, written); + Assert.Equal(expected, Encoding.UTF8.GetString(written)); } [Fact] diff --git a/src/Mvc/Mvc.Core/test/Infrastructure/ObjectResultExecutorTest.cs b/src/Mvc/Mvc.Core/test/Infrastructure/ObjectResultExecutorTest.cs index dd36fbe7dc92..ce4848879728 100644 --- a/src/Mvc/Mvc.Core/test/Infrastructure/ObjectResultExecutorTest.cs +++ b/src/Mvc/Mvc.Core/test/Infrastructure/ObjectResultExecutorTest.cs @@ -459,106 +459,6 @@ public async Task ObjectResult_NullValue() Assert.Null(formatterContext.Object); } - [Fact] - public async Task ObjectResult_ReadsAsyncEnumerables() - { - // Arrange - var executor = CreateExecutor(); - var result = new ObjectResult(AsyncEnumerable()); - var formatter = new TestJsonOutputFormatter(); - result.Formatters.Add(formatter); - - var actionContext = new ActionContext() - { - HttpContext = GetHttpContext(), - }; - - // Act - await executor.ExecuteAsync(actionContext, result); - - // Assert - var formatterContext = formatter.LastOutputFormatterContext; - Assert.Equal(typeof(List), formatterContext.ObjectType); - var value = Assert.IsType>(formatterContext.Object); - Assert.Equal(new[] { "Hello 0", "Hello 1", "Hello 2", "Hello 3", }, value); - } - - [Fact] - public async Task ObjectResult_Throws_IfEnumerableThrows() - { - // Arrange - var executor = CreateExecutor(); - var result = new ObjectResult(AsyncEnumerable(throwError: true)); - var formatter = new TestJsonOutputFormatter(); - result.Formatters.Add(formatter); - - var actionContext = new ActionContext() - { - HttpContext = GetHttpContext(), - }; - - // Act & Assert - await Assert.ThrowsAsync(() => executor.ExecuteAsync(actionContext, result)); - } - - [Fact] - public async Task ObjectResult_AsyncEnumeration_AtLimit() - { - // Arrange - var count = 24; - var executor = CreateExecutor(options: new MvcOptions { MaxIAsyncEnumerableBufferLimit = count }); - var result = new ObjectResult(AsyncEnumerable(count: count)); - var formatter = new TestJsonOutputFormatter(); - result.Formatters.Add(formatter); - - var actionContext = new ActionContext() - { - HttpContext = GetHttpContext(), - }; - - // Act - await executor.ExecuteAsync(actionContext, result); - - // Assert - var formatterContext = formatter.LastOutputFormatterContext; - var value = Assert.IsType>(formatterContext.Object); - Assert.Equal(24, value.Count); - } - - [Theory] - [InlineData(25)] - [InlineData(1024)] - public async Task ObjectResult_Throws_IfEnumerationExceedsLimit(int count) - { - // Arrange - var executor = CreateExecutor(options: new MvcOptions { MaxIAsyncEnumerableBufferLimit = 24 }); - var result = new ObjectResult(AsyncEnumerable(count: count)); - var formatter = new TestJsonOutputFormatter(); - result.Formatters.Add(formatter); - - var actionContext = new ActionContext() - { - HttpContext = GetHttpContext(), - }; - - // Act & Assert - var ex = await Assert.ThrowsAsync(() => executor.ExecuteAsync(actionContext, result)); - } - - private static async IAsyncEnumerable AsyncEnumerable(int count = 4, bool throwError = false) - { - await Task.Yield(); - for (var i = 0; i < count; i++) - { - yield return $"Hello {i}"; - } - - if (throwError) - { - throw new TimeZoneNotFoundException(); - } - } - private static IServiceCollection CreateServices() { var services = new ServiceCollection(); diff --git a/src/Mvc/Mvc.Formatters.Xml/src/XmlDataContractSerializerOutputFormatter.cs b/src/Mvc/Mvc.Formatters.Xml/src/XmlDataContractSerializerOutputFormatter.cs index 8f66c2842a5b..b4a32d148a3f 100644 --- a/src/Mvc/Mvc.Formatters.Xml/src/XmlDataContractSerializerOutputFormatter.cs +++ b/src/Mvc/Mvc.Formatters.Xml/src/XmlDataContractSerializerOutputFormatter.cs @@ -11,9 +11,11 @@ using System.Xml; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Formatters.Xml; +using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; namespace Microsoft.AspNetCore.Mvc.Formatters @@ -28,6 +30,7 @@ public class XmlDataContractSerializerOutputFormatter : TextOutputFormatter private readonly ILogger _logger; private DataContractSerializerSettings _serializerSettings; private MvcOptions _mvcOptions; + private AsyncEnumerableReader _asyncEnumerableReaderFactory; /// /// Initializes a new instance of @@ -86,7 +89,7 @@ public XmlDataContractSerializerOutputFormatter(XmlWriterSettings writerSettings }; WrapperProviderFactories.Add(new EnumerableWrapperProviderFactory(WrapperProviderFactories)); - _logger = loggerFactory?.CreateLogger(GetType()); + _logger = loggerFactory?.CreateLogger(GetType()) ?? NullLogger.Instance; } /// @@ -245,13 +248,29 @@ public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext co var writerSettings = WriterSettings.Clone(); writerSettings.Encoding = selectedEncoding; - // Wrap the object only if there is a wrapping type. + var httpContext = context.HttpContext; + var response = httpContext.Response; + + _mvcOptions ??= httpContext.RequestServices.GetRequiredService>().Value; + _asyncEnumerableReaderFactory ??= new AsyncEnumerableReader(_mvcOptions); + var value = context.Object; - var wrappingType = GetSerializableType(context.ObjectType); - if (wrappingType != null && wrappingType != context.ObjectType) + var valueType = context.ObjectType; + + if (value is not null && _asyncEnumerableReaderFactory.TryGetReader(value.GetType(), out var reader)) + { + Log.BufferingAsyncEnumerable(_logger, value); + + value = await reader(value); + valueType = value.GetType(); + } + + // Wrap the object only if there is a wrapping type. + var wrappingType = GetSerializableType(valueType); + if (wrappingType != null && wrappingType != valueType) { var wrapperProvider = WrapperProviderFactories.GetWrapperProvider(new WrapperProviderContext( - declaredType: context.ObjectType, + declaredType: valueType, isSerialization: true)); value = wrapperProvider.Wrap(value); @@ -259,10 +278,6 @@ public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext co var dataContractSerializer = GetCachedSerializer(wrappingType); - var httpContext = context.HttpContext; - var response = httpContext.Response; - - _mvcOptions ??= httpContext.RequestServices.GetRequiredService>().Value; var responseStream = response.Body; FileBufferingWriteStream fileBufferingWriteStream = null; @@ -276,10 +291,8 @@ public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext co { await using (var textWriter = context.WriterFactory(responseStream, writerSettings.Encoding)) { - using (var xmlWriter = CreateXmlWriter(context, textWriter, writerSettings)) - { - dataContractSerializer.WriteObject(xmlWriter, value); - } + using var xmlWriter = CreateXmlWriter(context, textWriter, writerSettings); + dataContractSerializer.WriteObject(xmlWriter, value); } if (fileBufferingWriteStream != null) @@ -314,5 +327,22 @@ protected virtual DataContractSerializer GetCachedSerializer(Type type) return (DataContractSerializer)serializer; } + + private static class Log + { + private static readonly Action _bufferingAsyncEnumerable = LoggerMessage.Define( + LogLevel.Debug, + new EventId(1, "BufferingAsyncEnumerable"), + "Buffering IAsyncEnumerable instance of type '{Type}'.", + skipEnabledCheck: true); + + public static void BufferingAsyncEnumerable(ILogger logger, object asyncEnumerable) + { + if (logger.IsEnabled(LogLevel.Debug)) + { + _bufferingAsyncEnumerable(logger, asyncEnumerable.GetType().FullName, null); + } + } + } } } diff --git a/src/Mvc/Mvc.Formatters.Xml/src/XmlSerializerOutputFormatter.cs b/src/Mvc/Mvc.Formatters.Xml/src/XmlSerializerOutputFormatter.cs index c0d929ecea6d..8d3966bf408d 100644 --- a/src/Mvc/Mvc.Formatters.Xml/src/XmlSerializerOutputFormatter.cs +++ b/src/Mvc/Mvc.Formatters.Xml/src/XmlSerializerOutputFormatter.cs @@ -9,8 +9,8 @@ using System.Threading.Tasks; using System.Xml; using System.Xml.Serialization; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Formatters.Xml; +using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -27,6 +27,7 @@ public class XmlSerializerOutputFormatter : TextOutputFormatter private readonly ConcurrentDictionary _serializerCache = new ConcurrentDictionary(); private readonly ILogger _logger; private MvcOptions _mvcOptions; + private AsyncEnumerableReader _asyncEnumerableReaderFactory; /// /// Initializes a new instance of @@ -221,13 +222,28 @@ public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext co var writerSettings = WriterSettings.Clone(); writerSettings.Encoding = selectedEncoding; - // Wrap the object only if there is a wrapping type. + var httpContext = context.HttpContext; + var response = httpContext.Response; + + _mvcOptions ??= httpContext.RequestServices.GetRequiredService>().Value; + _asyncEnumerableReaderFactory ??= new AsyncEnumerableReader(_mvcOptions); + var value = context.Object; - var wrappingType = GetSerializableType(context.ObjectType); - if (wrappingType != null && wrappingType != context.ObjectType) + var valueType = context.ObjectType; + if (value is not null && _asyncEnumerableReaderFactory.TryGetReader(value.GetType(), out var reader)) + { + Log.BufferingAsyncEnumerable(_logger, value); + + value = await reader(value); + valueType = value.GetType(); + } + + // Wrap the object only if there is a wrapping type. + var wrappingType = GetSerializableType(valueType); + if (wrappingType != null && wrappingType != valueType) { var wrapperProvider = WrapperProviderFactories.GetWrapperProvider(new WrapperProviderContext( - declaredType: context.ObjectType, + declaredType: valueType, isSerialization: true)); value = wrapperProvider.Wrap(value); @@ -235,11 +251,6 @@ public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext co var xmlSerializer = GetCachedSerializer(wrappingType); - var httpContext = context.HttpContext; - var response = httpContext.Response; - - _mvcOptions ??= httpContext.RequestServices.GetRequiredService>().Value; - var responseStream = response.Body; FileBufferingWriteStream fileBufferingWriteStream = null; if (!_mvcOptions.SuppressOutputFormatterBuffering) @@ -252,10 +263,8 @@ public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext co { await using (var textWriter = context.WriterFactory(responseStream, selectedEncoding)) { - using (var xmlWriter = CreateXmlWriter(context, textWriter, writerSettings)) - { - Serialize(xmlSerializer, xmlWriter, value); - } + using var xmlWriter = CreateXmlWriter(context, textWriter, writerSettings); + Serialize(xmlSerializer, xmlWriter, value); } if (fileBufferingWriteStream != null) @@ -302,5 +311,22 @@ protected virtual XmlSerializer GetCachedSerializer(Type type) return (XmlSerializer)serializer; } + + private static class Log + { + private static readonly Action _bufferingAsyncEnumerable = LoggerMessage.Define( + LogLevel.Debug, + new EventId(1, "BufferingAsyncEnumerable"), + "Buffering IAsyncEnumerable instance of type '{Type}'.", + skipEnabledCheck: true); + + public static void BufferingAsyncEnumerable(ILogger logger, object asyncEnumerable) + { + if (logger.IsEnabled(LogLevel.Debug)) + { + _bufferingAsyncEnumerable(logger, asyncEnumerable.GetType().FullName, null); + } + } + } } } diff --git a/src/Mvc/Mvc.NewtonsoftJson/src/NewtonsoftJsonOutputFormatter.cs b/src/Mvc/Mvc.NewtonsoftJson/src/NewtonsoftJsonOutputFormatter.cs index 6dae68eac0cd..57206007ccf3 100644 --- a/src/Mvc/Mvc.NewtonsoftJson/src/NewtonsoftJsonOutputFormatter.cs +++ b/src/Mvc/Mvc.NewtonsoftJson/src/NewtonsoftJsonOutputFormatter.cs @@ -3,12 +3,14 @@ using System; using System.Buffers; +using System.Collections; using System.IO; using System.Text; using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.NewtonsoftJson; using Microsoft.AspNetCore.WebUtilities; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Microsoft.AspNetCore.Mvc.Formatters @@ -20,7 +22,9 @@ public class NewtonsoftJsonOutputFormatter : TextOutputFormatter { private readonly IArrayPool _charPool; private readonly MvcOptions _mvcOptions; + private readonly AsyncEnumerableReader _asyncEnumerableReaderFactory; private JsonSerializerSettings? _serializerSettings; + private ILogger? _logger; /// /// Initializes a new instance. @@ -56,6 +60,8 @@ public NewtonsoftJsonOutputFormatter( SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJson); SupportedMediaTypes.Add(MediaTypeHeaderValues.TextJson); SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationAnyJsonSyntax); + + _asyncEnumerableReaderFactory = new AsyncEnumerableReader(_mvcOptions); } /// @@ -139,15 +145,21 @@ public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext co responseStream = fileBufferingWriteStream; } + var value = context.Object; + if (value is not null && _asyncEnumerableReaderFactory.TryGetReader(value.GetType(), out var reader)) + { + _logger ??= context.HttpContext.RequestServices.GetRequiredService>(); + Log.BufferingAsyncEnumerable(_logger, value); + value = await reader(value); + } + try { await using (var writer = context.WriterFactory(responseStream, selectedEncoding)) { - using (var jsonWriter = CreateJsonWriter(writer)) - { - var jsonSerializer = CreateJsonSerializer(context); - jsonSerializer.Serialize(jsonWriter, context.Object); - } + using var jsonWriter = CreateJsonWriter(writer); + var jsonSerializer = CreateJsonSerializer(context); + jsonSerializer.Serialize(jsonWriter, value); } if (fileBufferingWriteStream != null) @@ -202,5 +214,22 @@ private static JsonSerializerSettings ShallowCopy(JsonSerializerSettings setting return copiedSettings; } + + private static class Log + { + private static readonly Action _bufferingAsyncEnumerable = LoggerMessage.Define( + LogLevel.Debug, + new EventId(1, "BufferingAsyncEnumerable"), + "Buffering IAsyncEnumerable instance of type '{Type}'.", + skipEnabledCheck: true); + + public static void BufferingAsyncEnumerable(ILogger logger, object asyncEnumerable) + { + if (logger.IsEnabled(LogLevel.Debug)) + { + _bufferingAsyncEnumerable(logger, asyncEnumerable.GetType().FullName, null); + } + } + } } } diff --git a/src/Mvc/test/Mvc.FunctionalTests/ErrorPageTests.cs b/src/Mvc/test/Mvc.FunctionalTests/ErrorPageTests.cs index ec3e9ce39faa..c1b001509678 100644 --- a/src/Mvc/test/Mvc.FunctionalTests/ErrorPageTests.cs +++ b/src/Mvc/test/Mvc.FunctionalTests/ErrorPageTests.cs @@ -80,6 +80,8 @@ public async Task CompilationFailuresAreListedByErrorPageMiddleware() static void ConfigureRuntimeCompilationOptions(MvcRazorRuntimeCompilationOptions options) { + options.AdditionalReferencePaths.Add(typeof(string).Assembly.Location); + // Workaround for incorrectly generated deps file. The build output has all of the binaries required to compile. We'll grab these and // add it to the list of assemblies runtime compilation uses. foreach (var path in Directory.EnumerateFiles(AppContext.BaseDirectory, "*.dll")) diff --git a/src/ProjectTemplates/Shared/TemplatePackageInstaller.cs b/src/ProjectTemplates/Shared/TemplatePackageInstaller.cs index f920e0240355..a28b2c434677 100644 --- a/src/ProjectTemplates/Shared/TemplatePackageInstaller.cs +++ b/src/ProjectTemplates/Shared/TemplatePackageInstaller.cs @@ -120,6 +120,23 @@ NUnit 3 Test Item (nunit-test) VB * We don't want to construct this path so we'll rely on dotnet new --uninstall --help to construct the uninstall command. */ + // Workaround for https://github.com/dotnet/sdk/issues/16906 + // await UninstallExistingTemplatesAsync(output); + + foreach (var packagePath in builtPackages) + { + output.WriteLine($"Installing templates package {packagePath}..."); + var result = await RunDotNetNew(output, $"--install \"{packagePath}\""); + Assert.True(result.ExitCode == 0, result.GetFormattedOutput()); + } + + await VerifyCanFindTemplate(output, "webapp"); + await VerifyCanFindTemplate(output, "web"); + await VerifyCanFindTemplate(output, "react"); + } + + private static async Task UninstallExistingTemplatesAsync(ITestOutputHelper output) + { var proc = await RunDotNetNew(output, "--uninstall --help"); var lines = proc.Output.Split(Environment.NewLine); @@ -145,17 +162,6 @@ NUnit 3 Test Item (nunit-test) VB await VerifyCannotFindTemplateAsync(output, "react"); await VerifyCannotFindTemplateAsync(output, "reactredux"); await VerifyCannotFindTemplateAsync(output, "angular"); - - foreach (var packagePath in builtPackages) - { - output.WriteLine($"Installing templates package {packagePath}..."); - var result = await RunDotNetNew(output, $"--install \"{packagePath}\""); - Assert.True(result.ExitCode == 0, result.GetFormattedOutput()); - } - - await VerifyCanFindTemplate(output, "webapp"); - await VerifyCanFindTemplate(output, "web"); - await VerifyCanFindTemplate(output, "react"); } private static async Task VerifyCanFindTemplate(ITestOutputHelper output, string templateName) diff --git a/src/Servers/IIS/IIS/test/Common.FunctionalTests/StartupTests.cs b/src/Servers/IIS/IIS/test/Common.FunctionalTests/StartupTests.cs index 592fd3eef2ed..ab6b80dc196f 100644 --- a/src/Servers/IIS/IIS/test/Common.FunctionalTests/StartupTests.cs +++ b/src/Servers/IIS/IIS/test/Common.FunctionalTests/StartupTests.cs @@ -422,6 +422,7 @@ public async Task TargedDifferenceSharedFramework_FailedToFindNativeDependencies } [ConditionalFact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/31893")] [MaximumOSVersion(OperatingSystems.Windows, WindowsVersions.Win10_20H2, SkipReason = "Shutdown hangs https://github.com/dotnet/aspnetcore/issues/25107")] public async Task RemoveInProcessReference_FailedToFindRequestHandler() { diff --git a/src/Servers/Kestrel/Transport.Quic/src/AssemblyInfo.cs b/src/Servers/Kestrel/Transport.Quic/src/AssemblyInfo.cs index ea0b177b75c8..4549267cc0f8 100644 --- a/src/Servers/Kestrel/Transport.Quic/src/AssemblyInfo.cs +++ b/src/Servers/Kestrel/Transport.Quic/src/AssemblyInfo.cs @@ -2,5 +2,9 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Runtime.CompilerServices; +using System.Runtime.Versioning; [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] +[assembly: SupportedOSPlatform("windows")] +[assembly: SupportedOSPlatform("macos")] +[assembly: SupportedOSPlatform("linux")]