For what it's worth, I dug through ABP source code to find the culprit. It is on the PublishEntityCreatedEvent that gets called for every tracked entity in the AbpDbContext
class. That eventually calls the AddOrReplaceEvent on the UnitOfWork class which does this: eventRecords.FindIndex(replacementSelector);
where replacementSelector is defined as otherRecord => IsSameEntityEventRecord(eventRecord, otherRecord)
in the EntityChangeEventHelper
. That eventually gets to EntityHelper's EntityEquals(IEntity? entity1, IEntity? entity2)
which uses a ton of reflection.
So for every new entity being tracked, it runs that equality reflection code for however many records have been inserted so far - the new tracked entity will never be in there, because it is new. So if I insert 200k entities, on the next entity added it runs through 200k entities to see if it needs to replace or add. The next entity after that it needs to do it 200,001 times. It gets exponentially slower, and it's very prohibitive. For what it's worth, I ended up fixing it by overriding the AbpDbContext and NOT publishing that tracked event for those entity types (ConnectWiseEntity is a base class I have for all 10 types) like so:
After that change, my bulk insert code went from 30-40 min to only 15 seconds.
I'd like to see 2 solutions here: make the local event publishing configurable like the distributed event publishing, AND fix the performance issue.
This is the code that does it in the EntityChangeEventHelper
:
It runs the local event no matter what. Make that configurable like the distributed events below it.
Seems like the errors are coming from leptonx theme related components. SubNavbarComponent specifically? In the stacktrace/minified code, it points here: volo-ngx-lepton-x.core.mjs
function SubNavbarComponent_ng_template_2_Conditional_6_Template(rf, ctx) {
if (rf & 1) {
i0.ɵɵelementStart(0, "ul", 11);
i0.ɵɵrepeaterCreate(1, SubNavbarComponent_ng_template_2_Conditional_6_For_2_Template, 1, 1, "li", 12, _forTrack0, true);
i0.ɵɵelementEnd();
}
if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext(2);
i0.ɵɵclassProp("collapsed", !ctx_r0.item.expanded);
i0.ɵɵadvance();
i0.ɵɵrepeater(ctx_r0.item.children);
}
}
Here is our full package.json:
"name": "BMK",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve --open",
"build": "ng build",
"build:prod": "ng build --configuration production",
"watch": "ng build --watch --configuration development",
"test": "ng test",
"lint": "ng lint",
"generate-proxy": "bash ./generateProxy.sh",
"reset": "bash ./reset.sh"
},
"private": true,
"dependencies": {
"@abp/ng.components": "~8.3.1",
"@abp/ng.core": "~8.3.1",
"@abp/ng.oauth": "~8.3.1",
"@abp/ng.setting-management": "~8.3.1",
"@abp/ng.theme.shared": "~8.3.1",
"@angular/animations": "~18.2.6",
"@angular/common": "~18.2.6",
"@angular/compiler": "~18.2.6",
"@angular/core": "~18.2.6",
"@angular/forms": "~18.2.6",
"@angular/localize": "~18.2.6",
"@angular/platform-browser": "~18.2.6",
"@angular/platform-browser-dynamic": "~18.2.6",
"@angular/router": "~18.2.6",
"@volo/abp.commercial.ng.ui": "~8.3.1",
"@volo/abp.ng.account": "~8.3.1",
"@volo/abp.ng.audit-logging": "~8.3.1",
"@volo/abp.ng.gdpr": "~8.3.1",
"@volo/abp.ng.identity": "~8.3.1",
"@volo/abp.ng.language-management": "~8.3.1",
"@volo/abp.ng.openiddictpro": "~8.3.1",
"@volo/abp.ng.text-template-management": "~8.3.1",
"@volosoft/abp.ng.theme.lepton-x": "~3.3.1",
"primeflex": "^3.3.1",
"primeicons": "^7.0.0",
"primeng": "16.3.1",
"rxjs": "~7.8.0",
"tslib": "^2.0.0",
"zone.js": "~0.14.0"
},
"devDependencies": {
"@abp/ng.schematics": "~8.3.1",
"@angular-devkit/build-angular": "~18.2.6",
"@angular-devkit/core": "~18.2.6",
"@angular-devkit/schematics": "~18.2.6",
"@angular-eslint/builder": "~18.3.1",
"@angular-eslint/eslint-plugin": "~18.3.1",
"@angular-eslint/eslint-plugin-template": "~18.3.1",
"@angular-eslint/schematics": "~18.3.1",
"@angular-eslint/template-parser": "~18.3.1",
"@angular/cli": "~18.2.6",
"@angular/compiler-cli": "~18.2.6",
"@angular/language-service": "~18.2.6",
"@types/jasmine": "~3.6.0",
"@types/node": "^20.0.0",
"@typescript-eslint/eslint-plugin": "8.7.0",
"@typescript-eslint/parser": "8.7.0",
"@typescript-eslint/utils": "8.7.0",
"eslint": "^8.0.0",
"jasmine-core": "~4.0.0",
"karma": "~6.3.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage": "~2.1.0",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.0.0",
"typescript": "~5.5.0"
}
}
We recently upgrade to ABP 8.0.0 and we're having errors of the Auth Server sending an email confirmation to a new user's email address. It does not send at all.
We use the SendEmailConfirmationTokenAsync() method from the AccountAppService to try to send this email to the user upon registering but the email never gets sent. When we downgrade to ABP 7 it will work though. We can't seem to find any documentation regarding our problem.
In order to apply the grouped menu on my application, do I need to download the source code for the LeptonX Theme? I'm not sure how else I can add them into my application.
Is it possible to change the layout of the routes component to be displayed on the left hand side (ex: side navigation) without causing errors to the ABP generated components?
If so, what's the best way to go about it?
Sorry the title was wrong. Meant to say Error with the basic template
Use the abp suite cli
Application Template
goto the angular app and "yarn start"
`[error] Error: ENOENT: no such file or directory, lstat 'C:\src\pmc\Test1\Test\angular\node_modules@volosoft' at Object.realpathSync (node:fs:2538:7) at resolveGlobalStyles (C:\src\pmc\Test1\Test\angular\node_modules@angular-devkit\build-angular\src\webpack\configs\styles.js:64:33) at getStylesConfig (C:\src\pmc\Test1\Test\angular\node_modules@angular-devkit\build-angular\src\webpack\configs\styles.js:97:70) at C:\src\pmc\Test1\Test\angular\node_modules@angular-devkit\build-angular\src\builders\dev-server\index.js:144:43 at C:\src\pmc\Test1\Test\angular\node_modules@angular-devkit\build-angular\src\utils\webpack-browser-config.js:75:16 at generateWebpackConfig (C:\src\pmc\Test1\Test\angular\node_modules@angular-devkit\build-angular\src\utils\webpack-browser-config.js:64:40) at async generateBrowserWebpackConfigFromContext (C:\src\pmc\Test1\Test\angular\node_modules@angular-devkit\build-angular\src\utils\webpack-browser-config.js:125:20) at async generateI18nBrowserWebpackConfigFromContext (C:\src\pmc\Test1\Test\angular\node_modules@angular-devkit\build-angular\src\utils\webpack-browser-config.js:73:20) at async setup (C:\src\pmc\Test1\Test\angular\node_modules@angular-devkit\build-angular\src\builders\dev-server\index.js:141:47)
`
I tried this solution here, but it does not work. https://support.abp.io/QA/Questions/2824/An-error-occurred-while-generating-the-client-proxy-for-microserviceangular
Also, tried this one - https://gist.github.com/muhammedaltug/8969dd3ea00e902b034c8a5743165248, but it did not work either.
Is there any guidance on generating proxies w/ the default microservice solution?
Side question, is anyone using microservices?
Just start a new template with 6 as a microservice template.
Does not compile.
It sends out 2 email confirmations. The ABP framework sends 1 email, then the custom email.
How do I turn of the ABP framework default email confirmation. We want to use our custom email confirmation.
Or is there a way to customize the default confirmation email?
ABP Framework version: v5.1.2
UI type: Angular
DB provider: EF Core
Tiered (MVC) or Identity Server Separated (Angular): no
Exception message and stack trace: Build FAILED.
"/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.HttpApi.Host/FPM.HttpApi.Host.csproj" (Publish target) (1) ->
"/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Application/FPM.Application.csproj" (default target) (2:2) ->
"/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Application.Contracts/FPM.Application.Contracts.csproj" (default target) (5:3) ->
"/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj" (default target) (8:6) ->
(ResolveAssemblyReferences target) ->
/usr/share/dotnet/sdk/6.0.302/Microsoft.Common.CurrentVersion.targets(2302,5): warning MSB3106: Assembly strong name "/home/bryan/.nuget/packages/volo.abp.identity.pro.domain.shared/5.1.2/lib/netstandard2.0/Volo.Abp.Identity.Pro.Domain.Shared.dll" is either a path which could not be found or it is a full assembly name which is badly formed. If it is a full assembly name it may contain characters that need to be escaped with backslash(\). Those characters are Equals(=), Comma(,), Quote("), Apostrophe('), Backslash(\). [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/usr/share/dotnet/sdk/6.0.302/Microsoft.Common.CurrentVersion.targets(2302,5): warning MSB3106: Assembly strong name "/home/bryan/.nuget/packages/volo.abp.languagemanagement.domain.shared/5.1.2/lib/netstandard2.0/Volo.Abp.LanguageManagement.Domain.Shared.dll" is either a path which could not be found or it is a full assembly name which is badly formed. If it is a full assembly name it may contain characters that need to be escaped with backslash(\). Those characters are Equals(=), Comma(,), Quote("), Apostrophe('), Backslash(\). [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/usr/share/dotnet/sdk/6.0.302/Microsoft.Common.CurrentVersion.targets(2302,5): warning MSB3106: Assembly strong name "/home/bryan/.nuget/packages/volo.abp.leptontheme.management.domain.shared/5.1.2/lib/netstandard2.0/Volo.Abp.LeptonTheme.Management.Domain.Shared.dll" is either a path which could not be found or it is a full assembly name which is badly formed. If it is a full assembly name it may contain characters that need to be escaped with backslash(\). Those characters are Equals(=), Comma(,), Quote("), Apostrophe('), Backslash(\). [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/usr/share/dotnet/sdk/6.0.302/Microsoft.Common.CurrentVersion.targets(2302,5): warning MSB3106: Assembly strong name "/home/bryan/.nuget/packages/volo.abp.texttemplatemanagement.domain.shared/5.1.2/lib/netstandard2.0/Volo.Abp.TextTemplateManagement.Domain.Shared.dll" is either a path which could not be found or it is a full assembly name which is badly formed. If it is a full assembly name it may contain characters that need to be escaped with backslash(\). Those characters are Equals(=), Comma(,), Quote("), Apostrophe('), Backslash(\). [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/usr/share/dotnet/sdk/6.0.302/Microsoft.Common.CurrentVersion.targets(2302,5): warning MSB3106: Assembly strong name "/home/bryan/.nuget/packages/volo.payment.domain.shared/5.1.2/lib/netstandard2.0/Volo.Payment.Domain.Shared.dll" is either a path which could not be found or it is a full assembly name which is badly formed. If it is a full assembly name it may contain characters that need to be escaped with backslash(\). Those characters are Equals(=), Comma(,), Quote("), Apostrophe('), Backslash(\). [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/usr/share/dotnet/sdk/6.0.302/Microsoft.Common.CurrentVersion.targets(2302,5): warning MSB3106: Assembly strong name "/home/bryan/.nuget/packages/volo.saas.domain.shared/5.1.2/lib/netstandard2.0/Volo.Saas.Domain.Shared.dll" is either a path which could not be found or it is a full assembly name which is badly formed. If it is a full assembly name it may contain characters that need to be escaped with backslash(\). Those characters are Equals(=), Comma(,), Quote("), Apostrophe('), Backslash(\). [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
"/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.HttpApi.Host/FPM.HttpApi.Host.csproj" (Publish target) (1) ->
"/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Application/FPM.Application.csproj" (default target) (2:2) ->
"/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Application.Contracts/FPM.Application.Contracts.csproj" (default target) (5:3) ->
"/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj" (default target) (8:6) ->
(CoreCompile target) ->
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(7,16): error CS0234: The type or namespace name 'LanguageManagement' does not exist in the namespace 'Volo.Abp' (are you missing an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(8,16): error CS0234: The type or namespace name 'LeptonTheme' does not exist in the namespace 'Volo.Abp' (are you missing an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(15,16): error CS0234: The type or namespace name 'TextTemplateManagement' does not exist in the namespace 'Volo.Abp' (are you missing an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(17,12): error CS0234: The type or namespace name 'Saas' does not exist in the namespace 'Volo' (are you missing an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(27,12): error CS0246: The type or namespace name 'AbpIdentityProDomainSharedModule' could not be found (are you missing a using directive or an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(31,12): error CS0246: The type or namespace name 'LanguageManagementDomainSharedModule' could not be found (are you missing a using directive or an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(32,12): error CS0246: The type or namespace name 'SaasDomainSharedModule' could not be found (are you missing a using directive or an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(33,12): error CS0246: The type or namespace name 'TextTemplateManagementDomainSharedModule' could not be found (are you missing a using directive or an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPMDomainSharedModule.cs(34,12): error CS0246: The type or namespace name 'LeptonThemeManagementDomainSharedModule' could not be found (are you missing a using directive or an assembly reference?) [/home/bryan/agent1/_/68/s/aspnet-core/src/FPM.Domain.Shared/FPM.Domain.Shared.csproj]
Steps to reproduce the issue:"
Build normally on your windows machine.
Then checkin and run in Azure Devops on a build agent that is on Ubuntu
Relevant Commands when building
dotnet restore --no-cache -s https://api.nuget.org/v3/index.json -s https://www.myget.org/F/blazorise/api/v3/index.json -s https://nuget.abp.io/xxxxxx/v3/index.json dotnet publish --no-restore -c Release -o $(build.artifactstagingdirectory)\build\release
Fails
What we are seeing is the packages are not being stored via dotnet restore correctly on linux.
This is the name of the file where as is should be in the lib -> netstandard2.0 folder. Not a filename 'lib\netstandard2.0\Volo.Abp.Identity.Pro.Domain.Shared.dll'
This might be a problem with how the packages are on ABP's server?
should look like this
Has anyone tried compiling this on ubuntu?