Implement new Enumerator class for unified solution and project file enumeration with ProjCfg support #6
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.
This PR introduces a new
Enumeratorclass that provides a unified interface for enumerating both solution files and project files based on the requirements in issue #250648a5. The implementation extends beyond the existingSlnScannerfunctionality to support transparent enumeration of all MSBuild project types.Key Features
Unified Enumeration Interface
The new
Enumeratorclass provides two complementary methods for enumeration:EnumerateProjectPaths()- Returns project file paths:.sln,.slnx,.slnf(extracts all projects from solutions).csproj,.vbproj,.sqlproj,.fsproj,.vcxproj(direct enumeration)EnumerateProjCfg()- ReturnsProjCfgobjects with configuration details:SlnParser.ParseSolutionlogic for solution filesUsage is controlled by the new
EnumerationTypeenum:Performance Optimizations
Task.WhenAllfor improved performanceDirectory.EnumerateFileswith optimized enumeration optionsEnhanced Project Support
Extends beyond the current
SlnScannerto support:.sln,.slnx,.slnf.csproj,.vbproj,.sqlproj,.fsproj,.vcxprojImplementation Details
Core Components
Enumeratorclass inbld/Infrastructure/Enumerator.csEnumerationTypeenum added tobld/Models/DirectoryModels.csEnumeratorDemoServiceshowcasing usage patternsbld.Tests/EnumeratorTests.csIntegration Points
The new
Enumeratorcan be used as a drop-in replacement or complement toSlnScannerandSlnParserin existing services:CleaningApplicationNugetAnalysisApplicationTfmServiceOutdatedServiceBackward Compatibility
The implementation maintains full backward compatibility with existing code while providing enhanced functionality through the new enumeration interface.
Example Usage
This implementation addresses all requirements from the issue: transparent enumeration of solution and project files, support for all specified file formats, recursive project enumeration, configuration extraction, and performance optimization through parallelization.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.