Replace MSBuild interrogation with XML-based AppHost detection in ProjectLocator #11367
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.
Summary
Replaces the per-project MSBuild interrogation (
IDotNetCliRunner.GetAppHostInformationAsync
) during AppHost discovery in ProjectLocator with a lightweight XML-based heuristic that directly parses.csproj
files usingXmlDocument
.Problem
The current implementation uses MSBuild evaluation to determine if a project is an Aspire AppHost:
This approach has several performance drawbacks:
dotnet msbuild
process for every.csproj
file during discoverySolution
Implemented direct XML parsing to detect AppHost projects:
Detection Criteria
The XML heuristic detects Aspire AppHost projects by checking for either:
<Sdk Name="Aspire.AppHost.Sdk" />
element (as specified in original prompt)<IsAspireHost>true</IsAspireHost>
in any<PropertyGroup>
(for backward compatibility)Version extraction (in priority order):
<Sdk Name="Aspire.AppHost.Sdk" Version="..." />
<AspireProjectOrPackageReference Include="Aspire.Hosting*" Version="..." />
<PackageReference Include="Aspire.Hosting" Version="..." />
<AspireHostingSDKVersion>...</AspireHostingSDKVersion>
propertyBenefits
Testing
<Sdk Name="Aspire.AppHost.Sdk" />
) ✅<IsAspireHost>true</IsAspireHost>
) ✅Backward Compatibility
This change maintains full backward compatibility:
The implementation gracefully handles malformed XML files and maintains the existing fallback logic for unbuildable AppHost projects.
This pull request was created as a result of the following prompt from Copilot chat.
This pull request was created as a result of the following prompt from Copilot chat.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.