Browse Source

Merge branch 'dev' into issue-switch-to-nightly-cpm-support

pull/26109/head
Zeynep Gizem Fırat 1 day ago
parent
commit
b3841500b2
  1. 128
      Directory.Packages.props
  2. 22
      abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/pt.json
  3. BIN
      docs/en/Community-Articles/2026-09-02-abp-studio-vs-aspire-ai-ides-and-crud-generators/ABP-Studio-vs-Alternatives-Cover.png
  4. BIN
      docs/en/Community-Articles/2026-09-02-abp-studio-vs-aspire-ai-ides-and-crud-generators/ABP-Studio-vs-Alternatives-Inline.png
  5. 163
      docs/en/Community-Articles/2026-09-02-abp-studio-vs-aspire-ai-ides-and-crud-generators/Post.md
  6. BIN
      docs/en/Community-Articles/2026-09-02-abp-vs-clean-architecture-templates-and-starter-kits/ABP-vs-Alternatives-Cover.png
  7. BIN
      docs/en/Community-Articles/2026-09-02-abp-vs-clean-architecture-templates-and-starter-kits/ABP-vs-Alternatives-Inline.png
  8. 223
      docs/en/Community-Articles/2026-09-02-abp-vs-clean-architecture-templates-and-starter-kits/Post.md
  9. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/Cover.png
  10. 177
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/Post.md
  11. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906201600152.png
  12. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906202807792.png
  13. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906203343446.png
  14. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906204302915-1788717035148-1.png
  15. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906210745253.png
  16. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906212109817.png
  17. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906212829582.png
  18. BIN
      docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906225734694.png
  19. 70
      docs/en/package-version-changes.md
  20. 44
      docs/en/release-info/migration-guides/abp-10-7.md
  21. 6
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/DataAnnotations/AbpValidationAttributeAdapterProvider_Tests.cs
  22. 28
      framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Child_Events_Tests.cs
  23. 75
      modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pt.json
  24. 2
      modules/virtual-file-explorer/app/DemoApp.csproj
  25. 2
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj
  26. 4
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj
  27. 4
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyCompanyName.MyProjectName.Blazor.WebAssembly.Client.csproj
  28. 4
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj
  29. 6
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj
  30. 2
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Shared/MyCompanyName.MyProjectName.Blazor.WebAssembly.Shared.csproj
  31. 2
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj
  32. 4
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj
  33. 2
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj
  34. 4
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj
  35. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj
  36. 4
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyCompanyName.MyProjectName.Blazor.Client.csproj
  37. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj
  38. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj
  39. 4
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Client.csproj
  40. 4
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client.csproj
  41. 4
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj
  42. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj
  43. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj
  44. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj
  45. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj
  46. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj
  47. 4
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj
  48. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj
  49. 4
      templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj
  50. 2
      templates/console/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj
  51. 2
      templates/maui/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj
  52. 4
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj
  53. 4
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyCompanyName.MyProjectName.Blazor.Host.Client.csproj
  54. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj
  55. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj
  56. 6
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj
  57. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj
  58. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj
  59. 2
      templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj
  60. 2
      templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj
  61. 2
      templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj
  62. 2
      templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj
  63. 2
      templates/wpf/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj

128
Directory.Packages.props

@ -58,71 +58,71 @@
<PackageVersion Include="Magick.NET-Q16-AnyCPU" Version="14.15.0" />
<PackageVersion Include="MailKit" Version="4.17.0" />
<PackageVersion Include="Markdig.Signed" Version="0.42.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="10.0.51" />
<PackageVersion Include="Microsoft.Maui.Controls" Version="10.0.51" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.36" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="10.0.9" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.9" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="10.0.11" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.11" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.5.0" />
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="10.0.9" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="10.0.11" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="7.0.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.9" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.9" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.9" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Proxies" Version="10.0.9" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.9" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.9" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.9" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Proxies" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11" />
<PackageVersion Include="Microsoft.SemanticKernel" Version="1.71.0" />
<PackageVersion Include="Microsoft.SemanticKernel.Abstractions" Version="1.71.0" />
<PackageVersion Include="Microsoft.Extensions.Caching.Hybrid" Version="10.7.0" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Configuration.CommandLine" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Composite" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Localization" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.9" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.CommandLine" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Composite" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Localization" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.11" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="9.0.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.19.1" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.19.1" />
<PackageVersion Include="Microsoft.IdentityModel.Tokens" Version="8.19.1" />
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.19.1" />
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.19.2" />
<PackageVersion Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="8.19.2" />
<PackageVersion Include="Microsoft.IdentityModel.Tokens" Version="8.19.2" />
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.19.2" />
<PackageVersion Include="Minio" Version="6.0.5" />
<PackageVersion Include="MongoDB.Driver" Version="3.11.1" />
<PackageVersion Include="NEST" Version="7.17.5" />
@ -134,11 +134,11 @@
<PackageVersion Include="NUglify" Version="1.21.17" />
<PackageVersion Include="Nullable" Version="1.3.1" />
<PackageVersion Include="Octokit" Version="14.0.0" />
<PackageVersion Include="OpenIddict.Abstractions" Version="7.5.0" />
<PackageVersion Include="OpenIddict.Core" Version="7.5.0" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="7.5.0" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="7.5.0" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="7.5.0" />
<PackageVersion Include="OpenIddict.Abstractions" Version="7.7.0" />
<PackageVersion Include="OpenIddict.Core" Version="7.7.0" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="7.7.0" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="7.7.0" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="7.7.0" />
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="10.23.26000" />
<PackageVersion Include="Polly" Version="8.6.3" />
<PackageVersion Include="Polly.Extensions.Http" Version="3.0.0" />
@ -171,17 +171,17 @@
<PackageVersion Include="Spectre.Console" Version="0.51.1" />
<PackageVersion Include="StackExchange.Redis" Version="2.9.17" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="10.2.3" />
<PackageVersion Include="System.Collections.Immutable" Version="10.0.9" />
<PackageVersion Include="System.Collections.Immutable" Version="10.0.11" />
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.6.7" />
<PackageVersion Include="System.Linq.Queryable" Version="4.3.0" />
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />
<PackageVersion Include="System.Security.Cryptography.Xml" Version="10.0.10" />
<PackageVersion Include="System.Security.Permissions" Version="10.0.9" />
<PackageVersion Include="System.Security.Permissions" Version="10.0.11" />
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
<PackageVersion Include="System.Text.Encoding.CodePages" Version="10.0.9" />
<PackageVersion Include="System.Text.Encodings.Web" Version="10.0.9" />
<PackageVersion Include="System.Text.Json" Version="10.0.9" />
<PackageVersion Include="System.Text.Encoding.CodePages" Version="10.0.11" />
<PackageVersion Include="System.Text.Encodings.Web" Version="10.0.11" />
<PackageVersion Include="System.Text.Json" Version="10.0.11" />
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.6.3" />
<PackageVersion Include="TencentCloudSDK.Sms" Version="3.0.1273" />
<PackageVersion Include="TimeZoneConverter" Version="7.2.0" />
@ -196,6 +196,6 @@
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
<PackageVersion Include="ConfigureAwait.Fody" Version="3.3.2" />
<PackageVersion Include="Fody" Version="6.9.3" />
<PackageVersion Include="System.Management" Version="10.0.9" />
<PackageVersion Include="System.Management" Version="10.0.11" />
</ItemGroup>
</Project>

22
abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/pt.json

@ -0,0 +1,22 @@
{
"culture": "pt",
"texts": {
"Account": "Conta ABP - Iniciar sessão e registar | ABP.IO",
"Welcome": "Bem-vindo",
"UseOneOfTheFollowingLinksToContinue": "Utilize uma das seguintes ligações para continuar",
"FrameworkHomePage": "Página inicial da framework",
"FrameworkDocumentation": "Documentação da framework",
"OfficialBlog": "Blogue oficial",
"CommercialHomePage": "Página inicial comercial",
"CommercialSupportWebSite": "Site de apoio comercial",
"CommunityWebSite": "Site da comunidade ABP",
"ManageAccount": "A minha conta | ABP.IO",
"ManageYourProfile": "Gerir o seu perfil",
"ReturnToApplication": "Voltar à aplicação",
"IdentityUserNotAvailable:Deleted": "Este endereço de email não está disponível. Motivo: já foi eliminado.",
"SelectYourOrganization": "Selecione a sua organização",
"PleaseSelectOrganization": "Selecione uma organização para continuar",
"Continue": "Continuar",
"CaptchaExplanation": "Calcule a expressão matemática abaixo e introduza a resposta."
}
}

BIN
docs/en/Community-Articles/2026-09-02-abp-studio-vs-aspire-ai-ides-and-crud-generators/ABP-Studio-vs-Alternatives-Cover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
docs/en/Community-Articles/2026-09-02-abp-studio-vs-aspire-ai-ides-and-crud-generators/ABP-Studio-vs-Alternatives-Inline.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

163
docs/en/Community-Articles/2026-09-02-abp-studio-vs-aspire-ai-ides-and-crud-generators/Post.md

@ -0,0 +1,163 @@
You already have an IDE. You might already have Aspire. You might already have Cursor. The remaining question is how those tools handle ABP solution structure, modules, run profiles, and generated application code.
Teams compare [ABP Studio](https://abp.io/studio) with three neighbors. This is not an “IDE replacement” debate.
1. .NET Aspire, for describing distributed resources as code and watching them on a dashboard.
2. Generic AI IDEs (Cursor, GitHub Copilot, Claude Code), for repo-wide chat and file edits.
3. CRUD scaffolders, such as `dotnet aspnet-codegenerator` and visual Blazor builders (for example Radzen).
Those tools are good. Keep Visual Studio, Rider, or VS Code. Studio can [open the solution in them](https://abp.io/docs/latest/studio/solution-explorer). This article is about what the ABP workflow brings together in one environment: templates, module graph, Solution Runner (Studio’s tool for starting, stopping, and inspecting applications), the ABP Agent, and [ABP Suite](https://abp.io/suite) (including React).
## TL;DR
Choose ABP Studio when the work is ABP: solution shape, module graph, Solution Runner, AI Agent, and Suite CRUD (including React on modern solutions).
Keep Visual Studio, Rider, or VS Code beside it for refactor, tests, and language services.
Add .NET Aspire when you want resource-as-code and the Aspire dashboard. Studio does not forbid it; microservice templates can wire Aspire in.
Use a generic AI IDE as an extra editor if the team already lives there. Prefer the ABP Agent when the change needs modules, migrations, proxies, or live run telemetry.
Tables in this article follow [official ABP documentation](https://abp.io/docs/latest).
## If the bottleneck is ABP, not the C# file
Studio may be a suitable choice when your team is (or will be) on the ABP Platform and you want one place to:
- Scaffold production templates (including React Modern and Classic MVC / Blazor / Angular).
- Run many services, containers, and UIs from a [Solution Runner](https://abp.io/docs/latest/studio/running-applications) profile (the set of applications and services started together).
- Ask, plan, and implement with AI against modules, packages, migrations, and live telemetry.
- Generate layered CRUD with ABP Suite for MVC, Blazor, Angular, and React.
If you only need a general editor, keep using your IDE. If you only need container orchestration and OpenTelemetry locally, Aspire may already be on the machine. Add Studio when the solution graph and ABP conventions are the bottleneck, not the C# file.
## What actually sits next to Studio
| Capability | ABP Studio + Agent | .NET Aspire | General AI IDEs (Cursor, Copilot, Claude Code, …) | Visual Studio / Rider / VS Code |
|---|---|---|---|---|
| Role | ABP solution lifecycle + AI coding in context | Cloud-native orchestration, service discovery, dashboard | Repo-wide AI edit / chat / agents | General-purpose IDE |
| ABP / DDD structure in context | Solution, modules, packages, run profiles in the [agent system context](https://abp.io/docs/latest/studio/ai-agent) | Unaware of ABP modules | Files and text; no ABP module graph | Solution explorer of projects, not ABP modules |
| ABP-shaped artifacts | Suite generates entity, app service, DTOs, repository, and UI; Agent follows those module conventions | No | Generic C# unless you prompt every ABP convention | Language services only |
| Production ABP templates | Layered, modular, microservice; Modern React or Classic UIs | Minimal host templates for Aspire | None | `dotnet new` / ABP CLI if you add it |
| Run + monitor | [Solution Runner](https://abp.io/docs/latest/studio/running-applications): start/stop apps and containers, HTTP requests, exceptions, logs, events, browse UI | Aspire dashboard: resources, logs, traces, metrics | Shell / terminal processes | Multi-project debug |
| AI that can build, migrate, generate proxies | Agent mode: files, shell, [Studio tools](https://abp.io/docs/latest/studio/ai-agent-built-in-capabilities) (`dotnet_build`, `start_applications`, `generate_csharp_proxies`, `get_exceptions`, …), MCP | Not an ABP coding agent | Shell-wrapped `dotnet` if you teach it | Copilot in the editor (generic) |
| Kubernetes | Studio Kubernetes integration for ABP solutions | Publish / deploy story for Aspire apps | No | No (unless you add tools) |
| Code edit / refactor | Agent writes code; Open with your IDE for deep refactor | Not an editor | Strong | Strongest language tooling |
| Use together? | Yes, open IDE from Studio; optional Aspire integration | Yes with ABP microservice template | Yes as an extra editor | Yes; Studio launches them |
How to read the table: these tools stack. Studio does not replace Rider's refactorings or Aspire's resource model. Its differentiated value is the ABP-aware workflow across solution structure, modules, run profiles, and agent tools.
Kubernetes. Studio’s Kubernetes integration is for developing against a cluster (browse and health using service names from the run profile). It is not Helm, GitOps, or your production deploy pipeline.
## The ABP Agent vs “just ask Cursor”
![Generic AI IDE and ABP Agent: repository context and ABP Studio context](ABP-Studio-vs-Alternatives-Inline.png)
Cursor and Copilot are excellent at finishing a LINQ query or explaining a regex. That is not the argument.
Ask a generic AI IDE: "Add a Product entity, make it multi-tenant, add the EF Core migration, generate the React UI." A generic AI IDE can work effectively when it has sufficient repository context and explicit project conventions. ABP Studio's differentiated value is that solution, module, run-profile, and telemetry context are available through first-class Studio capabilities. For cross-layer ABP changes, this can reduce the amount of context and manual coordination the developer must provide.
[ABP Studio AI Agent](https://abp.io/docs/latest/studio/ai-agent) is not limited to the currently open text buffer. The session can use the solution, modules, packages, runnable apps, run profile, AI scope, and enabled tools. [ABP Suite](https://abp.io/suite) remains the CRUD generator, while the Agent is designed to work with the module graph, add a migration, start the profile, and inspect live exceptions.
Modes:
- Ask, read-only answers. Can search ABP documentation.
- Plan, read-only implementation plans.
- Agent, read/write files, shell, add migrations, run Studio tools, MCP, update plan steps.
The ABP Agent fits changes where module, solution, and runtime context should remain available throughout the work.
That is the difference versus a generic AI IDE:
| What you ask | ABP Agent | Generic AI IDE |
|---|---|---|
| “Add an app service following ABP layering” | Receives solution, module, and ABP documentation context through Studio | Works from the repository context and instructions provided to it |
| “Why did this HTTP call fail?” | `get_requests` / `get_exceptions` / `get_logs` on the running profile | You paste a log or attach a debugger |
| “Generate C# / Angular proxies” | First-class Studio tools | A shell command if the model guesses it |
| “Start the apps, then continue” | `start_applications` / `start_containers` | Terminal + wait |
| Scope | AI scopes limit which modules the agent may touch; `.abpignore` blocks secrets | Works from the repository context and instructions provided to it |
You still review the diff. Agent mode is execution with a permission boundary, not unsupervised production deploys.
The [privacy boundary](https://abp.io/docs/latest/studio/ai-agent) is the session you give it: files, prompts, Studio tool output, attachments, and allowed URLs. Privacy depends on the selected model, configured provider, accessible scope, and enabled tools. [`.abpignore`](https://abp.io/docs/latest/studio/ai-agent-configuration) prevents excluded files from entering the agent context.
## Why Aspire does not replace Studio (they stack)
[Solution Runner](https://abp.io/docs/latest/studio/running-applications) is how you run an ABP modular or microservice tree: profiles per team, folders for apps/gateways/services, C# hosts, CLI tasks (for example Angular), Docker containers, start/stop/build, browse, health, and live HTTP / exception / log / event views.
.NET Aspire is how many .NET teams describe distributed resources as code and watch them on a dashboard (OpenTelemetry, containers, connection strings).
Their responsibilities overlap around local orchestration, but their primary scopes are different. Aspire focuses on distributed resource orchestration, while ABP Studio adds ABP solution templates, module workflows, Suite, and the ABP Agent.
You do not have to pick one. ABP microservice templates can enable Aspire so AppHost starts infrastructure and services; you can still use Studio’s runner and Agent. See [Aspire integration](https://abp.io/docs/latest/solution-templates/microservice/aspire-integration).
Pairing ABP Studio with Aspire works well when ABP solution workflows and distributed resource orchestration are both needed.
## Suite: a CRUD slice, not a pretty grid
[ABP Suite](https://abp.io/docs/latest/suite) generates a CRUD slice of an ABP application from an entity: domain type, repository, application service, migration, UI, tests, navigation properties, multi-tenant flag, localization keys.
| | ABP Suite | `dotnet aspnet-codegenerator` / EF scaffolding | Visual Blazor app builders (for example Radzen) |
|---|---|---|---|
| Output | Entity through application layer + UI + optional tests | Controllers, Razor Pages, Blazor CRUD, or Minimal API endpoints against a DbContext | Blazor UI + data wiring from a database or REST source |
| UI stacks | MVC, Blazor (Blazorise or MudBlazor, detected), Angular, and React (modern solutions) | MVC views, Razor Pages, and Blazor components. No Angular. No React. | Blazor only (Server, WebAssembly, Auto) |
| ABP permissions, tenancy, audit base classes | Options on the entity ([CRUD generation](https://abp.io/docs/latest/suite/generating-crud-page)) | Does not use ABP permission and tenancy conventions | Does not use ABP permission and tenancy conventions |
| Custom code on regenerate | Customizable code [hook points](https://abp.io/docs/latest/suite/customizing-the-generated-code) for MVC, Blazor, and Angular; React pages require extra care when regenerated | Often requires manually preserving custom changes | Varies by product |
| React UI | Yes, template-based CRUD for modern React apps, including search, paging, validation, permissions, localization, and navigation properties. Registers routes and menu | No React generator in the official scaffolding set (`blazor`, `razorpage`, `view`, `controller`, `identity`, `minimalapi`) | Blazor-focused rather than React-based |
Suite supports the official web UI stacks, including React. [ABP Agent](https://abp.io/docs/latest/studio/ai-agent) is an extra path when you want AI to evolve those pages, not a substitute for Suite React output.
Suite is a fit when generated CRUD should follow the application's ABP layers, conventions, and selected UI stack.
## When Studio is the right tool in the stack
Choose ABP Studio when the work is ABP: new solution shape, module graph, run profiles, Kubernetes-connected browse, Agent that can migrate and generate proxies, Suite for CRUD.
Keep your IDE open beside it for refactor, tests, and language services. Studio expects that.
Add Aspire when you want resource-as-code and the Aspire dashboard. Studio does not forbid it.
Use a generic AI IDE as an extra editor if your team already lives there. Prefer Agent for ABP-structured changes so the model is not guessing module boundaries from filenames.
Studio works best when ABP-specific solution workflows complement your existing IDE.
## FAQ
### We already run .NET Aspire (AppHost + dashboard). What does Studio still do that Aspire does not?
Aspire models resources (projects, containers, connection strings, OpenTelemetry) as code. Studio models an ABP solution: modules, package installation, production templates, Suite, Kubernetes browse for ABP services, and an agent that can migrate and generate proxies. Their responsibilities overlap around local orchestration, but their primary scopes are different. You can keep AppHost; microservice templates can integrate Aspire. You do not need to replace Aspire with Studio.
### If the team already uses Cursor or Copilot on the same repo, when is ABP Agent the better tool for a task?
When the task needs ABP structure or a live run, not only a file edit: module/package scope, `generate_csharp_proxies` / `generate_angular_proxies`, `start_applications`, or `get_exceptions` / `get_requests` / `get_logs` against the [Solution Runner](https://abp.io/docs/latest/studio/running-applications) profile. Generic IDEs can work in the same repository when given the relevant context and conventions. Agent provides first-class access to module, run-profile, and Studio tool context for changes that coordinate ABP modules and running services.
### After Suite generates React CRUD, how should we customize the page?
For MVC, Blazor, and Angular, use Suite’s [customizable code](https://abp.io/docs/latest/suite/customizing-the-generated-code) hook points. React pages require extra care when regenerated, so keep additional React UI in files Suite does not generate or evolve it with [ABP Agent](https://abp.io/docs/latest/studio/ai-agent). Suite React generation itself is template-based, not AI.
### Can Agent start the microservice profile, then use real HTTP/exception data in the same session?
Yes, in Agent mode with a run profile: tools include `start_applications` / `start_containers` and then `get_requests`, `get_exceptions`, `get_logs`, `get_events` ([built-in capabilities](https://abp.io/docs/latest/studio/ai-agent-built-in-capabilities)). Ask/Plan cannot mutate or start apps. If nothing is running, those telemetry tools have nothing to read. That is why “AI that sees production-like local traffic” is a Studio and Runner loop, not a chat sidebar.
### Does Studio Kubernetes integration replace Helm, GitOps, or our cluster deploy pipeline?
No. It is for developing against a cluster (browse/health using Kubernetes service names from the run profile, manage connected services). Aspire’s publish story and your CI remain how you ship. Do not treat the Studio K8s panel as the production deployment product.
### Can one developer live in Rider and another in VS Code while sharing the same Studio solution?
Yes. Studio holds solution/run-profile metadata; [Open with](https://abp.io/docs/latest/studio/solution-explorer) launches whatever IDE is installed. Run profiles and Agent sessions are not tied to a single editor vendor. The constraint is ABP Studio itself on the machine, not a mandate to abandon Rider or VS.
## Next step
[Download ABP Studio](https://abp.io/studio) · [AI Agent docs](https://abp.io/docs/latest/studio/ai-agent) · [Generate a CRUD page](https://abp.io/docs/latest/suite/generating-crud-page) · [ABP Framework](https://abp.io/framework)
### Sources
- [ABP Studio overview](https://abp.io/docs/latest/studio)
- [AI Agent](https://abp.io/docs/latest/studio/ai-agent)
- [AI Agent built-in capabilities](https://abp.io/docs/latest/studio/ai-agent-built-in-capabilities)
- [Solution Runner](https://abp.io/docs/latest/studio/running-applications)
- [Solution Explorer / Open with IDE](https://abp.io/docs/latest/studio/solution-explorer)
- [ABP Suite](https://abp.io/docs/latest/suite)
- [Generating a CRUD page](https://abp.io/docs/latest/suite/generating-crud-page)
- [Customizing the generated code](https://abp.io/docs/latest/suite/customizing-the-generated-code)
- [ASP.NET Core `aspnet-codegenerator`](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/tools/dotnet-aspnet-codegenerator)
- [.NET Aspire overview](https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview)
- [Radzen Blazor Studio](https://www.radzen.com/blazor-studio/)
- [Microservice Aspire integration](https://abp.io/docs/latest/solution-templates/microservice/aspire-integration)
Product names in this article belong to their owners. Mention is for identification in a technical comparison, not affiliation or endorsement.

BIN
docs/en/Community-Articles/2026-09-02-abp-vs-clean-architecture-templates-and-starter-kits/ABP-vs-Alternatives-Cover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
docs/en/Community-Articles/2026-09-02-abp-vs-clean-architecture-templates-and-starter-kits/ABP-vs-Alternatives-Inline.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

223
docs/en/Community-Articles/2026-09-02-abp-vs-clean-architecture-templates-and-starter-kits/Post.md

@ -0,0 +1,223 @@
Every serious .NET team hits the same whiteboard sooner or later. Do we build the multi-tenant SaaS from scratch? Grab a starter kit? Adopt a platform?
Search “ABP vs …” and you will land on pages written by kits and tenancy libraries. Fair. Those pages exist because the question is real. They are not comparing two products of the same kind.
You are choosing among four shapes:
1. Build it yourself on ASP.NET Core, often with a tenancy library such as Finbuckle.MultiTenant.
2. A Clean Architecture template (Jason Taylor, Ardalis) that gives you folders, layers, and a sample feature.
3. A starter kit that copies a snapshot of production modules into your repo (fullstackhero, Brick, and similar kits).
4. A maintained application platform. Architecture, infrastructure, modules, and tools that keep moving.
ABP competes across several decision categories rather than against one uniform product set. Some teams compare it with Clean Architecture and DDD references or starter kits because they prefer to own and assemble the application foundation themselves. Others evaluate .NET application and service frameworks such as ServiceStack, model-driven RAD platforms such as DevExpress XAF, or cross-stack SaaS platforms and starter kits. Existing ASP.NET Boilerplate applications are usually a migration and adoption consideration rather than a same-generation alternative. The table below focuses on the architecture and application-foundation decision; these other categories can still enter the same broader technology discussion.
[ABP](https://abp.io) takes the application-platform approach. The rest of this article is about the things teams evaluate later: multi-tenancy, identity, permissions, modularity, UI (including React), and a path from modular monolith (one deployable application organized into independent modules) to microservices.
## TL;DR
Choose ABP when you are shipping a long-lived, multi-tenant, modular .NET product and want a maintained platform: tenancy, identity, modules, official UIs (including React), and Studio / Suite on the same stack.
Choose a Clean Architecture template (Jason Taylor, Ardalis) when the goal is to own every architectural decision from a well-named skeleton.
Choose a starter kit (fullstackhero, Brick, and similar) when you prefer a copy of modules in your repo on day one and you are willing to maintain that snapshot.
Choose Finbuckle (or custom tenant middleware) when tenant resolution is the only additional capability you need on an app you already own. ABP also connects tenancy with application concerns such as identity, permissions, and audit.
Tables in this article follow [official ABP documentation](https://abp.io/docs/latest).
## This is for the long haul
ABP is the recommended choice when you are building a long-lived, multi-tenant, modular .NET product. B2B SaaS. Line of business. A platform several teams will still be extending in a few years.
You want:
- Cross-cutting concerns (auth, tenancy, audit, jobs, localization) already solved and documented.
- Official UI options that match your team: React, Angular, Blazor, MVC, MAUI, or React Native.
- A way to add pre-built modules and, later, split a module into a service without rewriting the application code.
- Tooling (Studio, Suite, CLI) and, if you need it, commercial modules and support, without leaving the same platform.
Yes, ABP is opinionated. The initial learning cost is real: teams need to understand modules, application services, and unit of work conventions before those conventions become productive. Then, when a module needs to become a microservice, the contracts are already there. The conventions become team-wide standards so the next project does not invent a second way to do the same thing.
## Four shapes. One table.
![DIY ASP.NET Core, Clean Architecture, starter kit, and ABP Platform as four different shapes](ABP-vs-Alternatives-Inline.png)
| Capability | ABP Platform | DIY ASP.NET Core | Clean Architecture templates (Jason Taylor, Ardalis) | Starter kits (fullstackhero, Brick, and similar) |
|---|---|---|---|---|
| What you get | Maintained framework + modules + templates + tooling | Empty host and libraries you assemble | Layered/CQRS skeleton + a sample feature | A copy of modules in your repo on day one |
| Multi-tenancy | Native: [single database, database-per-tenant, or hybrid](https://abp.io/docs/latest/framework/architecture/multi-tenancy); identity and authentication/token infrastructure wired for tenants | You design isolation, filters, and cache keys, or add a library such as Finbuckle.MultiTenant | Not included | Often via a tenancy library you still own end-to-end |
| Identity, permissions, audit | Application modules + automatic tenant-data filtering, [audit logging](https://abp.io/docs/latest/framework/infrastructure/audit-logging), permission system | You compose Identity, policies, and audit yourself | Identity sample at most | Bundled in the kit; you maintain the fork |
| Modularity | First-class [module system](https://abp.io/docs/latest/framework/architecture/modularity/basics); install/uninstall packages | You invent module boundaries | Folders and layers, not a product module catalog | Modular folders; upgrades are merge/cherry-pick |
| UI | [React (Modern)](https://abp.io/docs/latest/framework/ui/react), MVC, Blazor, Angular, [React Native](https://abp.io/docs/latest/framework/ui/react-native), [MAUI](https://abp.io/docs/latest/framework/ui/maui) | You pick and integrate | Template-specific (often Angular/React/API) | Kit-specific (often one SPA) |
| Monolith → microservices | Same application contracts; HTTP/C# proxies replace in-process calls | You design the split | You design the split | Extract-a-module if the kit allows it |
| Tooling | [ABP Studio](https://abp.io/studio) (including AI Agent), [ABP Suite](https://abp.io/suite), CLI | `dotnet` CLI and your IDE | Template CLI + IDE | Kit CLI / Aspire host, varies |
| How it evolves | NuGet upgrades for the framework and modules, plus documented migrations | You upgrade every library | You copy the next template over your tree | You merge upstream into source you already customized |
| Support | Open-source core plus commercial extras and vendor support | Your team | Community | Community |
ABP may be a suitable fit when the application needs architecture, infrastructure modules, and development tooling to remain integrated and maintainable as the product grows.
How to read the table: templates teach structure. Starter kits give you a snapshot you own. ABP combines application architecture, infrastructure modules, and development tooling in one platform. Names in the headers are examples of the category, not a review of every repository.
Identity, permissions, and audit. ABP ships these as application modules: permission UI, automatic filtering of tenant data, and audit logging. On plain ASP.NET Core you compose Identity, policies, and audit yourself. A Clean Architecture template usually stops at an Identity sample. A starter kit may bundle them; you then maintain that copy.
How the stack evolves. When a customized starter kit is updated, identity and tenancy code may already contain local changes. Reconciling those changes across the files you now own can add significant maintenance work. That is a different upgrade model from updating framework packages.
ABP uses framework and module packages, together with documented migrations. A Clean Architecture template’s next version is something you copy forward. A kit’s next version is reconciled with the snapshot you already changed.
## Let’s be honest: what are you actually downloading?
### What you build yourself
ASP.NET Core is phenomenal. It is a foundation, not a complete application platform. Building from scratch gives teams maximum control, but also leaves tenant resolution, permission checks, audit logs, job plumbing, and module boundaries to the team.
That work is legitimate if the architecture is unique. For a standard business product, it is infrastructure before the first domain feature.
ABP sits on ASP.NET Core. You keep the Microsoft stack. ABP provides established conventions and modules for teams that prefer those decisions to be part of the platform. See [Why ABP Platform](https://abp.io/docs/latest/others/why-abp-platform).
ABP suits teams that want application infrastructure to remain integrated with the product as it grows.
### Clean Architecture templates
This category includes the templates most often compared with ABP: Jason Taylor’s Clean Architecture template and Ardalis’s Clean Architecture template. They provide a good classroom and a clean slate. Their focus is architectural structure and ownership rather than a built-in application module catalog or ABP-specific tooling.
Choose a Clean Architecture template when architectural ownership and a focused starting point matter most.
ABP is a fit when architectural conventions and application modules need to evolve together.
### Starter kits
A starter kit copies identity, tenancy, auditing, and a few domain modules into your repository. You own every line. That is a real preference for some teams.
Starter kits are another common option in this decision. fullstackhero is a copy-and-own MIT kit (identity, tenancy, React admin, modules in your repo). Other starter kits, such as Brick, can also provide a prebuilt starting point; the exact features, ownership model, and update process depend on the kit. They can provide a fast starting point, but long-term maintenance depends on how each kit handles updates to customized code.
With ABP, framework and module updates are distributed through packages and documented migrations. With a kit, teams have direct ownership of the source, while updates may require reconciling local changes with upstream code. These are different maintenance models.
Choose a starter kit when an existing set of application features and direct source ownership can accelerate your team.
Choose ABP when you want those application concerns, modules, and tooling to evolve as part of a maintained platform. ABP’s open-source core is yours to use; your business code lives in your repo. There is no separate proprietary runtime for that core. Commercial extras (themes, Pro modules, Suite, support) are optional layers on the same platform, not a rewrite.
Package-based framework and module updates may suit teams that prefer them to reconciling changes in an owned source snapshot.
## If you last looked a year ago: React is official
This is easy to miss if you last looked at ABP a year ago.
Official UI options ([ABP UI](https://abp.io/docs/latest/framework/ui)):
- React, in the [Modern template system](https://abp.io/docs/latest/solution-templates/modern-vs-classic) (ABP Studio or `abp new --modern`).
- MVC / Razor Pages, Blazor (WebAssembly, Server, WebApp), and Angular, on Classic templates.
- React Native and MAUI for mobile / hybrid.
[Modern vs Classic](https://abp.io/docs/latest/solution-templates/modern-vs-classic): Classic is not a deprecated track. It is the actively supported family with the broadest UI matrix (MVC, Angular, Blazor, MAUI) and the template-first Studio flow. Modern is the newer architecture-first Studio flow, React (or no UI), and the Admin Console / Low-Code path (metadata-driven screens configured through a designer). Choose Classic when the team’s UI is MVC, Angular, or Blazor. Choose Modern when the web UI is React.
One backend, the UI your team already knows.
## Multi-tenancy without a side project
ABP treats tenancy as infrastructure, not a feature you bolt on:
- Current tenant is resolved per request.
- Entities implementing `IMultiTenant` (ABP’s contract for separating tenant-owned data) are automatically filtered; new records get a `TenantId` identifying the tenant.
- You can use one database for all tenants, one database per tenant, or a hybrid.
That isolation also applies to cache and related concerns so business code stays mostly tenancy-agnostic. Details: [Multi-Tenancy](https://abp.io/docs/latest/framework/architecture/multi-tenancy).
A tenancy library on raw ASP.NET Core, including Finbuckle.MultiTenant, can resolve the tenant. It does not automatically give you permission UI, audit, jobs, Identity/OpenIddict authentication and token wiring for tenants, and module installs on the same model. That is the platform difference. Pages titled “Finbuckle vs ABP vs custom” are answering a library question. This article is answering the application-platform question.
ABP is worth considering when tenancy needs to stay connected to identity, permissions, data filtering, and the rest of the application model.
## Modularity that can become microservices
ABP modules are real packages (domain, application, HTTP API, UI) with documented dependency rules. You can start with a [modular monolith](https://abp.io/architecture/modular-monolith) and later replace in-process calls with HTTP using the same application service contracts and [client proxies](https://abp.io/docs/latest/framework/api-development/dynamic-csharp-clients) (typed clients that call application services over HTTP).
That path is the point. You do not throw away the monolith to “do microservices”; you change the hosting of a module that already had a boundary.
This approach fits teams that want modular boundaries to support both a modular monolith and a later service split.
## ABP Low-Code: admin screens inside the same app
[ABP Low-Code](https://abp.io/docs/latest/low-code) is a module in your ABP application (Team license or higher). You model entities, pages, forms, permissions, and scripts in the Admin Console. The runtime uses that metadata in the same app, with the same identity, audit, and EF Core model. There is no separate low-code database.
Designer, [Studio AI Agent](https://abp.io/docs/latest/studio/ai-agent), and hand-written C# / Script API land on one model.
The documented runtime UI is React. You can still keep MVC, Razor Pages, Angular, or Blazor as the main UI and host the React Low-Code runtime beside it ([non-React integration](https://abp.io/docs/latest/low-code/non-react-ui-integration)).
Docs still label the system Preview (APIs and designer may change before GA). That is a maturity label, not a missing product.
| | ABP Low-Code | External low-code platform | Hand-written CRUD every time |
|---|---|---|---|
| Where it runs | Inside your ABP app | Separate product / runtime | Your repo |
| Data and identity | Same database and ABP authorization | Often a parallel model | Whatever you build |
| Extend with code | C#, Script API, Agent | Platform limits | Always code |
| Screens | Grid, form, calendar, kanban, gallery, dashboard, import/export | Vendor widgets | Custom pages |
| How you enable it | Studio modern wizard (layered, single-layer, modular monolith + EF Core) or [add to an existing EF Core solution](https://abp.io/docs/latest/low-code/add-to-existing-solution) | Vendor onboarding | Always code |
Studio’s *new-solution wizard step* is omitted for microservice architecture and when MongoDB is selected, because runtime-managed tables use EF Core. Layered and modular-monolith EF Core solutions are the documented enablement path today.
Use Low-Code for the admin CRUD and metadata-driven screens. Keep distinctive product UX in normal ABP UI, including Suite-generated React CRUD on modern solutions.
## When this is the right call
Pick ABP when:
- The product will have tenants, roles, audit, and more than one team.
- You want React *or* Blazor *or* Angular *or* MVC on a shared backend.
- You expect to grow from modular monolith to services without a rewrite.
- You want Studio, Suite, and (optionally) Low-Code on the same stack.
A Clean Architecture template is a solid choice when architectural ownership and a focused starting point matter most.
A starter kit is a solid choice when an existing set of application features and direct source ownership can accelerate your team. ABP is a better fit when those application concerns, modules, and tooling should evolve as part of a maintained platform.
ASP.NET Boilerplate is the predecessor, not a same-generation starter kit. If that is the comparison, it is a migration to the current ABP platform, not a fork-and-own kit decision.
DevExpress XAF and similar commercial frameworks follow a model-driven RAD approach built around a vendor UI ecosystem. That approach can reduce application boilerplate and accelerate internal business applications, while also placing the application’s model and much of its UI experience within DevExpress conventions and controls. ABP is an application platform on ASP.NET Core, with an open-source core, modular architecture, and multiple UI options. It gives teams more direct control over the application layers and frontend choices, including MVC, Blazor, Angular, and React, while supporting a modular-monolith-to-microservices path. XAF may be the better fit when the priority is delivering a model-driven business application quickly within the DevExpress ecosystem. ABP may be the better fit when the product needs ASP.NET Core, a more customized frontend experience, multiple client options, or a modular architecture that can evolve toward services.
## FAQ
### Is ABP free or commercial?
ABP Framework has an open-source core. Some themes, modules, generators, Studio capabilities, support, and other commercial offerings require an appropriate commercial license. Exact availability depends on the product and license level.
### If we stop paying for commercial extras, or we leave ABP later, is the app a black box?
No. The application is still ASP.NET Core, your C#, and EF Core (or MongoDB). The [open-source framework](https://abp.io/docs/latest/others/why-abp-platform) stays in the solution as packages you already reference. Leaving ABP means replacing those packages the way you would replace any framework, not extracting code from a closed runtime. Suite output is source in your repo. Commercial modules, themes, and Suite itself are optional layers; dropping them does not delete your domain.
### If we already have a Clean Architecture or starter-kit repo (Jason Taylor, Ardalis, fullstackhero, Brick), can we “just add ABP” like a NuGet?
No. ABP’s module pipeline, interceptors, automatic tenant-data filters (which limit queries to the current tenant), and startup conventions assume it is the host. Teams adopt ABP on a new solution (or plan a migration), they do not drop `Volo.Abp.*` onto an existing CA template and keep the old composition root unchanged. That is the real cost versus a tenancy library you add to code you already own. See [Why ABP Platform](https://abp.io/docs/latest/others/why-abp-platform).
### We already use Finbuckle (or custom tenant middleware). What does ABP tenancy still do that that library does not?
A tenancy library resolves *who the tenant is*. ABP also isolates queries and inserts (`IMultiTenant` data filters), wires Identity and OpenIddict for tenants, and applies the same tenant context to cache and related infrastructure. That covers [single database, database-per-tenant, or hybrid](https://abp.io/docs/latest/framework/architecture/multi-tenancy). Permissions, audit, and jobs then run inside that model instead of each being a separate integration project.
### If we start Modern/React, can the same backend later serve a second UI (public MVC, partner Blazor, mobile)?
Yes. Application services and HTTP APIs are UI-agnostic. [Official UIs](https://abp.io/docs/latest/framework/ui) (React, Angular, Blazor, MVC, React Native, MAUI) are hosts on that backend. You choose Modern vs Classic at solution creation for the primary web app; extra clients consume the same APIs. You do not rewrite domain or application layers to add a second frontend.
### When we split a module into a microservice, do we rewrite application services as controllers?
Not as the default path. Module contracts stay; in-process calls become HTTP (or messaging) via [client proxies](https://abp.io/docs/latest/framework/api-development/dynamic-csharp-clients) against the same application-service interfaces. You change hosting, not the feature’s application API. That is the comparison point versus a starter kit whose “modules” are folders with no proxy story.
### For the same admin entity, should we use Suite-generated React CRUD or Low-Code pages?
[Suite](https://abp.io/docs/latest/suite) writes source into your layers (entity, app service, UI, tests) that you commit and customize, including React on modern solutions. [Low-Code](https://abp.io/docs/latest/low-code) keeps the entity in metadata (designer + runtime APIs/pages) without generating those classes for the standard flow. Use Suite when the screen will grow into product code; use Low-Code when the screen should stay designer-driven. They are not substitutes for each other.
### Can we keep MediatR / vertical-slice handlers for new features inside an ABP solution?
You can reference extra libraries, but ABP’s default application surface is [application services](https://abp.io/docs/latest/framework/architecture/domain-driven-design/application-services) with unit of work, validation, and authorization conventions. Comparison with CA templates is not “MediatR vs nothing”; it is whether the team standardizes on ABP’s application layer or on a handler-per-feature folder as the public API. Mixing both without a rule usually duplicates the same use case in two styles.
## Next step
Create a solution in [ABP Studio](https://abp.io/studio) and pick Modern (React) or Classic (MVC / Blazor / Angular). Then add only the modules you need.
[Create a free ABP solution](https://abp.io/studio) · [Read the framework overview](https://abp.io/framework) · [Why ABP Platform](https://abp.io/docs/latest/others/why-abp-platform)
### Sources
- [ABP UI options](https://abp.io/docs/latest/framework/ui)
- [Modern vs Classic templates](https://abp.io/docs/latest/solution-templates/modern-vs-classic)
- [React UI](https://abp.io/docs/latest/framework/ui/react)
- [Multi-tenancy](https://abp.io/docs/latest/framework/architecture/multi-tenancy)
- [Why ABP Platform](https://abp.io/docs/latest/others/why-abp-platform)
- [Low-Code System](https://abp.io/docs/latest/low-code)
- [Jason Taylor Clean Architecture template](https://github.com/jasontaylordev/CleanArchitecture)
- [Ardalis Clean Architecture template](https://github.com/ardalis/CleanArchitecture)
- [fullstackhero starter kit](https://github.com/fullstackhero/dotnet-starter-kit)
- [Finbuckle.MultiTenant documentation](https://www.finbuckle.com/MultiTenant/Docs)
- [ServiceStack documentation](https://docs.servicestack.net/why-servicestack)
- [DevExpress XAF overview](https://www.devexpress.com/products/net/application_framework/)
Product names in this article belong to their owners. Mention is for identification in a technical comparison, not affiliation or endorsement.

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/Cover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 KiB

177
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/Post.md

@ -0,0 +1,177 @@
# How to Present Your .NET Project To Your Mother?
**I'm writing this article while camping in the middle of the forest 🌲⛺.** I came here to get away from computers for a while... but apparently, I'm still thinking about software and how we explain it to people. You can see me in the cover image 😄
![image-20260906225734694](image-20260906225734694.png)
Hey there! I'm Alper, giving international conference talks and mostly I don't know the audience demography (knowledge level/position/tech stack etc...). And I need to be very careful how I present my talk. Recently I've been studying on this topic. My audience is mostly developers or IT guys. And when I explain a technical topic to those people, I'm very comfortable 🤠🤠 But, sometimes we need to explain what we do (our project) to our friends, mother or child. In other words; anyone who is not technical. Then things are getting a little bit different and harder 🤯
To have a strong technical knowledge does not automatically make someone a good communicator.
For scientists, engineers, developers and technical leaders, the real challenge is not knowing the subject 👉 **deciding what the audience needs to know and how to make it meaningful for them.**
Empathy is very important in all our life steps. I wrote an article about [empathy in workspace](https://abp.io/community/articles/empathy-in-the-workplace-for-software-companies-wsjjw9we), please read it when you have time because it's also important for this topic. Imagine you are explaining your .NET project to an investor or customer, concepts which you use in your project might be simple for you, but feel that empathy (please) for a moment, **does that guy understand what you mean**? Before starting your presentation collect information about him so that you can adjust your sentences according to him.
> AND TELL HIM ONLY WHAT WORKS FOR HIM.
No need to tell how the algorithm behind this project works! Tell him why it's good for him. From now on, when I tell "him/his" I mean the customer / investor / friend / father / son / non-IT guy.
---
## Don't Focus Too Much on the Details
We are all good software engineers and we want to show the art behind that work 👏 That's absolutely natural feeling 👍
We all want to show people the details how our project work because we are proud of it and that's a bad practise!!
Too much detail will definitely hide your main message!!! You are consuming his energy, focus and time with all those details.
So what happens, your main goal is not being transferred to him 🤔..💭...🥺
![image-20260906212829582](image-20260906212829582.png)
Ok we know the problem, now how will you fix this? SIIMMPLEE: Before mentioning a topic, ask yourself:
> Does he need this info to understand my idea or make his decision?
If not, please save it for yourself and don't mention about that.
Maybe later, if he's very much interested in you can explain him (IF ONLY he asks 😄)
---
## Don't Make It Too Simple Also *-- are you kidding me!*
Well! Don't be angry 😡 at me. In the previous section I said *don't go in details* and now I'm telling **do not explain too simple** 🙃
While we are trying to not make it too complicated or detailed, we shouldn't make it inaccurate or treating the listener as idiot🐑
Keep the science and technical meaning balanced. Let's reduce unnecessary software jargons. Use clear language, examples and familiar concepts when you explain something complex.
**My technique is using analogies**, especially for my projects I often give a car example which is as simple as everybody can easily understand (*even my kid understands it*).
> MAKE IT SIMPLE, but NOT OVER-SIMPLE!
---
## Start With Why It Matters
In Turkey, there are some street sellers... They stop you and say "Can I tell you something?". Actually I know he's a seller and probably he'll redirect me to a barber, cosmetic store or some shops which are upper floors in a passage. And I mostly say "NO!" and I'm walking my way... But imagine if he tells me first which benefit I'll get from what he sells, maybe I'll go to his shop. (*this paragraph is also explaining my topic in a simple way which I explained in the previous section so I'm still using these techniques in this article* 🤫)
![image-20260906212109817](image-20260906212109817.png)
One of the most common mistakes in technical presentations is starting with the technology itself.
> Our project runs the Dijkstra algorithm with the multi-tenant and DDD architecture 🧑‍🔬
The above sentence doesn't mean anything to him. Tell it like this:
> Our project finds the shortest path efficiently, you can have many isolated customers with clean design and long years maintainable way.”
When people understand why your project matters, they'll have a reason to listen the next sections.
So far, so good 💯 You did a good job reading until here 🙏 ᵗʰᵃᶰᵏᵧₒᵤ ... Keep reading please ...👀...👇
---
## Think About What You Want Him to Remember
Your audience will not remember many technical points after your presentation.
**They will remember 1-2 topics.**
Decide what those points are 🎯 then build the presentation around them.
Everything else must support those core messages.
---
## Your Voice Tone Matters Too!
Imagine you did everything 👏 very good until here... but you are talking very monotonous way. Or you are talking quickly. Sorry, that's also not a good talk! **Your emphasis, eye contact, body language, tone of voice are all important.** You can make small jokes to give him a relaxing break to understand your complex technical work.
> COMMUNICATION IS NOT ONLY ABOUT WHAT YOU SAY but also HOW YOU SAY IT 🗣
Watch the📹 [ShadeZahrai -very short- tiktok video](https://www.tiktok.com/@shadezahrai/video/7177549216464571650)
![image-20260906210745253](image-20260906210745253.png)
---
## Use Images to Make Your Subject Clear
Especially when you are presenting on slides, you should show some funny images related to your topic or you can show analogic images that explains the problem.
For example to tell about a risky case which you covered in your project, you can use the below image :)
Yes, people will laugh at first but later they'll listen to you more carefully because you took their attention. (*I created another paradox here, I’m explaining this topic using a funny related image and I know you’re now reading my article more carefully*🤝)
![image-20260906201600152](image-20260906201600152.png)
---
## How to Handle Questions? 😡 Especially Which You Don't Like
![image-20260906202807792](image-20260906202807792.png)
In technical presentations, people can ask aggressive or stupid questions or you may not like their questions 😡
Don't immediately try to defend yourself by giving more and more technical details. Or don't try to show them it's a silly question.
If you don't know, tell it honestly. If that feature doesn't exist, tell that you took note and you'll evaluate it later.
Even if it’s a stupid question, don’t shut him down. **Later, he will remember only that moment and all your efforts you’ve made will be lost.**
---
## Your Goal Is To Be Understandable 🫱🏽‍🫲🏻 Not Showing Everything You Know
Anddd again, we come back to empathy!
> The best technical explainer is not the person who gives the most information.
![image-20260906204302915](image-20260906204302915-1788717035148-1.png)
Okay, you know a lot and you want to show that. But try to be empathetic again. Giving someone all the technical details doesn't mean they will understand your point. **Good communication means sharing what matters in a way people can easily understand.**
> Don't tell people everything you know. Tell them what they need to know and please make sure they understand it.
---
## Explaining Something and Convincing Someone Are Not the Same 🙄
Providing accurate & correct information and persuading someone to take action are different.
But in business life, **technical presentations often need to do both**.
You need to explain how something works and also helping management approve a project.
YOU CAN USE THIS PATH WHEN PRESENTING YOUR PROJECT:
![image-20260906203343446](image-20260906203343446.png)
---
I appreciate you taking the time to read this article 🙏.
I like to share what I learn which is the main reason I wrote this article.
By applying these techniques, we can become better presenters and communicate our ideas more effectively 👌.
When we combine our technical strengths with strong soft skills, I believe we can make a greater impact, inspire others and grow together 🙌💪.
---
Alper Ebicoglu
Software architect since the early 2000s.
Learning, inspiring, sharing, talking...
|||
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| <a href="https://www.linkedin.com/in/ebicoglu/"><img src="https://img.icons8.com/color/32/linkedin.png"/></a> | [linkedin.com/in/ebicoglu](https://www.linkedin.com/in/ebicoglu/) |
| <a href="https://x.com/alperebicoglu"><img src="https://img.icons8.com/color/32/twitterx.png"/></a> | [x.com/alperebicoglu](https://x.com/alperebicoglu) |
| <a href="https://alperonline.medium.com"><img src="https://img.icons8.com/color/32/medium.png"/></a> | [alperonline.medium.com](https://alperonline.medium.com) |
| <a href="https://github.com/ebicoglu"><img src="https://img.icons8.com/color/32/github.png"/></a> | [github.com/ebicoglu](https://github.com/ebicoglu) |

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906201600152.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906202807792.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906203343446.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906204302915-1788717035148-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906210745253.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906212109817.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906212829582.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

BIN
docs/en/Community-Articles/2026-09-06-How-to-Present-Your-Project-To-Your-Mother/image-20260906225734694.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

70
docs/en/package-version-changes.md

@ -13,13 +13,71 @@
|---------|-------------|-------------|-----|
| AWSSDK.S3 | 4.0.7.2 | 4.0.102.3 | #26040 |
| AWSSDK.SecurityToken | 4.0.2.2 | 4.0.100.10 | #26040 |
| Microsoft.AspNetCore.Authentication.JwtBearer | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Authentication.OpenIdConnect | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Authorization | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Components | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Components.Authorization | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Components.Web | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Components.WebAssembly | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Components.WebAssembly.Authentication | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Components.WebAssembly.DevServer | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Components.WebAssembly.Server | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.DataProtection | 10.0.9 | 10.0.11 | #26113, #26135 |
| Microsoft.AspNetCore.DataProtection.StackExchangeRedis | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Mvc.NewtonsoftJson | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.Mvc.Testing | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.TestHost | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.AspNetCore.WebUtilities | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Bcl.AsyncInterfaces | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Data.Sqlite | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.EntityFrameworkCore | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.EntityFrameworkCore.Design | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.EntityFrameworkCore.InMemory | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.EntityFrameworkCore.Proxies | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.EntityFrameworkCore.Relational | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.EntityFrameworkCore.SqlServer | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.EntityFrameworkCore.Sqlite | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.EntityFrameworkCore.Tools | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Caching.Memory | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Caching.StackExchangeRedis | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Configuration.Binder | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Configuration.CommandLine | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Configuration.EnvironmentVariables | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Configuration.UserSecrets | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.DependencyInjection | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.DependencyInjection.Abstractions | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.FileProviders.Composite | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.FileProviders.Embedded | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.FileProviders.Physical | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.FileSystemGlobbing | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Hosting | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Hosting.Abstractions | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Http | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Identity.Core | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Localization | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Logging | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Logging.Abstractions | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Logging.Console | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Options | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.Extensions.Options.ConfigurationExtensions | 10.0.9 | 10.0.11 | #26135 |
| Microsoft.IdentityModel.JsonWebTokens | 8.19.1 | 8.19.2 | #26135 |
| Microsoft.IdentityModel.Protocols.OpenIdConnect | 8.19.1 | 8.19.2 | #26135 |
| Microsoft.IdentityModel.Tokens | 8.19.1 | 8.19.2 | #26135 |
| MongoDB.Driver | 3.10.0 | 3.11.1 | #26103 |
**Added:**
| Package | Version | PR |
|---------|---------|-----|
| Microsoft.AspNetCore.DataProtection | 10.0.9 | #26113 |
| OpenIddict.Abstractions | 7.5.0 | 7.7.0 | #26135 |
| OpenIddict.Core | 7.5.0 | 7.7.0 | #26135 |
| OpenIddict.Server.AspNetCore | 7.5.0 | 7.7.0 | #26135 |
| OpenIddict.Validation.AspNetCore | 7.5.0 | 7.7.0 | #26135 |
| OpenIddict.Validation.ServerIntegration | 7.5.0 | 7.7.0 | #26135 |
| System.Collections.Immutable | 10.0.9 | 10.0.11 | #26135 |
| System.IdentityModel.Tokens.Jwt | 8.19.1 | 8.19.2 | #26135 |
| System.Management | 10.0.9 | 10.0.11 | #26135 |
| System.Security.Permissions | 10.0.9 | 10.0.11 | #26135 |
| System.Text.Encoding.CodePages | 10.0.9 | 10.0.11 | #26135 |
| System.Text.Encodings.Web | 10.0.9 | 10.0.11 | #26135 |
| System.Text.Json | 10.0.9 | 10.0.11 | #26135 |
## 10.7.0-rc.2

44
docs/en/release-info/migration-guides/abp-10-7.md

@ -185,21 +185,59 @@ Both have to be `PreConfigure`, not `Configure`. The flag turns off the registra
> See the [Identity Token Providers](../../modules/identity/token-providers.md) document for details.
### OpenIddict Client Assertion Audience Validation
**Who is affected**
- Applications that authenticate OpenIddict clients with client assertions, that is `private_key_jwt` or `client_secret_jwt`, and use the same client signing key on more than one OpenIddict authorization server.
**What changed**
- OpenIddict is upgraded from **7.5.0** to **7.7.0**, which fixes [GHSA-925x-4h4v-2792](https://github.com/openiddict/openiddict-core/security/advisories/GHSA-925x-4h4v-2792). The server stack compared only the path of the `aud` claim with the issuer of the authorization server, so a client assertion minted for one server was accepted by another one that shared the client's signing key.
- The audience of a client assertion still has to be the issuer URI of the server that receives it, with or without the trailing slash, so an assertion that was already addressed to the right server keeps working. A correctly configured client needs no change.
- A single authorization server instance, or several instances with their own cryptographic material, was never affected.
**What to do**
Upgrade the packages. There is no configuration change.
Until you can upgrade, give every authorization server its own client signing key, so an assertion cannot be replayed across them.
### Dependency Updates
**Who is affected**
- Applications that use EF Core with MySQL, directly reference MudBlazor, or pin transitive package versions.
- Applications that pin any of the packages below in their own `.csproj` files. The startup templates pin several of them, so a solution generated before v10.7 has them.
- Applications that use EF Core with MySQL, or directly reference MudBlazor or Blazorise.
**What changed**
- MudBlazor is upgraded from **9.4.0** to **9.7.0**.
- The `Microsoft.AspNetCore.*`, `Microsoft.EntityFrameworkCore.*`, `Microsoft.Extensions.*` and `System.*` packages are upgraded from **10.0.9** to **10.0.11**, and the `Microsoft.IdentityModel.*` packages and `System.IdentityModel.Tokens.Jwt` from **8.19.1** to **8.19.2**. OpenIddict 7.7.0 requires these versions.
- `Microsoft.AspNetCore.DataProtection` is added as a direct dependency.
- MudBlazor is upgraded from **9.4.0** to **9.7.0**, and the Blazorise packages from **2.2.1** to **2.3.0**.
- `MySql.EntityFrameworkCore` is upgraded from **10.0.1** to **10.0.9**.
- `MongoDB.Driver` is upgraded from **3.10.0** to **3.11.1**, and `AWSSDK.S3` and `AWSSDK.SecurityToken` to their current versions.
- ABP maps `Guid[]` query parameters through its own type mapping plugin on MySQL, and stores `IdentityUserPasskey.Data` as a serialized `json` column, because the MySQL providers support neither EF Core JSON columns nor primitive collections. The column name and the stored content stay the same.
**What to do**
Review direct MudBlazor references, align them with ABP's package versions, and re-test customized MudBlazor components and forms after upgrading.
Upgrading the ABP packages does not move the versions you pin yourself, and `abp update` rewrites `Volo.*` references only. A reference that stays below what ABP requires fails the restore, so align those versions in your own `.csproj` files.
These are the ones a solution generated by the startup templates hits:
| Package | Align to |
|---------|----------|
| Microsoft.AspNetCore.Authentication.OpenIdConnect | 10.0.11 |
| Microsoft.AspNetCore.Components.WebAssembly | 10.0.11 |
| Microsoft.AspNetCore.Components.WebAssembly.Authentication | 10.0.11 |
| Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation | 10.0.11 |
| Microsoft.EntityFrameworkCore | 10.0.11 |
| Microsoft.Extensions.FileProviders.Embedded | 10.0.11 |
| System.IdentityModel.Tokens.Jwt | 8.19.2 |
A solution that pins other packages of these families can hit the same error on them, so see the [Package Version Changes](../../package-version-changes.md) document for the full list and align the rest as well, to keep your solution on one set of versions.
Review direct MudBlazor and Blazorise references, align them with ABP's package versions, and re-test customized components and forms after upgrading.
If you use the MySQL provider, align your own `MySql.EntityFrameworkCore` reference with ABP's version.

6
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/DataAnnotations/AbpValidationAttributeAdapterProvider_Tests.cs

@ -17,11 +17,7 @@ public class AbpValidationAttributeAdapterProvider_Tests
[Fact]
public void Should_Return_An_Adapter_For_The_EnumDataTypeAttribute()
{
//ASP.NET Core does not provide an adapter for the EnumDataTypeAttribute.
new ValidationAttributeAdapterProvider()
.GetAttributeAdapter(new EnumDataTypeAttribute(typeof(MyEnum)), null)
.ShouldBeNull();
//ABP supplies its own adapter for the EnumDataTypeAttribute.
_provider.GetAttributeAdapter(new EnumDataTypeAttribute(typeof(MyEnum)), null)
.ShouldBeOfType<EnumDataTypeAttributeAdapter>();
}

28
framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Child_Events_Tests.cs

@ -56,6 +56,34 @@ public class UnitOfWork_Child_Events_Tests : AbpIntegratedTest<AbpUnitOfWorkModu
disposed.ShouldBeTrue();
}
[Fact]
public void Should_Not_Trigger_Disposed_Event_Unsubscribed_Over_A_Child_UnitOfWork()
{
var disposed = false;
using (var parentUow = _unitOfWorkManager.Begin())
{
var handlerCount = GetEventHandlerCount(parentUow, nameof(IUnitOfWork.Disposed));
using (var childUow = _unitOfWorkManager.Begin())
{
childUow.Id.ShouldBe(parentUow.Id); //It's a child of the parent UOW.
childUow.Disposed += OnDisposed;
childUow.Disposed -= OnDisposed;
}
GetEventHandlerCount(parentUow, nameof(IUnitOfWork.Disposed)).ShouldBe(handlerCount);
}
disposed.ShouldBeFalse();
void OnDisposed(object? sender, UnitOfWorkEventArgs args)
{
disposed = true;
}
}
private static int GetEventHandlerCount(IUnitOfWork unitOfWork, string eventName)
{
var field = unitOfWork.GetType().GetField(eventName, BindingFlags.Instance | BindingFlags.NonPublic);

75
modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/pt.json

@ -0,0 +1,75 @@
{
"culture": "pt",
"texts": {
"Menu:Account": "Conta",
"UserName": "Nome de utilizador",
"EmailAddress": "Endereço de email",
"UserNameOrEmailAddress": "Nome de utilizador ou endereço de email",
"Password": "Palavra-passe",
"RememberMe": "Manter sessão iniciada",
"UseAnotherServiceToLogin": "Utilizar outro serviço para iniciar sessão",
"UserLockedOutMessage": "A sua conta foi bloqueada pelo administrador ou devido a tentativas de início de sessão inválidas. Tente novamente mais tarde. Contacte o administrador de sistema se considerar que se trata de um erro.",
"InvalidUserNameOrPassword": "Nome de utilizador ou palavra-passe inválidos!",
"LoginIsNotAllowed": "Não tem permissão para iniciar sessão! A sua conta está inativa ou precisa de confirmar o seu email/número de telefone.",
"SelfRegistrationDisabledMessage": "O registo autónomo está desativado nesta aplicação. Contacte o administrador da aplicação para registar um novo utilizador.",
"LocalLoginDisabledMessage": "O início de sessão local está desativado nesta aplicação.",
"Login": "Iniciar sessão",
"Cancel": "Cancelar",
"Register": "Registar",
"AreYouANewUser": "É um novo utilizador?",
"AlreadyRegistered": "Já está registado?",
"InvalidLoginRequest": "Pedido de início de sessão inválido",
"ThereAreNoLoginSchemesConfiguredForThisClient": "Não existem esquemas de início de sessão configurados para este cliente.",
"LogInUsingYourProviderAccount": "Inicie sessão com a sua conta {0}",
"DisplayName:CurrentPassword": "Palavra-passe atual",
"DisplayName:NewPassword": "Nova palavra-passe",
"DisplayName:NewPasswordConfirm": "Confirmar nova palavra-passe",
"PasswordChangedMessage": "A sua palavra-passe foi alterada com sucesso.",
"DisplayName:UserName": "Nome de utilizador",
"DisplayName:Email": "Email",
"DisplayName:Name": "Nome",
"DisplayName:Surname": "Apelido",
"DisplayName:Password": "Palavra-passe",
"DisplayName:EmailAddress": "Endereço de email",
"DisplayName:PhoneNumber": "Número de telefone",
"PersonalSettings": "Definições pessoais",
"PersonalSettingsSaved": "Definições pessoais guardadas",
"PersonalSettingsChangedConfirmationModalTitle": "Informação pessoal alterada",
"PersonalSettingsChangedConfirmationModalDescription": "Para aplicar estas alterações, tem de iniciar sessão novamente. Pretende terminar sessão?",
"PasswordChanged": "Palavra-passe alterada",
"NewPasswordConfirmFailed": "Confirme a nova palavra-passe.",
"NewPasswordSameAsOld": "A nova palavra-passe tem de ser diferente da anterior.",
"Manage": "Gerir",
"MyAccount": "A minha conta",
"DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Registo de novos utilizadores ativado",
"Description:Abp.Account.IsSelfRegistrationEnabled": "Define se um utilizador pode registar a sua própria conta.",
"DisplayName:Abp.Account.EnableLocalLogin": "Autenticação com uma conta local",
"Description:Abp.Account.EnableLocalLogin": "Indica se o servidor permite que os utilizadores se autentiquem com uma conta local.",
"LoggedOutTitle": "Sessão terminada",
"LoggedOutText": "A sua sessão foi terminada e será redirecionado em breve.",
"ReturnToText": "Clique aqui para voltar à aplicação",
"OrLoginWith": "Ou inicie sessão com:",
"ForgotPassword": "Esqueceu-se da palavra-passe?",
"SendPasswordResetLink_Information": "Será enviada para o seu email uma ligação para repor a palavra-passe. Se não receber o email dentro de alguns minutos, tente novamente.",
"PasswordResetMailSentMessage": "Foi enviado um email de recuperação de conta. Se não o receber em 15 minutos, verifique a pasta de correio não solicitado e marque-o como 'Não é spam'.",
"ResetPassword": "Repor palavra-passe",
"ConfirmPassword": "Confirme (repita) a palavra-passe",
"ResetPassword_Information": "Introduza a sua nova palavra-passe.",
"YourPasswordIsSuccessfullyReset": "A sua palavra-passe foi reposta com sucesso.",
"GoToTheApplication": "Ir para a aplicação",
"BackToLogin": "Voltar ao início de sessão",
"ProfileTab:Password": "Alterar palavra-passe",
"ProfileTab:PersonalInfo": "Informação pessoal",
"ReturnToApplication": "Voltar à aplicação",
"Volo.Account:InvalidEmailAddress": "Não foi possível encontrar o email indicado: {0}",
"PasswordReset": "Reposição de palavra-passe",
"PasswordResetInfoInEmail": "Recebemos um pedido de recuperação de conta! Se foi você que efetuou este pedido, clique na ligação seguinte para repor a sua palavra-passe.",
"ResetMyPassword": "Repor a minha palavra-passe",
"AccessDenied": "Acesso negado!",
"AccessDeniedMessage": "Não tem acesso a este recurso.",
"OrRegisterWith": "Ou registe-se com",
"RegisterUsingYourProviderAccount": "Registe-se com a sua conta {0}",
"RequireMigrateSeedTitle": "Não foi possível encontrar o utilizador administrador",
"RequireMigrateSeedMessage": "Certifique-se de que o seed da base de dados foi executado. Consulte a <a target=\"_blank\" href=\"https://abp.io/kb/0003\">documentação</a> para possíveis soluções."
}
}

2
modules/virtual-file-explorer/app/DemoApp.csproj

@ -46,7 +46,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native</PrivateAssets>
</PackageReference>

2
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj

@ -79,7 +79,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

4
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj

@ -80,11 +80,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native</PrivateAssets>
</PackageReference>

4
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyCompanyName.MyProjectName.Blazor.WebAssembly.Client.csproj

@ -9,8 +9,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.11" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

4
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj

@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.11" />
</ItemGroup>
<ItemGroup>
@ -78,7 +78,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

6
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj

@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.11" />
</ItemGroup>
<ItemGroup>
@ -79,11 +79,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native</PrivateAssets>
</PackageReference>

2
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Shared/MyCompanyName.MyProjectName.Blazor.WebAssembly.Shared.csproj

@ -29,7 +29,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

2
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj

@ -73,7 +73,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

4
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj

@ -74,11 +74,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native</PrivateAssets>
</PackageReference>

2
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj

@ -76,7 +76,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

4
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj

@ -77,11 +77,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native</PrivateAssets>
</PackageReference>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj

@ -41,7 +41,7 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
<PackageReference Include="DistributedLock.Redis" Version="1.1.0" />
</ItemGroup>

4
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyCompanyName.MyProjectName.Blazor.Client.csproj

@ -12,8 +12,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.11" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj

@ -16,7 +16,7 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
<PackageReference Include="DistributedLock.Redis" Version="1.1.0" />
</ItemGroup>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj

@ -14,7 +14,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.11" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
</ItemGroup>

4
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Client.csproj

@ -13,8 +13,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.11" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

4
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client.csproj

@ -13,8 +13,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.11" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

4
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj

@ -15,10 +15,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.11" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
<PackageReference Include="DistributedLock.Redis" Version="1.1.0" />
</ItemGroup>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj

@ -15,7 +15,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.11" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
</ItemGroup>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj

@ -13,7 +13,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.11" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Mvc.UI.Bundling\Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj" />
<ProjectReference Include="..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling\Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling.csproj" />

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/MyCompanyName.MyProjectName.DbMigrator.csproj

@ -22,7 +22,7 @@
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj

@ -26,7 +26,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
</Project>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/MyCompanyName.MyProjectName.EntityFrameworkCore.csproj

@ -22,7 +22,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

4
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj

@ -13,8 +13,8 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.11" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
<PackageReference Include="DistributedLock.Redis" Version="1.1.0" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Authentication.JwtBearer\Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy\Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj" />

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj

@ -19,7 +19,7 @@
<PackageReference Include="DistributedLock.Redis" Version="1.1.0" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

4
templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj

@ -22,8 +22,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="10.0.11" />
</ItemGroup>
</Project>

2
templates/console/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj

@ -13,7 +13,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="9.0.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.2" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />

2
templates/maui/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj

@ -35,7 +35,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

4
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj

@ -13,8 +13,8 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9">
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

4
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyCompanyName.MyProjectName.Blazor.Host.Client.csproj

@ -10,8 +10,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.11" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj

@ -13,7 +13,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.11" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Mvc.UI.Bundling\Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj" />
<ProjectReference Include="..\..\..\..\..\modules\basic-theme\src\Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling\Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling.csproj" />

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj

@ -15,7 +15,7 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

6
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj

@ -14,9 +14,9 @@
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Duende.IdentityModel" Version="7.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.11" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Authentication.JwtBearer\Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Caching.StackExchangeRedis\Volo.Abp.Caching.StackExchangeRedis.csproj" />

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj

@ -13,7 +13,7 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.9" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.11" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Serilog\Volo.Abp.AspNetCore.Serilog.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Caching.StackExchangeRedis\Volo.Abp.Caching.StackExchangeRedis.csproj" />

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj

@ -13,7 +13,7 @@
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.9">
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

2
templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj

@ -15,7 +15,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

2
templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj

@ -22,7 +22,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="10.0.11" />
</ItemGroup>
<ItemGroup>

2
templates/module/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests.csproj

@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="10.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="10.0.11" />
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.EntityFrameworkCore\MyCompanyName.MyProjectName.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\MyCompanyName.MyProjectName.Application.Tests\MyCompanyName.MyProjectName.Application.Tests.csproj" />
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.EntityFrameworkCore.Sqlite\Volo.Abp.EntityFrameworkCore.Sqlite.csproj" />

2
templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp.csproj

@ -23,7 +23,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
</ItemGroup>
</Project>

2
templates/wpf/src/MyCompanyName.MyProjectName/MyCompanyName.MyProjectName.csproj

@ -14,7 +14,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.9" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="9.0.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.2" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />

Loading…
Cancel
Save