Includes AssemblyResolve handler for reflection diagnostics,
ManifestGenerator output capture, manifest validation with
char-by-char CategoryTypeName comparison, and package verification.
UIExtension content renders at the bottom of _Layout.cshtml by design.
Added wrapper div with ID and jQuery script to move the panel after
#User_Show_AssignedDevices on the user page, falling back to after
#User_Show_Subjects if the assignment section isn't present.
UIExtension content renders at the bottom of _Layout.cshtml by design.
Added wrapper div with ID and jQuery script to move the panel after
the user assignment .status div (#Device_Show_User) on the device page.
Checks the installed manifest at App_Data\Plugins for Features array,
validates CategoryTypeName, scans Disco logs for plugin-related entries,
and shows file timestamps for the installed DLL.
Checks the installed manifest at App_Data\Plugins for Features array,
validates CategoryTypeName, scans Disco logs for plugin-related entries,
and shows file timestamps for the installed DLL. Run on the Disco server
to quickly identify whether the installed manifest has UIExtension
features or is missing them.
Previous version failed GetExportedTypes() because Assembly.Load(bytes)
couldn't resolve Disco.Services.dll from the PowerShell process. Now
uses LoadFrom() with an AssemblyResolve handler that probes both the
build output and Disco bin directories. Also adds ReflectionTypeLoad
exception detail logging and proper handler cleanup in finally block.
- Disco assembly version reporting at build start
- Reflection-based feature verification:
- Discovers UIExtensionFeature<T> implementations in compiled DLL
- Validates [PluginFeature] attribute presence on each feature
- Confirms ExecuteAction and Initialize are overridden
- Checks model types implement BaseUIModel interface
- Reports generic type definition FullName for manifest comparison
- ManifestGenerator output capture (stdout + stderr with labels)
- Manifest validation after generation:
- Verifies Features array is present and non-empty
- Char-by-char CategoryTypeName comparison with hex dump on mismatch
- Dumps raw manifest.json for manual inspection
- Package verification (zip content listing)
- Final summary with actionable next-step checklist when issues found