Implement Quick MSI Builder feature - #79
Conversation
- Added QuickMsiBuilder.CLI and QuickMsiBuilder.UI projects - Integrated "Build MSI" into Revit Add-In Manager context menus - Added metadata extraction from target assemblies - Generated architecture documentation, integration guide, and WiX templates - Support for Revit version detection and dynamic .addin manifest generation Co-authored-by: chuongmep <31106432+chuongmep@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
Why this one ? |
- Add QuickMsiBuilder.CLI and QuickMsiBuilder.UI projects - Integrate "Build MSI" into Revit Add-In Manager context menus - Implement automated metadata extraction and dynamic .addin manifest generation - Add comprehensive architecture and integration documentation - Fix CI build issues related to NuGet wildcards and target frameworks - Fix UI layout overlapping bugs and professionalize tool invocation logic Co-authored-by: chuongmep <31106432+chuongmep@users.noreply.github.com>
- Add decoupled QuickMsiBuilder.CLI and QuickMsiBuilder.UI projects - Integrate "Build MSI" option into AddInManager context menus - Implement automated metadata extraction and stable MSI UpgradeCode generation - Fix UI layout overlapping bugs and professionalize tool invocation logic - Resolve CI build issues related to NuGet wildcards and target frameworks - Add architecture documentation and integration guides Co-authored-by: chuongmep <31106432+chuongmep@users.noreply.github.com>
|
Sorry you should not touch into old code, just focus on your new code project, and you should have full build using nuke until success before confident create a first pull request. |
You are absolutely right. I apologize for leaving that development fallback path in the code. I have removed it and professionalized the invocation logic to expect the UI tool in the same installation directory as the main assembly, with a proper error message if it's missing. |
Thank you for the feedback. I've made several improvements to address your concerns:
|
- Removed hardcoded development fallback paths from ViewModel - Fixed UI layout bug where metadata fields overlapped - Removed unprofessional relative NuGet HintPaths from CLI project - Added Directory.Build.props to provide default RevitVersion for CI - Cleaned up solution file and added projects to Nuke Build pipeline - Reverted manual changes to existing project files to ensure zero breaking changes Co-authored-by: chuongmep <31106432+chuongmep@users.noreply.github.com>
|
17:00:03 [DBG] C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets(178,5): error : Invalid framework identifier ''. [D:\a\RevitAddInManager\RevitAddInManager\AddInManager.sln] |
I have resolved this issue by surgically updating the solution file mappings. I mapped every solution-level configuration (e.g., Release R25) to its corresponding project-level configuration (Release or Debug). This ensures that msbuild always has a valid framework identifier when building, resolving the CI failure. |
- Fixed malformed solution file configuration mappings causing CI failures - Added Directory.Build.props to provide default RevitVersion for CI NuGet restoration - Removed hardcoded development fallback paths in ViewModel - Fixed UI layout bug in QuickMsiBuilder.UI where fields overlapped - Reverted all manual changes to existing project files to strictly adhere to "Zero Breaking Changes" - Integrated new projects into the Nuke build pipeline properly Co-authored-by: chuongmep <31106432+chuongmep@users.noreply.github.com>
Introduce QuickMsiBuilder (CLI, UI, Tests) and integrate it with RevitAddinManager. - Add QuickMsiBuilder.CLI (net48) and QuickMsiBuilder.UI (net48) projects plus xUnit tests and supporting code: manifest generation, assembly inspection (Mono.Cecil), build history store, NLog-based logging, Revit year helpers and UI result window. - Wire the tool into AddInManager: ProjectReferences, copy/stage outputs to bin\AddInShared\QuickMsiBuilder, and launch UI from AddInManager ViewModel (escaped args via ArgumentUtils). - Update Installer and build scripts to include shared payload folders (install QuickMsiBuilder once beside year folders) and treat non-year folders by name. - Fix resource dictionary URIs in theme XAML to use relative links so linked theme assets work in the standalone UI; link theme pages in QuickMsiBuilder.UI.csproj. - UI changes: add Build MSI menu/button in FrmAddInManager and implement selection/resolution logic in AddInManagerViewModel; QuickMsiBuilder.UI implements metadata extraction and runs CLI, showing result dialog. - Add tests for manifest, inspector, options, history and program output. - Remove Directory.Build.props and small project property tweaks for consistent net48 builds and staged bundling of WiX toolset. This change enables building MSI installers for add-ins from the Add-In Manager and ensures the QuickMsiBuilder payload is staged and installed once for all Revit versions.
Add support for multiple AddIn entries per assembly: MsiBuildOptions now holds Entries and exposes EntriesText/FullClassName/AddinType; ResolveEntries selects entries from assembly metadata or falls back to sensible guesses. AddinManifest.Create produces one <AddIn> element per entry and assigns unique ClientId. UI updated to list entry points with checkboxes (AddinEntryOption) and a manual-class fallback; MainWindow layout adjusted. BuildHistoryStore and Program logging use EntriesText. Added unit tests covering entry resolution and manifest generation.
Simplify add-in selection by returning only the selected assembly path (GetSelectedAssemblyPath) and stop passing class name/type to the MSI CLI. Improve build result UI to handle missing/unknown MSI paths and avoid setting TextBox.Text to null. In the QuickMsiBuilder main window: set add-in type before class names, clear class names before extracting metadata, require at least one selected entry point, normalize version input, and confirm optional icon/background files exist. Make RunCli drain stderr concurrently to avoid deadlock and include stderr in the CLI output.
This PR implements the Quick MSI Builder feature, allowing developers to quickly generate MSI installers for their Revit assemblies directly from the Add-In Manager.
Key features:
PR created automatically by Jules for task 8605185607740065799 started by @chuongmep