Skip to content

feat(services): implement CPS-compatible project enumeration#7

Merged
CalvinAllen merged 6 commits into
mainfrom
feat/services/cps-compatible-enumeration
Jan 5, 2026
Merged

feat(services): implement CPS-compatible project enumeration#7
CalvinAllen merged 6 commits into
mainfrom
feat/services/cps-compatible-enumeration

Conversation

@CalvinAllen

Copy link
Copy Markdown
Contributor

Summary

  • Add ISolutionService interface for solution project enumeration
  • Add IManifestService interface for manifest loading/saving
  • Add IMsBuildQueryService interface and MsBuildQueryService implementation for MSBuild property and target queries
  • Add HasTemplateOutputGroup property to ProjectInfo model
  • Update SolutionService to implement ISolutionService and use MsBuildQueryService for template target detection
  • Update ManifestService to implement IManifestService

Test plan

  • Build the solution and verify no errors
  • Verify SolutionService correctly enumerates projects with CPS-compatible APIs
  • Verify MsBuildQueryService detects TemplateProjectOutputGroup target for VSSDK/VsixSdk projects
  • Verify HasTemplateOutputGroup is correctly populated on ProjectInfo

Closes #3

Add interfaces and MSBuild query service for improved project handling:

Interfaces:
- ISolutionService for solution project enumeration
- IManifestService for manifest loading/saving
- IMsBuildQueryService for MSBuild property and target queries

Implementation:
- MsBuildQueryService with XML-based property and target detection
- Special handling for TemplateProjectOutputGroup target detection
- SolutionService now implements ISolutionService interface
- ManifestService now implements IManifestService interface

Model updates:
- Add HasTemplateOutputGroup property to ProjectInfo

Closes #3
…vider

SVsServiceProvider is not retrievable via GetGlobalService, causing
the Add buttons in AssetsView and DependenciesView to silently fail.

Changed to use ServiceProvider.GlobalProvider which is always available.
StaticResource is resolved at XAML parse time, so adding the converter
in code-behind after InitializeComponent() fails. Moved the converter
definition to XAML resources where it's available during parsing.
- Filter out the project containing the manifest being edited from
  the project picker (can't add a project as an asset to itself)
- Add ManifestFilePath property to ManifestViewModel
- Pass manifest path through AddAssetDialog to ProjectPickerDialog
- Add HasMaximizeButton/HasMinimizeButton="False" to all dialogs
  for consistent VS-style dialog appearance
Add DialogHelper class that uses IVsUIShell.GetDialogOwnerHwnd() to
properly parent dialogs to the Visual Studio main window. This ensures
dialogs stay with VS when alt-tabbing and appear in front of VS.

- Create DialogHelper with SetOwner and ShowDialogWithOwner methods
- Update all views and dialogs to use DialogHelper.ShowDialogWithOwner
- Add ThreadHelper.ThrowIfNotOnUIThread() calls to satisfy analyzer
- Add logo.png to resources folder
- Configure manifest with Icon and PreviewImage
- Move LICENSE to resources\LICENSE in VSIX
- Update csproj to include logo in VSIX package
@CalvinAllen CalvinAllen merged commit 10f72ff into main Jan 5, 2026
1 check passed
@CalvinAllen CalvinAllen deleted the feat/services/cps-compatible-enumeration branch January 5, 2026 21:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

feat(services): implement CPS-compatible project enumeration

1 participant