[release/8.0] Add .slnx fallback for TestHost content root discovery #65000
+84
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Backport of #64953 to release/8.0
/cc @halter73 @copilot
Add .slnx fallback for TestHost content root discovery
Description
This pull request adds
.slnxfallback support to the test-onlyUseSolutionRelativeContentRootmethod in theMicrosoft.AspNetCore.TestHost. When searching for solution files with the*.slnpattern, the method now falls back to searching for.slnxfiles if no.slnfile is found, preventing theInvalidOperationExceptionthat would previously occur before test developers can easily callUseSolutionRelativeContentRootthemselves.This has already been fixed in .NET 10 by #61305, but that included public API changes, so this is not a direct backport. Unlike, the .NET 10 change that treats
.slnxand.slnequivalently by default, this change will only fall back to looking for an*.slnxfile if the test server would otherwise throw anInvalidOperationExceptiondue to not being able to find an ".sln" file.Fixes #61304 in .NET 8.
Customer Impact
#61304 has gotten a lot of attention, because it is a pain point for migrating solution from
.slnto.slnx.Test projects that worked fine with an
.sln-based solution throw after migrating to*.slnxbefore developers even get access to theIWebHostBuilder, so they don't get the opportunity to easily manually reconfigure the content root by callingUseSolutionRelativeContentRootwith "*.slnx". Instead, the current general workaround is fragile and unintuitive:#61304 (comment)
Regression?
Not technically, but you could consider it a regression in behavior when migrating from
.slnto.slnxsolutions.Risk
This change only has an impact if starting the test server would otherwise throw an
InvalidOperationExceptionearly during initialization due to not being able to find an ".sln" file.Verification
Packaging changes reviewed?