Microsoft.Azure.ServiceBus with the new Azure SDK package: Azure.Messaging.ServiceBus.Update your project file:
<ItemGroup>
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.*" />
</ItemGroup>
Then remove the old reference:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.ServiceBus" Version="4.2.1" />
</ItemGroup>
Notes (ABP-specific):
ABP’s Azure Service Bus integration package (Volo.Abp.AzureServiceBus) already depends on Azure.Messaging.ServiceBus (not Microsoft.Azure.ServiceBus), so in many solutions you can simply remove Microsoft.Azure.ServiceBus if it’s not used by your own code.
If you have custom code that uses Microsoft.Azure.ServiceBus types (QueueClient, TopicClient, Message, etc.), you must also migrate that code to the new API surface (ServiceBusClient, ServiceBusSender, ServiceBusProcessor, ServiceBusMessage, etc.).
Sources:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
abpframework/abp repository. Those screens belong to the AI Management (PRO/commercial) UI, so you won’t find the missing MudBlazor components there to “enable” via configuration.If you want to implement it yourself: build a MudBlazor dialog for MCP selection and persist the selection by calling the corresponding AI Management endpoints (workspace update / MCP assignment). Likewise, add tabs for Embedding/Vector Store fields and send them in the workspace create/update DTOs used by the module’s application services.
(Links are omitted because I can’t verify a specific public ABP OSS source location for these MudBlazor components—the missing parts are not present in the indexed OSS repository content.)
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
WindowsAzure.ServiceBus / Microsoft.Azure.ServiceBus at runtime.Azure.Messaging.ServiceBus, not Microsoft.Azure.ServiceBus / WindowsAzure.ServiceBus. This can be verified from ABP source (AzureDistributedEventBus.cs) where it directly references Azure.Messaging.ServiceBus types like ServiceBusMessage and ServiceBusReceivedMessage.What this means for your case (ABP 7.0 using “Volo DLL”):
Volo.Abp.EventBus.Azure / Volo.Abp.AzureServiceBus), your runtime dependency is Azure.Messaging.ServiceBus, so the retirement of Microsoft.Azure.ServiceBus / WindowsAzure.ServiceBus should not impact you.Microsoft.Azure.ServiceBus / WindowsAzure.ServiceBus at runtime.Recommended action (to be 100% sure):
Microsoft.Azure.ServiceBus or WindowsAzure.ServiceBus.Azure.Messaging.ServiceBus.Azure.Messaging.ServiceBus (ABP 10 migration is a good time to eliminate legacy dependencies anyway).Links (verified):
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Please contact us at https://abp.io/contact.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
This is a bug/limitation in the Angular proxy generator (@abp/ng.schematics 10.6.0) around package DTO import resolution, and it can surface exactly as you described:
EntityChangeWithUsernameDto) references Volo.Abp.AuditLogging.EntityChangeDto.EntityChangeDto is in VOLO_PACKAGE_PROXY_IMPORTS, so it is intentionally not generated into your local models.ts.import type { EntityChangeDto } from '@volo/abp.ng.audit-logging/proxy', leaving an unbound type and causing Cannot find name 'EntityChangeDto'.Verified from the ABP repo: EntityChangeDto is explicitly mapped to the audit-logging proxy package:
export const VOLO_PACKAGE_PROXY_IMPORTS = new Map<string, string>([
['Volo.Abp.AuditLogging.EntityChangeDto', '@volo/abp.ng.audit-logging/proxy'],
// ...
]);
(from npm/ng-packs/packages/schematics/src/constants/volo.ts)
EntityChangeDto in a property (not only via inheritance/indirect reference). Example:using Volo.Abp.AuditLogging;
namespace Acme.MyApp.Audit
{
public class EntityChangeWithUsernameDto
{
public EntityChangeDto Change { get; set; } = default!;
public string? UserName { get; set; }
}
}
abp generate-proxy -t ng
This typically makes the generator treat the reference as an “external” type and it will import it (and since it’s in VOLO_PACKAGE_PROXY_IMPORTS, it should import from @volo/abp.ng.audit-logging/proxy).
EntityChangeWithUsernameDto:import type { EntityChangeDto } from '@volo/abp.ng.audit-logging/proxy';
and/or fix wrong service imports that incorrectly point to local ./models instead of the package proxy. This is consistent with what you already did locally.
What to do for a permanent fix (upstream):
VOLO_PACKAGE_PROXY_IMPORTS) and also has a resolveAbpPackages(models) step in utils/model.ts that rewrites import paths for model imports, but the behavior you observed indicates the import collection step can skip adding the import before that resolution can apply.@abp/ng.schematics so that:
VOLO_PACKAGE_PROXY_IMPORTS) are still imported, even if they share the same C# namespace as the current model; and./models).If you want to avoid maintaining a fork, the only “no-regeneration-maintenance” workaround today is the composition DTO approach above (return a DTO that has an EntityChangeDto property), because it tends to produce stable imports.
(Links omitted because no specific public issue/patch URL was provided in the verified tool context for this exact 10.6.0 scenario.)
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
It does not mean every profile column in AbpUsers will always be synced across tenant rows.
You have two choices:
A. Enforce “global profile” behavior (recommended for Shared accounts)
In ABP, this is typically done by replacing the profile application service that My Account uses (the endpoint behind that page) and redirecting writes to the “global” user record (or ensuring ABP’s shared-user manager is used for the update).
B. Disable those fields in tenant UI
Based on your test, some fields synced once (name) but phone didn’t. ABP documentation confirms the critical part: security-related settings are host-managed, but it does not promise that every AbpUsers field (like PhoneNumber) is always replicated tenant-to-tenant.
So you should design as:
ABP Shared User Accounts introduces a “pending / global” concept: a user may exist without being a “Host user” in the sense you expect (this is explained in the shared accounts article: newly registered users are not necessarily a Host user or member of any tenant by default). So instead of relying on “there must be a TenantId=NULL row”, rely on ABP’s Shared Accounts flow and the fact that 2FA/security is evaluated at the host-managed identity side.
Practically, for your application you should:
Use ABP’s Identity 2FA feature (providers/config etc.) and enable it via the account/identity UI/flow as documented here:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
PhoneNumber in AbpUsers for 2FA.Name) can be propagated, but don’t assume every column in AbpUsers is replicated.Ensure your app is configured to use ABP Identity 2FA features (providers etc.). ABP’s official 2FA guidance is here (covers enabling and configuration):
Make sure users configure 2FA from the account UI (typically “My Account” / security settings). In Shared strategy, since 2FA is Host-managed, you should ensure the 2FA setup flow is executed against the global identity.
If you specifically want SMS 2FA:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
TenantId = NULL row for that email) can happen depending on where you are checking and how you registered:
AbpIdentityPendingTenantUserOptions.Strategy decides what happens next. This is part of the Shared User Accounts design.So, the correct interpretation is:
Shared mode does not mean “every user must have a Host(tenantId=NULL) record immediately after registration.”
AbpIdentityPendingTenantUserOptions.Strategy (CreateTenant / Redirect / Inform).How does it work as “shared” then?
Why you might not see the Host row
AbpUsers is in the host DB, and tenant AbpUsers is in the tenant DB. If you run select * from AbpUsers only on the tenant DB, you will never see the host record.TenantId=NULL row right after registration.What you should do to validate shared behavior (deterministic check)
Links (validated):
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
If you invited anjijannavarapu@gmail.com from a tenant and after accepting the invitation you see the account created under HOST (TenantId = NULL), that is expected in Shared User Accounts.
Yes: if you create User B in HOST first, then from Tenant A you invite the same User B (same email), it will work as shared user accounts:
You are not “missing anything” just because it appears in HOST. That’s the design.
Validated references:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Yes: with TenantUserSharingStrategy.Shared, the intended way to associate a user with a tenant is the invitation flow (invite → accept). If you “create the same user again” inside each tenant like in isolated mode, you end up with separate identities and you will “break” the shared-account model (no global identity to synchronize).
It’s not that a user must be created under Host manually. In Shared mode, the system is designed so that users are global, and tenants are workspaces a user joins. The normal onboarding is:
When a user is invited from Tenant A for the first time and they don’t already have an account, after they accept/register ABP will (conceptually) create:
What role is assigned in Host?
Validated references:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.