Repository navigation
Releases: HYMMA/LicenseManagement.EndUser.Wpf
Releases · HYMMA/LicenseManagement.EndUser.Wpf
Release list
v2.6.0
[2.6.0] - 2026-10-15%0D%0A%0D%0A### Added%0D%0A- Activate a computer that can't reach the license server. When a check, download%0D%0A or registration fails because the server is unreachable, the error dialog now offers%0D%0A Install license file… (pick a .lic downloaded from the portal or received by%0D%0A email; it is verified for this product and computer before it replaces anything) and,%0D%0A when portalUrl is configured, Open license portal. Each product card also has an%0D%0A Install file… link.%0D%0A- Device ID with a Copy link in the header. The license portal accepts it to%0D%0A activate exactly this computer.%0D%0A- portalUrl app setting / LicenseViewModel.PortalUrl; when set, the footer links to%0D%0A the vendor's license portal.%0D%0A%0D%0A### Changed%0D%0A- Requires LicenseManagement.EndUser 3.5.0. Network failures now say what failed%0D%0A (e.g. "This computer's network could not find license-management.com … ask your IT%0D%0A team to allow it") instead of a generic "could not connect".%0D%0A- The error dialog's DataContext is now an ErrorViewModel (the exception is its%0D%0A Error property). Override CreateErrorViewModel to add recovery actions.
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.6.0
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.6.0
v2.5.1
[2.5.1] - 2026-09-09%0A%0A### Fixed%0A- AssemblyFileVersion still read 2.4.0.0 in the 2.5.0 package, so the shipped%0A DLL misreported its release. Corrected, and publish.yml now fails if the%0A nuspec version and the assembly stamp disagree.%0A- Consumes LicenseManagement.EndUser 3.4.1, which carries the same correction.
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.5.1
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.5.1
v2.5.0
[2.5.0] - 2026-09-09%0A%0A### Security%0A- System.Configuration.ConfigurationManager moved from 9.0.17 to 10.0.12, and%0A LicenseManagement.EndUser to 3.4.0, which makes the same move for%0A System.Security.Cryptography.Xml and System.Management. The 9.0.x line carries%0A GHSA-23rf-6693-g89p and four%0A sibling advisories, and a Black Duck scan on an Autodesk App Store submission%0A rejected the package over exactly this. 10.0.x also has the longer support runway:%0A 9.0.x ends 10 November 2026, 10.0.x runs to November 2028.%0A%0A### Notes%0A- Not a .NET 10 migration. The net8 assembly still targets net8.0-windows; the%0A 10.0.x packages ship a real lib/net8.0 asset, so consumers keep running on .NET 8%0A hosts. The net481 assembly is untouched.%0A%0A### Fixed%0A- The release workflow could not have published this package. publish.yml hard-coded%0A LicenseManagement.EndUser at 3.1.1 in two places while the csproj and nuspec said%0A 3.3.0, so nuget pack would have looked for a packages\LicenseManagement.EndUser.3.3.0\%0A directory that was never installed. The version is now read from the csproj, and the%0A workflow fails loudly if the csproj and nuspec disagree.
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.5.0
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.5.0
v2.4.0
Release version 2.4.0
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.4.0
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.4.0
v2.3.4
[2.3.4] - 2026-06-26%0D%0A%0D%0AFirst public release since 2.3.0 — fixes the empty-window regression and several UI issues%0D%0Afrom the grouped-cards redesign.%0D%0A%0D%0A### Fixed%0D%0A- MainWindow rendered empty when License was assigned in code. The window hosted%0D%0A LicenseControl with a bare License='{Binding}', which resolved against the control's%0D%0A own self-bound DataContext (stuck at the LicenseConfigurationLoader.TryLoad() default),%0D%0A so a window.License set in code never reached the control. It now binds directly to the%0D%0A window's License. (The sample app was unaffected because it populates products via the%0D%0A default value / App.config rather than assigning License.)%0D%0A- Cards no longer sit at a fixed 332px with dead space on the right. The Bands and%0D%0A Switcher layouts lay cards out in a stretch-to-fill grid and the content cap was widened, so%0D%0A cards grow with the window.%0D%0A- Buttons were inert — added real hover and pressed states to the primary, ghost and link%0D%0A button styles (previously only a faint hover and no pressed feedback).%0D%0A- Window could freeze briefly on open. Reading a licence runs on the UI thread and, for%0D%0A non-valid states, reaches the licence server; reading every card synchronously on open left%0D%0A the window painted but unresponsive for a beat (see the async-loading change below).%0D%0A- Validity meter could read ~0%25 with weeks left. A default(DateTime) period-start date%0D%0A from the model was used as a real window start, making the window span ~2000 years. Such%0D%0A dates are now treated as unknown, falling back to the publisher's ValidDays.%0D%0A%0D%0A### Changed%0D%0A- Cards load asynchronously with a per-card spinner. Each not-yet-loaded card is read in%0D%0A the background (off the UI thread, one at a time so reads never race on the licence file)%0D%0A while showing a "Checking license…" spinner, so the window paints immediately. The per-card%0D%0A Check / Refresh action and the post-Register / post-Unregister refresh use the same path. A%0D%0A host that has already validated its products can seed the cards directly via%0D%0A ProductViewModel.UpdateLicenseSnapshot(model, validDays) so they appear instantly.%0D%0A- Clearer per-status labels. Unknown → "Couldn't verify", Expired → "File%0D%0A Expired", ReceiptExpired → "Subscription Ended", ReceiptUnregistered → "Computer%0D%0A Unregistered" (with the matching meta line).%0D%0A%0D%0A### Added%0D%0A- ProductViewModel.IsLoading and LicenseViewModel.LoadAllProducts(...) /%0D%0A RefreshProduct(...) for the async, spinner-driven loading; an LmSpinner style.
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.3.4
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.3.4
v2.3.0
[2.3.0] - 2026-06-25%0D%0A%0D%0A### Added%0D%0A- Grouped product cards. The license window now renders each product as a card instead%0D%0A of a dropdown, arranged into developer-defined groups (e.g. Monthly / Annual). Configure%0D%0A in code with LicenseViewModel.ApplyGrouping(IEnumerable<ProductGroupDefinition>, ProductLayout),%0D%0A or zero-code via the App.config <ProductGroups> section + licenseLayout app setting.%0D%0A- Three selectable layouts via the new ProductLayout enum — Bands (default, stacked%0D%0A bands), Lanes (side-by-side columns), Switcher (segmented tabs). The developer picks%0D%0A one; the end user cannot change it.%0D%0A- Per-card status, validity meter and actions. Each card shows its own status chip, a%0D%0A validity meter, the relevant expiry/countdown, and the status-appropriate action%0D%0A (Register / Unregister / Download new file). New public types: ProductLayout,%0D%0A ProductGroupDefinition, ProductGroupViewModel.%0D%0A%0D%0A### Changed%0D%0A- Validity meter is now period-accurate. The bar reflects the real window for the%0D%0A status — subscription term (Receipt.Created → Receipt.Expires), trial window%0D%0A (License.Created → TrialEndDate), or issued file validity (License.Updated → Expires),%0D%0A falling back to the publisher's ValidDays only when no period start is known. Previously%0D%0A it used the product's DB-creation date, which was not a meaningful window.%0D%0A- MainWindow is now a thin host of LicenseControl, so the standalone-window and%0D%0A embedded experiences are identical. The public MainWindow.License / LicenseControl.License%0D%0A API and LicenseViewModel.FromContext(...) are unchanged.%0D%0A- Register / Unregister / Error dialogs restyled to match the card UI (bindings,%0D%0A commands and receipt-code validation unchanged).%0D%0A%0D%0A### Fixed%0D%0A- A license check that returns Unknown (e.g. it threw) now shows a distinct "Unverified"%0D%0A card state with a retry, instead of being conflated with the never-checked "Not checked"%0D%0A state — a failed check no longer renders as a blank/unloaded card.%0D%0A%0D%0A### Notes%0D%0A- The cards load each product's status lazily (the first on open, the rest on demand) to%0D%0A avoid a burst of server calls. No core SDK or server change is required for grouping — it%0D%0A is purely a presentation concern over the product ids you already configure.
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.3.0
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.3.0
v2.2.1
[2.2.1] - 2026-06-17%0D%0A%0D%0A### Fixed%0D%0A- Aligned the core LicenseManagement.EndUser version across the whole build. The%0D%0A net481 assembly was compiled in CI against 2.0.1 while the package bundled 3.0.2 and%0D%0A the net8 asset depended on 3.1.0 — three different versions, risking a runtime%0D%0A MissingMethodException for net481 consumers (a constructor signature differs between%0D%0A 2.x and 3.x). Everything now uses 3.1.1: the CI install/build version, the bundled%0D%0A net481 DLL, and the net8 dependency. Also picks up the net8 DNS-staleness and%0D%0A HTTPS-guard fixes from EndUser 3.1.1.
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.2.1
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.2.1
v2.2.0
[2.2.0] - 2026-06-16%0D%0A%0D%0A### Added%0D%0A- net8.0-windows target. The package now ships lib/net8.0-windows7.0 alongside the%0D%0A existing lib/net481, so .NET 8 WPF hosts (e.g. the CadShift for Inventor add-in) can%0D%0A reuse the shared license Window / LicenseControl — including the products ComboBox that%0D%0A binds to the developer-supplied product list. Built by a sibling project (net8/) that%0D%0A links the same XAML + sources; the net481 assembly is unchanged. On net8 the core SDK%0D%0A and System.Configuration.ConfigurationManager come in as package dependencies (bundled%0D%0A as loose files only for net481), and the unused Properties.Settings / System.Drawing%0D%0A resx template entries are dropped.
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.2.0
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.2.0
v2.1.1
[2.1.1] - 2026-05-15%0D%0A%0D%0A### Changed%0D%0A- Bumped LicenseManagement.EndUser dependency from 3.0.1 to 3.0.2. The 3.0.1 uninstall%0D%0A disk-read approach had two bugs: deleted file = stuck seat, shared file = wrong computer%0D%0A unregistered. 3.0.2 restores the original server chain (identity always from hardware).
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.1.1
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.1.1
v2.1.0
[2.1.0] - 2026-05-15%0D%0A%0D%0A### Changed%0D%0A- Bumped LicenseManagement.EndUser dependency from 2.0.1 to 3.0.1 to pick up tamper-detection%0D%0A fix in LicenseSignatureValidationHandler and the uninstall disk-read fix.%0D%0A%0D%0A### Added%0D%0A- Unit test project (Tests/LicenseManagement.EndUser.Wpf.Tests) covering LicenseViewModel and%0D%0A ProductViewModel property change notifications. Run with dotnet test after building the%0D%0A library with MSBuild (XAML compilation requires the full MSBuild WPF targets).
NuGet Package
Install via NuGet:
Install-Package LicenseManagement.EndUser.Wpf -Version 2.1.0
Or via .NET CLI:
dotnet add package LicenseManagement.EndUser.Wpf --version 2.1.0