Environment
- Rhino: 8.32.26160.13001 (Rhino 8 SR32), Windows
- OS: Windows 11 (10.0.26200), .NET 8.0.14
- Our plugin is a Cloud Zoo Issuer product (issuer registered with McNeel, key prefix
ARTS, product id26a7b6b7-…), signed with a McNeel-issued Authenticode certificate. LicenseCapabilities = SupportsRhinoAccounts | SupportsStandalone
Symptom
When a user enters a valid license key in the standard PlugIn.GetLicense “Add License” dialog, a NullReferenceException is thrown inside ValidationClient and GetLicense returns false. The license is never added. The exception Source is ValidationClient and the top stack frame is your own view-model:
System.NullReferenceException: Object reference not set to an instance of an object.
Source : ValidationClient
TargetSite: Void MoveNext()
StackTrace:
at ValidationClient.UI.ViewModels.RhinoAccountsNetworkActivityStep.LoginAndAddLicenseAsync(CancellationToken cancelToken)
Our ValidateProductKey returns Success with a fully-populated LicenseData before the crash
Our delegate completes cleanly ~1.5 s before the NRE. LicenseData.IsValid() is true, and every field is populated (we deliberately set DateToExpire far into the future and set ProductIcon from an embedded .ico, to rule out null-field theories):
ProductLicense = "ARTS-XXXX-XXXX-XXXX-XXXX"
SerialNumber = "ARTS-XXXX-XXXX-XXXX-XXXX"
LicenseTitle = "Archiroid Test Plugin"
BuildType = Release
LicenseCount = 1
DateToExpire = 2126-07-03T01:27:27Z
ProductIcon = (Icon, non-null)
IsValid() = True
-> returning ValidateResult.Success
The NRE stack contains no plugin code — our delegate has already returned.
Key isolating fact: the same key/product/issuer works via the web flow
If instead we add the exact same key through the Rhino Accounts web page (rhino3d.com/licenses/?controller=add_licenses), everything succeeds: Cloud Zoo calls our /add_license callback, the lease is issued, and OnLeaseChanged fires with a valid Commercial lease. So the issuer server, the product registration, and the key are all valid — only the in-Rhino “Add License” dialog path fails.
We implemented this following the Cloud Zoo developer guides (which are dated 2019–2021), so before we invest more here we’d like to confirm we are on the intended path.
Questions
- Is the in-plugin
GetLicense“Add License” dialog still the supported/recommended way to add a Cloud Zoo license from within a third-party plugin on Rhino 8? The guides we followed (“Modify Plug-In licensing code to support Cloud Zoo”, “Cloud Zoo overview”) are dated 2019. If this in-app dialog has been superseded (e.g. you now expect users to add keys via the Rhino Accounts web page), we’re happy to adopt the current approach — please point us to it. - Is this NRE a known issue in
ValidationClient.RhinoAccountsNetworkActivityStep.LoginAndAddLicenseAsyncin 8.32? Is it fixed in a newer 8.x service release? - Is there anything a plugin can return from
ValidateProductKey(or configure) to avoid this, or is the null internal toValidationClient? - If it is a defect on your side, is there a YouTrack (RH-…) we can follow?
Happy to share the full diagnostic log and a minimal reproducing plugin.