-
Notifications
You must be signed in to change notification settings - Fork 10.5k
Add .slnx fallback for TestHost content root discovery #64953
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: release/9.0
Are you sure you want to change the base?
Add .slnx fallback for TestHost content root discovery #64953
Conversation
|
Hi @@copilot. If this is not a tell-mode PR, please make sure to follow the instructions laid out in the servicing process document. |
Co-authored-by: halter73 <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This pull request adds non-breaking .slnx fallback support to the UseSolutionRelativeContentRoot method in TestHost. When searching for solution files with the "*.sln" pattern, the method now falls back to searching for .slnx files if no .sln file is found, preventing the InvalidOperationException that would previously occur.
Key changes:
- Added .slnx fallback logic that only activates when no .sln file is found and the search pattern is "*.sln"
- Maintained .sln precedence to avoid breaking changes where .slnx files could shadow .sln files in parent directories
- Added comprehensive tests validating both the fallback behavior and .sln precedence
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/Hosting/TestHost/src/WebHostBuilderExtensions.cs | Added conditional .slnx fallback logic after .sln search fails, maintaining backward compatibility |
| src/Hosting/TestHost/test/WebHostBuilderExtensionsTests.cs | New test file with two tests: one verifying .slnx fallback and one verifying .sln takes precedence over .slnx |
| if (string.Equals(solutionName, "*.sln", StringComparison.OrdinalIgnoreCase)) | ||
| { | ||
| directoryInfo = new DirectoryInfo(applicationBasePath); | ||
| do | ||
| { | ||
| var solutionPath = Directory.EnumerateFiles(directoryInfo.FullName, "*.slnx").FirstOrDefault(); | ||
| if (solutionPath != null) | ||
| { | ||
| builder.UseContentRoot(Path.GetFullPath(Path.Combine(directoryInfo.FullName, solutionRelativePath))); | ||
| return builder; | ||
| } | ||
|
|
||
| directoryInfo = directoryInfo.Parent; | ||
| } | ||
| while (directoryInfo is not null); | ||
| } |
Copilot
AI
Jan 8, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The new fallback logic lacks test coverage for the exception case where neither a .sln nor .slnx file is found. Consider adding a test that verifies an InvalidOperationException is thrown with the expected error message when no solution file exists in the directory hierarchy.
Add .slnx fallback for TestHost content root discovery
Summary of the changes (Less than 80 chars)
.slnxfallback for content root lookup.Description
Problem:
UseSolutionRelativeContentRootthrew when only a.slnxexisted, and.slnxcould shadow.slnin parents.Changes:
.slnprecedence; if none found, retry search for.slnxwithout changing API..slnpreference and.slnxfallback discovery.Example:
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.