From f1a5a5b94e958c5642ae5d107fe3b593a86e9ab0 Mon Sep 17 00:00:00 2001 From: Matt Thalman Date: Tue, 12 Dec 2023 16:30:41 -0600 Subject: [PATCH 1/3] Add roslyn patch to use NetCurrent (#17951) --- ...001-Use-NetCurrent-instead-of-net8.0.patch | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/SourceBuild/patches/roslyn/0001-Use-NetCurrent-instead-of-net8.0.patch diff --git a/src/SourceBuild/patches/roslyn/0001-Use-NetCurrent-instead-of-net8.0.patch b/src/SourceBuild/patches/roslyn/0001-Use-NetCurrent-instead-of-net8.0.patch new file mode 100644 index 000000000..05a1d13dc --- /dev/null +++ b/src/SourceBuild/patches/roslyn/0001-Use-NetCurrent-instead-of-net8.0.patch @@ -0,0 +1,127 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Matt Thalman +Date: Tue, 12 Dec 2023 09:47:37 -0600 +Subject: [PATCH] Use NetCurrent instead of net8.0 + +Backport: https://github.com/dotnet/roslyn/pull/71229 +--- + .../Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes.csproj | 2 +- + src/CodeStyle/Tools/CodeStyleConfigFileGenerator.csproj | 2 +- + .../Microsoft.CodeAnalysis.VisualBasic.CodeStyle.Fixes.vbproj | 2 +- + .../BoundTreeGenerator/CompilersBoundTreeGenerator.csproj | 2 +- + .../CSharpErrorFactsGenerator.csproj | 2 +- + .../Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj | 4 ++-- + .../VisualBasicErrorFactsGenerator.vbproj | 2 +- + .../VisualBasicSyntaxGenerator.vbproj | 2 +- + 8 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/src/CodeStyle/CSharp/CodeFixes/Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes.csproj b/src/CodeStyle/CSharp/CodeFixes/Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes.csproj +index c89a8cf4c11..a443f463427 100644 +--- a/src/CodeStyle/CSharp/CodeFixes/Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes.csproj ++++ b/src/CodeStyle/CSharp/CodeFixes/Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes.csproj +@@ -31,7 +31,7 @@ + $(DotNetRoot)dotnet + + +- ++ + + + <_File Include="$(CSharpCodeStyleAnalyzerArtifactsBinDir)\Microsoft.CodeAnalysis.CSharp.CodeStyle.dll" TargetDir="analyzers/dotnet/cs" /> +diff --git a/src/CodeStyle/Tools/CodeStyleConfigFileGenerator.csproj b/src/CodeStyle/Tools/CodeStyleConfigFileGenerator.csproj +index f5fc7205ca2..d014b53081c 100644 +--- a/src/CodeStyle/Tools/CodeStyleConfigFileGenerator.csproj ++++ b/src/CodeStyle/Tools/CodeStyleConfigFileGenerator.csproj +@@ -1,7 +1,7 @@ +  + + Exe +- net8.0 ++ $(NetCurrent) + true + false + false +diff --git a/src/CodeStyle/VisualBasic/CodeFixes/Microsoft.CodeAnalysis.VisualBasic.CodeStyle.Fixes.vbproj b/src/CodeStyle/VisualBasic/CodeFixes/Microsoft.CodeAnalysis.VisualBasic.CodeStyle.Fixes.vbproj +index da7b22020e7..2970771349a 100644 +--- a/src/CodeStyle/VisualBasic/CodeFixes/Microsoft.CodeAnalysis.VisualBasic.CodeStyle.Fixes.vbproj ++++ b/src/CodeStyle/VisualBasic/CodeFixes/Microsoft.CodeAnalysis.VisualBasic.CodeStyle.Fixes.vbproj +@@ -31,7 +31,7 @@ + $(DotNetRoot)dotnet + + +- ++ + + + <_File Include="$(VisualBasicCodeStyleAnalyzerArtifactsBinDir)\Microsoft.CodeAnalysis.VisualBasic.CodeStyle.dll" TargetDir="analyzers/dotnet/vb" /> +diff --git a/src/Tools/Source/CompilerGeneratorTools/Source/BoundTreeGenerator/CompilersBoundTreeGenerator.csproj b/src/Tools/Source/CompilerGeneratorTools/Source/BoundTreeGenerator/CompilersBoundTreeGenerator.csproj +index 6ee9d977752..56b24937c1b 100644 +--- a/src/Tools/Source/CompilerGeneratorTools/Source/BoundTreeGenerator/CompilersBoundTreeGenerator.csproj ++++ b/src/Tools/Source/CompilerGeneratorTools/Source/BoundTreeGenerator/CompilersBoundTreeGenerator.csproj +@@ -5,7 +5,7 @@ + Exe + Roslyn.Compilers.Internal.BoundTreeGenerator + BoundTreeGenerator +- net8.0 ++ $(NetCurrent) + false + + +\ No newline at end of file +diff --git a/src/Tools/Source/CompilerGeneratorTools/Source/CSharpErrorFactsGenerator/CSharpErrorFactsGenerator.csproj b/src/Tools/Source/CompilerGeneratorTools/Source/CSharpErrorFactsGenerator/CSharpErrorFactsGenerator.csproj +index 63446bef0f8..8b32c86f32a 100644 +--- a/src/Tools/Source/CompilerGeneratorTools/Source/CSharpErrorFactsGenerator/CSharpErrorFactsGenerator.csproj ++++ b/src/Tools/Source/CompilerGeneratorTools/Source/CSharpErrorFactsGenerator/CSharpErrorFactsGenerator.csproj +@@ -4,7 +4,7 @@ + + Exe + Roslyn.Compilers.CSharp.Internal.CSharpErrorFactsGenerator +- net8.0 ++ $(NetCurrent) + false + + +\ No newline at end of file +diff --git a/src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj b/src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj +index 9f8b8b05f26..6f59c13265d 100644 +--- a/src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj ++++ b/src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj +@@ -3,9 +3,9 @@ + + + CSharpSyntaxGenerator +- +- net8.0;netstandard2.0 ++ $(NetCurrent);netstandard2.0 + Exe + $(RoslynPortableRuntimeIdentifiers) + false +diff --git a/src/Tools/Source/CompilerGeneratorTools/Source/VisualBasicErrorFactsGenerator/VisualBasicErrorFactsGenerator.vbproj b/src/Tools/Source/CompilerGeneratorTools/Source/VisualBasicErrorFactsGenerator/VisualBasicErrorFactsGenerator.vbproj +index a0f43f33de2..440aa28e6d4 100644 +--- a/src/Tools/Source/CompilerGeneratorTools/Source/VisualBasicErrorFactsGenerator/VisualBasicErrorFactsGenerator.vbproj ++++ b/src/Tools/Source/CompilerGeneratorTools/Source/VisualBasicErrorFactsGenerator/VisualBasicErrorFactsGenerator.vbproj +@@ -6,7 +6,7 @@ + + Microsoft.CodeAnalysis.VisualBasic.Internal.VBErrorFactsGenerator + VBErrorFactsGenerator +- net8.0 ++ $(NetCurrent) + false + + +\ No newline at end of file +diff --git a/src/Tools/Source/CompilerGeneratorTools/Source/VisualBasicSyntaxGenerator/VisualBasicSyntaxGenerator.vbproj b/src/Tools/Source/CompilerGeneratorTools/Source/VisualBasicSyntaxGenerator/VisualBasicSyntaxGenerator.vbproj +index 1cd0dc4b549..91cc5f2a4ec 100644 +--- a/src/Tools/Source/CompilerGeneratorTools/Source/VisualBasicSyntaxGenerator/VisualBasicSyntaxGenerator.vbproj ++++ b/src/Tools/Source/CompilerGeneratorTools/Source/VisualBasicSyntaxGenerator/VisualBasicSyntaxGenerator.vbproj +@@ -7,7 +7,7 @@ + Microsoft.CodeAnalysis.VisualBasic.Internal.VBSyntaxGenerator + VBSyntaxGenerator + Off +- net8.0 ++ $(NetCurrent) + false + + From 7cfe9149ec1f8e1a0b632d3babb868d273aa9242 Mon Sep 17 00:00:00 2001 From: Ella Hathaway <67609881+ellahathaway@users.noreply.github.com> Date: Tue, 12 Dec 2023 14:42:58 -0800 Subject: [PATCH 2/3] Update dev containers to Fedora 39 (#17954) --- .devcontainer/vmr-source-build/devcontainer.json | 4 ++-- src/SourceBuild/content/.devcontainer/devcontainer.json | 4 ++-- .../content/.devcontainer/prebuilt-sdk/devcontainer.json | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.devcontainer/vmr-source-build/devcontainer.json b/.devcontainer/vmr-source-build/devcontainer.json index 01eecb5dd..bfa89572c 100644 --- a/.devcontainer/vmr-source-build/devcontainer.json +++ b/.devcontainer/vmr-source-build/devcontainer.json @@ -3,7 +3,7 @@ // The container supports source-building the SDK { "name": "VMR with PR changes", - "image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36", + "image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39", "hostRequirements": { // A completely source built .NET is >64 GB with all the repos/artifacts "storage": "128gb" @@ -22,4 +22,4 @@ }, "onCreateCommand": "${containerWorkspaceFolder}/installer/.devcontainer/vmr-source-build/init.sh", "workspaceFolder": "/workspaces" -} \ No newline at end of file +} diff --git a/src/SourceBuild/content/.devcontainer/devcontainer.json b/src/SourceBuild/content/.devcontainer/devcontainer.json index 6061a0eff..b0e1db0a4 100644 --- a/src/SourceBuild/content/.devcontainer/devcontainer.json +++ b/src/SourceBuild/content/.devcontainer/devcontainer.json @@ -1,7 +1,7 @@ // Container contains checked-out source code only { "name": "Default", - "image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36", + "image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39", "hostRequirements": { // A completely source built .NET is >64 GB with all the repos/artifacts "storage": "128gb" @@ -19,4 +19,4 @@ } }, "onCreateCommand": ".devcontainer/init.sh" -} \ No newline at end of file +} diff --git a/src/SourceBuild/content/.devcontainer/prebuilt-sdk/devcontainer.json b/src/SourceBuild/content/.devcontainer/prebuilt-sdk/devcontainer.json index eaff85ffd..d7d96d1c1 100644 --- a/src/SourceBuild/content/.devcontainer/prebuilt-sdk/devcontainer.json +++ b/src/SourceBuild/content/.devcontainer/prebuilt-sdk/devcontainer.json @@ -1,7 +1,7 @@ // Container contains a pre-built SDK { "name": "Pre-built .NET SDK", - "image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-36", + "image": "mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-39", "hostRequirements": { // A completely source built .NET is >64 GB with all the repos/artifacts "storage": "128gb" @@ -19,4 +19,4 @@ } }, "onCreateCommand": ".devcontainer/prebuilt-sdk/init.sh" -} \ No newline at end of file +} From c947c12af4c15c0b402359d268796ec148bb7eb2 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 11:57:28 +0100 Subject: [PATCH 3/3] [main] Update dependencies from dotnet/sdk (#17875) Co-authored-by: dotnet-maestro[bot] Co-authored-by: JL03-Yue <59816815+JL03-Yue@users.noreply.github.com> Co-authored-by: Larry Ewing Co-authored-by: Matt Thalman Co-authored-by: Marek Safar --- eng/Version.Details.xml | 132 +++++++++--------- eng/Versions.props | 54 +++---- .../0002-Update-MSBuild-ref-dependency.patch | 23 +++ test/EndToEnd/ProjectBuildTests.cs | 2 +- 4 files changed, 117 insertions(+), 94 deletions(-) create mode 100644 src/SourceBuild/patches/roslyn/0002-Update-MSBuild-ref-dependency.patch diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index f646611ee..ad0dcfd39 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -5,42 +5,42 @@ Source-build uses transitive dependency resolution to determine correct build SHA of all product contributing repos. The order of dependencies is important and should not be modified without approval from dotnet/source-build-internal. --> - + https://github.com/dotnet/windowsdesktop - c2ba2e4e71b06b9f14165f9902e54259fe42e129 + 696e213652005495ed7a103839772d1c249df7db - + https://github.com/dotnet/windowsdesktop - c2ba2e4e71b06b9f14165f9902e54259fe42e129 + 696e213652005495ed7a103839772d1c249df7db - + https://github.com/dotnet/windowsdesktop - c2ba2e4e71b06b9f14165f9902e54259fe42e129 + 696e213652005495ed7a103839772d1c249df7db - + https://github.com/dotnet/windowsdesktop - c2ba2e4e71b06b9f14165f9902e54259fe42e129 + 696e213652005495ed7a103839772d1c249df7db - + https://github.com/dotnet/runtime - a26802aa5793060c512359c2be83e9a4c51964c1 + ab1a8224cdf115b65e0db5dc88d11f205068f444 - + https://github.com/dotnet/runtime - a26802aa5793060c512359c2be83e9a4c51964c1 + ab1a8224cdf115b65e0db5dc88d11f205068f444 - + https://github.com/dotnet/runtime - a26802aa5793060c512359c2be83e9a4c51964c1 + ab1a8224cdf115b65e0db5dc88d11f205068f444 - + https://github.com/dotnet/runtime - a26802aa5793060c512359c2be83e9a4c51964c1 + ab1a8224cdf115b65e0db5dc88d11f205068f444 - + https://github.com/dotnet/runtime - a26802aa5793060c512359c2be83e9a4c51964c1 + ab1a8224cdf115b65e0db5dc88d11f205068f444 @@ -48,55 +48,55 @@ https://github.com/dotnet/core-setup 7d57652f33493fa022125b7f63aad0d70c52d810 - + https://github.com/dotnet/runtime - a26802aa5793060c512359c2be83e9a4c51964c1 + ab1a8224cdf115b65e0db5dc88d11f205068f444 - + https://github.com/dotnet/aspnetcore - 7e9b1492baa02211842422566c0e8710886cace1 + 459a4884bf3ccd1f50ada2244a6c2da6a939ae0d - + https://github.com/dotnet/aspnetcore - 7e9b1492baa02211842422566c0e8710886cace1 + 459a4884bf3ccd1f50ada2244a6c2da6a939ae0d - + https://github.com/dotnet/aspnetcore - 7e9b1492baa02211842422566c0e8710886cace1 + 459a4884bf3ccd1f50ada2244a6c2da6a939ae0d - + https://github.com/dotnet/aspnetcore - 7e9b1492baa02211842422566c0e8710886cace1 + 459a4884bf3ccd1f50ada2244a6c2da6a939ae0d - + https://github.com/dotnet/aspnetcore - 7e9b1492baa02211842422566c0e8710886cace1 + 459a4884bf3ccd1f50ada2244a6c2da6a939ae0d - + https://github.com/dotnet/aspnetcore - 7e9b1492baa02211842422566c0e8710886cace1 + 459a4884bf3ccd1f50ada2244a6c2da6a939ae0d - + https://github.com/dotnet/aspnetcore - 7e9b1492baa02211842422566c0e8710886cace1 + 459a4884bf3ccd1f50ada2244a6c2da6a939ae0d - + https://github.com/dotnet/sdk - 96b3ef8aecc8e71f067e04ea02401b13bc8bcca7 + 6ad1cd1de740d3332af31bd57afef0070b7a3329 - + https://github.com/dotnet/sdk - 96b3ef8aecc8e71f067e04ea02401b13bc8bcca7 + 6ad1cd1de740d3332af31bd57afef0070b7a3329 - + https://github.com/dotnet/sdk - 96b3ef8aecc8e71f067e04ea02401b13bc8bcca7 + 6ad1cd1de740d3332af31bd57afef0070b7a3329 - + https://github.com/dotnet/sdk - 96b3ef8aecc8e71f067e04ea02401b13bc8bcca7 + 6ad1cd1de740d3332af31bd57afef0070b7a3329 https://github.com/dotnet/test-templates @@ -124,54 +124,54 @@ ec54b2c1553db0a544ef0e8595be2318fc12e08d - + https://github.com/dotnet/winforms - 0112f1b00b9608cd10bf9f92fad16b1bd84dc76f + e1393ed208a58a6a2f864ac5ae9cd8ae965d236c - + https://github.com/dotnet/wpf - f398b952977b861a20c37ae7982032cae9d9f0a5 + 8e3e1a550c591a7732df79f075716b88af692b43 - + https://github.com/dotnet/fsharp - 5a2ef93ff28d0a9a7e9419d652e9b009557e3925 + bb832169d6b799a62962452212010e66c3fecacf - + https://github.com/dotnet/fsharp - 5a2ef93ff28d0a9a7e9419d652e9b009557e3925 + bb832169d6b799a62962452212010e66c3fecacf - + https://github.com/microsoft/vstest - 94c5e8d3b9a54b6814ea7003be18f37c7c558fbc + 50c0f7889fdd8d13381d325bdbb6d253e33da1ff - + https://github.com/dotnet/runtime - a26802aa5793060c512359c2be83e9a4c51964c1 + ab1a8224cdf115b65e0db5dc88d11f205068f444 - + https://github.com/dotnet/roslyn - 1f802118804658a38c932c885bfc82a9d0f38e86 + 8c38000b3bb2fb64699633eb58e0d284cb3a0ed1 - + https://github.com/dotnet/msbuild - 31108edc1f9cafc0103ed467906a31ddd8f914fa + 2f3d37672a69142a13a62856b09034a915bedc70 - + https://github.com/nuget/nuget.client - 707c46e558b2b027d7ae942028c369e26545f10a + 400ac5960800c110213fe2a6069e40879f2d8fbe https://github.com/Microsoft/ApplicationInsights-dotnet 53b80940842204f78708a538628288ff5d741a1d - + https://github.com/dotnet/emsdk - 74e4868be8423562ba8ec2aac522f94a8c2c9f37 + f0e25ac1b9cf1df8bbe6e873993ad74ce3ca8d26 @@ -179,15 +179,15 @@ 48e42f59d64d84b404e904996a9ed61f2a17a569 - + https://github.com/dotnet/deployment-tools - 1d174267bf45dabbadb12602b1170329611fd219 + 0d6c22d227b318fb253c967e1ac041b8e68e7e7d - + https://github.com/dotnet/deployment-tools - 1d174267bf45dabbadb12602b1170329611fd219 + 0d6c22d227b318fb253c967e1ac041b8e68e7e7d diff --git a/eng/Versions.props b/eng/Versions.props index 1c533f09e..b5ee7e341 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -48,11 +48,11 @@ - 9.0.0-alpha.1.23575.1 + 9.0.0-alpha.1.23605.3 - 9.0.0-alpha.1.23575.1 + 9.0.0-alpha.1.23606.2 @@ -73,50 +73,50 @@ - 9.0.0-alpha.1.23577.26 - 9.0.0-alpha.1.23577.26 - 9.0.0-alpha.1.23577.26 - 9.0.0-alpha.1.23577.26 - 9.0.0-alpha.1.23577.26 - 9.0.0-alpha.1.23577.26 - 9.0.0-alpha.1.23577.26 + 9.0.0-alpha.1.23612.4 + 9.0.0-alpha.1.23612.4 + 9.0.0-alpha.1.23612.4 + 9.0.0-alpha.1.23612.4 + 9.0.0-alpha.1.23612.4 + 9.0.0-alpha.1.23612.4 + 9.0.0-alpha.1.23612.4 0.2.0 - 9.0.100-alpha.1.23577.21 - 9.0.100-alpha.1.23577.21 - 9.0.100-alpha.1.23577.21 + 9.0.100-alpha.1.23613.1 + 9.0.100-alpha.1.23613.1 + 9.0.100-alpha.1.23613.1 $(MicrosoftNETSdkPackageVersion) $(MicrosoftNETSdkPackageVersion) $(MicrosoftNETSdkPackageVersion) - 4.9.0-2.23563.6 + 4.9.0-3.23612.11 - 9.0.0-alpha.1.23577.7 + 9.0.0-alpha.1.23612.13 - 9.0.0-alpha.1.23577.7 - 9.0.0-alpha.1.23577.7 - 9.0.0-alpha.1.23577.7 - 9.0.0-alpha.1.23577.7 - 9.0.0-alpha.1.23577.7 + 9.0.0-alpha.1.23612.13 + 9.0.0-alpha.1.23612.13 + 9.0.0-alpha.1.23612.13 + 9.0.0-alpha.1.23612.13 + 9.0.0-alpha.1.23612.13 8.0.0-rc.1.23414.4 2.1.0 - 9.0.0-alpha.1.23576.1 - 9.0.0-alpha.1.23576.1 - 9.0.0-alpha.1.23576.1 - 9.0.0-alpha.1.23576.1 + 9.0.0-alpha.1.23612.1 + 9.0.0-alpha.1.23612.1 + 9.0.0-alpha.1.23612.1 + 9.0.0-alpha.1.23612.1 @@ -128,11 +128,11 @@ - 6.9.0-preview.1.45 + 6.9.0-preview.1.52 - 2.0.0-preview.1.23509.2 + 2.0.0-preview.1.23601.1 @@ -246,7 +246,7 @@ 2.2.0-beta.19072.10 2.0.0 - 17.9.0-preview-23574-01 + 17.9.0-preview-23610-02 8.0.0-alpha.1.22557.12 8.0.0-preview.23424.2 @@ -262,7 +262,7 @@ 13.3.8825-net8-rc1 16.4.8825-net8-rc1 - 9.0.0-alpha.1.23572.3 + 9.0.0-alpha.1.23611.2 $(MicrosoftNETWorkloadEmscriptenCurrentManifest90100TransportPackageVersion) 9.0.100$([System.Text.RegularExpressions.Regex]::Match($(EmscriptenWorkloadManifestVersion), `-[A-z]*[\.]*\d*`)) diff --git a/src/SourceBuild/patches/roslyn/0002-Update-MSBuild-ref-dependency.patch b/src/SourceBuild/patches/roslyn/0002-Update-MSBuild-ref-dependency.patch new file mode 100644 index 000000000..631903885 --- /dev/null +++ b/src/SourceBuild/patches/roslyn/0002-Update-MSBuild-ref-dependency.patch @@ -0,0 +1,23 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Matt Thalman +Date: Mon, 4 Dec 2023 11:03:10 -0600 +Subject: [PATCH] Update MSBuild ref dependency + +Backport: https://github.com/dotnet/roslyn/pull/71069 +--- + eng/Versions.props | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/eng/Versions.props b/eng/Versions.props +index 618bcbcbe5b..cc204cbb20c 100644 +--- a/eng/Versions.props ++++ b/eng/Versions.props +@@ -32,7 +32,7 @@ + 17.8.9-preview + 17.8.36711 + +- 16.10.0 ++ 17.3.2 + + 17.5.0 +