Undo the tsconfig.json path mappings to node_modules (the ones like @abp/*: node_modules/@abp/*, @volo/*: node_modules/@volo/*).
Those mappings can make Angular/TS resolve different physical copies / entry points of the same ABP packages and that commonly ends up as:
_ConfigStateService).Fix the SORT_COMPARE_FUNC error by registering its provider (only if you really need custom sorting).
If your app uses ABP menu/navigation sorting customization, you must provide the token:
// app.module.ts (or a core module that is imported once)
import { NgModule } from '@angular/core';
import { SORT_COMPARE_FUNC } from '@abp/ng.core';
export function sortCompareFuncFactory() {
return (a: any, b: any) => 0; // replace with your compare logic
}
@NgModule({
providers: [
{
provide: SORT_COMPARE_FUNC,
useFactory: sortCompareFuncFactory,
},
],
})
export class AppModule {}
If you don’t need custom sorting, the real fix is still the first bullet (stop forcing @abp/* / @volo/* to resolve from node_modules via paths), because ABP’s own module should normally provide the default token.
Fix the “You should add @abp/ng-oauth packages…” message by installing/including ABP’s Angular auth package (for v10 this is still the @abp/ng.oauth package family). Ensure it’s referenced in package.json and that your app is bootstrapped with the ABP auth module/provider setup (otherwise you’ll get missing CORE_OPTIONS / auth-related tokens as well).
(This error is emitted by ABP when no auth package is present/loaded.)
Then clean-install dependencies to remove any duplicated dependency tree:
node_modules and lock file (package-lock.json or yarn.lock)npm ci or yarn install)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.
node, npm, and yarn work in your terminal, but ABP Suite logs say “NPM is not installed” and then abp install-libs exited with code 127, this is almost always a PATH/environment mismatch: ABP Suite is launching the task in a non-interactive shell that does not load nvm, so npm is not on PATH for the ABP Suite process.Do this fix (macOS + nvm):
Make Node/NPM available to GUI apps (ABP Suite)
/usr/local/bin/node or /opt/homebrew/bin/node is always available), or ensure ABP Suite is started from a terminal session where nvm is initialized.Workaround (no reinstall): start ABP Suite from Terminal so it inherits nvm PATH
node -v works) and start ABP Suite from that same Terminal session (so it inherits the environment).Verify by running the same command ABP Suite runs From your solution root:
abp install-libs
If this succeeds in Terminal but fails only in ABP Suite, it confirms the issue is ABP Suite’s environment/PATH.
abp install-libs
Relevant docs (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.
NPM is not installed and then abp install-libs exited with code 127. Exit code 127 typically means the command (npm) can’t be found in the environment/path.abp install-libs, which requires Node.js + npm (and it’s recommended to use Yarn v1).Do the following on your machine (macOS):
node -v
npm -v
npm install -g yarn
yarn -v
abp install-libs
Then run ABP Suite > Tasks > Initialize Solution again.
If you still get a libs install error, delete JS install artifacts and retry:
find . -name node_modules -type d -prune -exec rm -rf '{}' +
find . -name package-lock.json -delete
abp install-libs
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.
AbpDistributedEventBusOptions (and add the required DbContext/Mongo context mappings as described in the docs).What to do (ABP 9.1.1):
*.HttpApi.Host module’s ConfigureServices):Configure<AbpDistributedEventBusOptions>(options =>
{
options.Outboxes.Configure(config =>
{
config.UseDbContext<YourDbContext>();
});
options.Inboxes.Configure(config =>
{
config.UseDbContext<YourDbContext>();
});
});
IncomingEventRecord/OutgoingEventRecord and migrations), they simply won’t be used anymore. You can keep them or remove them with a migration (optional).Optional (per publish):
useOutbox: false when calling PublishAsync (but the main “disable globally” action is removing the Outbox/Inbox configuration).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.
src is rendered as a root-relative URL (/api/account/profile-picture-file/{id}) instead of being generated with ASP.NET Core’s pathbase-aware helpers (e.g., Url.Content("~/...")) when the app is hosted under an IIS sub-application (e.g., /server).https://<host>/api/... and 404s as you observed.Workaround (no framework change required): override the Manage page UI and make the image URL pathbase-aware
<img> src generation to be pathbase-aware using Url.Content("~...") (or an equivalent ABP/ASP.NET helper). Example fix:<img id="CurrentProfilePicture"
src="@Url.Content($"~/api/account/profile-picture-file/{Model.ProfilePictureId}")"
alt="Current profile picture" />
or (if the id is in a hidden field and set via JS) build it via the app’s base path instead of hardcoding /api/...:
// example: prefix with abp.appPath (should be "/server/")
const url = abp.appPath + 'api/account/profile-picture-file/' + id;
document.getElementById('CurrentProfilePicture').src = url;
That will produce https://<host>/server/api/account/profile-picture-file/{id} when abp.appPath is /server/.
Notes
Volo.Abp.Account.Pro.Public.Web from the available indexed repositories here (no repository source was available via the tooling), so I’m providing the workaround pattern rather than a verified patch/PR reference.<img id="CurrentProfilePicture"...> is rendered.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 “sometimes created, sometimes not” behavior almost always means the tenant creation succeeded, but the follow-up migration/seed step intermittently fails (typically a timeout / connection resolution problem inside the tenant-created event handler). When that happens, ABP doesn’t roll back the tenant record, but the admin user seed doesn’t complete, so you observe randomness depending on timing/environment load.
Apply the fix in your tenant-created handler to remove the intermittent UoW/connection-string resolution problem:
*TenantDatabaseMigrationHandler and handles TenantCreatedEto).MigrateAndSeedForTenantAsync(...), find the seeding block and ensure it uses requiresNew: false:// Seed data
using (var uow = _unitOfWorkManager.Begin(requiresNew: false, isTransactional: true))
{
await _dataSeeder.SeedAsync(
new DataSeedContext(tenantId)
.WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, adminEmail)
.WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, adminPassword)
);
await uow.CompleteAsync();
}
This change prevents starting a new UoW that can intermittently fail to resolve the correct connection/tenant context (and then time out), which is what causes “sometimes yes, sometimes no”.
Notes:
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.
In ABP, the tenant admin user is created by the data seeding process that runs right after the tenant is created. If the seeding/migration handler fails (often due to a connection string / UoW issue), the tenant record is created but the admin user is not.
Fix path (the known/common cause from ABP support case #2240):
YourProjectNameTenantDatabaseMigrationHandler or YourProjectNameTenantCreatedEventHandlerTenantCreatedEto)MigrateAndSeedForTenantAsync(...) (or similarly named) method, locate the seeding Unit Of Work block. If you see something like:using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
{
await _dataSeeder.SeedAsync(
new DataSeedContext(tenantId)
.WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, adminEmail)
.WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, adminPassword)
);
await uow.CompleteAsync();
}
change it to **requiresNew: false**:
using (var uow = _unitOfWorkManager.Begin(requiresNew: false, isTransactional: true))
{
await _dataSeeder.SeedAsync(
new DataSeedContext(tenantId)
.WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, adminEmail)
.WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, adminPassword)
);
await uow.CompleteAsync();
}
AbpUsers contains an admin record with that tenant’s TenantId.Links:
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.
Update ABP Studio to the latest version (a crash/disappear during run is commonly fixed by patch releases; ABP Studio is under active development and they publish fixes frequently).
Then check ABP Studio’s release notes to ensure you are on a build that includes crash fixes (especially Windows CEF/embedded browser related fixes that can terminate the app without a visible error):
If it still crashes after updating, the definitive next step is to file an issue so the ABP team can inspect the crash logs/dumps (ABP Studio is a desktop app; when it “just disappears”, it typically needs the app’s logs and environment details to diagnose reliably):
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.
appsettings.json. ABP’s feature system is designed to resolve feature values from providers like the Feature Management module store (database) and related providers, not from application configuration.appsettings.json out-of-the-box in 10.1.0.appsettings.json-based feature provider (or similar), that would need to be included in 10.1.x after the PR was merged. From the information I can verify here, I can’t confirm that this PR is included in 10.1.0.If you want config-based flags today, the verified approach in ABP is to use the Feature Management module UI/API (which persists values), or implement your own custom IFeatureValueProvider (if available in your ABP version) that reads from IConfiguration and register it.
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.
ChatClientChat disables the Send button until it can successfully resolve the workspace (by WorkspaceName) from the AI Management backend configuration. If the workspace doesn’t exist (or the current user can’t access it), the component stays in a “not ready” state and the button remains disabled.
Fix:
myWorkspace (must match WorkspaceName exactly), and configure at least one provider/model (so the workspace is usable).(Optional but recommended) Provide a stable ConversationId so the widget can persist history:
<ChatClientChat
ShowStreamCheckbox="false"
WorkspaceName="myWorkspace"
ConversationId="@($"my-conversation-{CurrentUser.Id}")" />
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.