- Clarify that Delete is host-only for the global account while Remove from tenant is the tenant-level soft removal available to tenant admins
- Note in the migration guide that host-side shadow rows must use a new primary key Id different from the tenant user's Id
The implicit DisplayTemplate context caused the Razor source generator
to compile 'context.Item as IHasExtraProperties' into
'context as IHasExtraProperties' (dropping the .Item access). Since
CellDisplayContext<TItem> itself does not implement IHasExtraProperties,
the cast was always null and the cell rendered empty.
Renaming the context with Context="rowContext" produces the correct
'rowContext.Item as IHasExtraProperties' codegen and the cell now
shows the property value.
ABP dynamic HTTP client proxy uses HttpCompletionOption.ResponseHeadersRead,
but several paths in ClientProxyBase and DynamicHttpProxyInterceptor dropped
the response without disposing it, leaving the underlying connection
occupied until the server closed it or the client timed out.
Fixes#25475
Filter out UserExceptionInformer category from AbpExceptionHandlingLoggerProvider so logs written by the informer do not re-enter the same provider, which previously caused infinite recursion and a browser stack overflow.
Fixes#25463
Replace 'has not compatible with' with 'is not compatible with' in FeatureManager, SettingManager and PermissionManager (the latter is the original phrasing this PR initially mirrored).
- SettingManager.GetAllAsync / FeatureManager.GetAllWithProviderAsync: drop top-level continue and rely on the provider chain filter so allowed upstream providers can still be read via inheritance (e.g. GetAllForUserAsync now returns a Global-only setting)
- FeatureAppService.GetAsync: switch includedFeatures to HashSet for O(1) parent lookup
- FeatureManager.SetAsync: throw when providerName is not in feature.AllowedProviders
- FeatureManager.GetAllWithProviderAsync / GetOrNullInternalAsync: filter providers chain by feature.AllowedProviders (aligning with FeatureChecker)
- FeatureAppService.GetAsync: filter features by AllowedProviders and add parent chain check to prevent orphan child entries (aligning with PermissionAppService)
- SettingManager.SetAsync: throw when providerName is not in setting.Providers
- SettingManager.GetAllAsync / GetOrNullInternalAsync: filter providers chain by setting.Providers (aligning with SettingProvider)
- Add `.Application -> .Domain` arrow to all 4 diagrams
- Module diagram: remove `.Web` node (module template's `.Web` is the
module's own UI layer per `[DependsOn]` and csproj, not a standalone
host that would reference `.HttpApi`) and add `.MongoDB`
Describe how ABP Suite detects the Blazor UI library from the .csproj
package references and routes CRUD page generation through the new
Frontend.Blazor.MudBlazor.* template tree:
- index.md: new Blazor UI library section covering detection, template
routing and Template Management UI filtering.
- generating-crud-page.md: note explaining that Blazor solutions emit
MudBlazor or Blazorise UI automatically based on the resolved library.
- customizing-the-generated-code.md: warn that Blazorise and MudBlazor
customizations live under separate resource names and are not shared.
- editing-templates.md: add Frontend.Blazor.MudBlazor prefix to the
template-name conventions list.
- Use CliUrls.WwwAbpIo instead of hardcoded abp.io host/URL in the
401/403 license hint, so dev/staging environments show the right URL
- Include server-provided RemoteServiceErrorResponse details (e.g. Code:
LicenseExpired) in the CliUsageException message when available