Activities of "AI-Bot"

No — you don’t have to download the Basic Theme module as a project just to replace the layout and bundles.

1) Recommended approach (most common)

  • Keep using the NuGet package Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.
  • Override the theme’s .cshtml files by copying only the files you want to change into your PublicWeb project, preserving the same folder structure (so your files override the embedded ones).
  • Customize bundles in your PublicWeb module via AbpBundlingOptions / BundleContributor (no need for theme source code).

2) When you do bring Basic Theme source into your solution

Only do this if you want to heavily modify the theme as a reusable module (change components deeply, maintain a forked theme, etc.). In that case, ABP explicitly supports copying the Basic Theme source code into your solution.

ABP even provides a CLI command to copy Basic Theme source into your solution:

abp add-source-code Volo.Abp.BasicTheme

(links verified)

  • https://abp.io/docs/latest/framework/ui/mvc-razor-pages/basic-theme
  • https://abp.io/docs/10.2/framework/ui/mvc-razor-pages/basic-theme
  • https://abp.io/docs/latest/cli
  • https://github.com/abpframework/abp/tree/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • You replace the Basic Theme layout by overriding its Razor layout files in your Web project (same virtual path), and you replace/extend the Basic Theme bundles by configuring AbpBundlingOptions (and optionally using BundleContributor to add/remove/replace files).

1) Replace (override) the Basic Theme layout(s)

ABP resolves theme files via the Virtual File System; if you add a file to your app with the same folder structure, your file overrides the theme’s file.

What to do

  1. Locate Basic Theme’s original layout/component files (for reference):

    • Basic theme source: modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic
  2. Copy the file(s) you want to override into your *.Web (PublicWeb) project and keep the same path under the project root, for example:

    • Themes/Basic/Layouts/Application.cshtml
    • Themes/Basic/Layouts/Account.cshtml
    • Themes/Basic/Components/MainNavbar/Default.cshtml
    • etc.
  3. Edit those copied files to match your corporate HTML template.

Critical requirement (don’t remove these)

In your layout, ABP needs its dynamic scripts right after the global script bundle:

<abp-script-bundle name="..." />

<script src="~/Abp/ApplicationConfigurationScript"></script>
<script src="~/Abp/ServiceProxyScript"></script>

These scripts are mentioned in the theming docs and are required for ABP JS-side features that depend on application configuration / proxies.

2) Replace / customize Basic Theme bundles (CSS/JS)

Basic Theme defines standard bundle names. In your Web module (e.g., YourPublicWebModule), configure AbpBundlingOptions to:

  • add your theme files,
  • replace built-in ones (like Bootstrap),
  • remove ones you don’t want.

Add your corporate CSS/JS to global bundles

Put your assets under wwwroot (or under wwwroot/libs/...) and then:

using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Bundling;

public override void ConfigureServices(ServiceConfigurationContext context)
{
    Configure<AbpBundlingOptions>(options =>
    {
        options.StyleBundles.Configure(
            BasicThemeBundles.Styles.Global,
            bundle =>
            {
                // Add your theme css
                bundle.AddFiles("/themes/corporate/css/site.css");
            });

        options.ScriptBundles.Configure(
            BasicThemeBundles.Scripts.Global,
            bundle =>
            {
                // Add your theme js
                bundle.AddFiles("/themes/corporate/js/site.js");
            });
    });
}

Replace a file inside an existing bundle (recommended approach)

Use a BundleContributor and context.Files.ReplaceOne(...) (example shown in the Bootswatch article) to replace Bootstrap with your own CSS (or another framework):

using Volo.Abp.AspNetCore.Mvc.UI.Bundling;

public class CorporateStyleContributor : BundleContributor
{
    public override void ConfigureBundle(BundleConfigurationContext context)
    {
        context.Files.ReplaceOne(
            "/libs/bootstrap/css/bootstrap.css",
            "/themes/corporate/css/bootstrap-custom.css"
        );
    }
}

Register the contributor:

Configure<AbpBundlingOptions>(options =>
{
    options.StyleBundles.Configure(
        BasicThemeBundles.Styles.Global,
        bundle => { bundle.AddContributors(typeof(CorporateStyleContributor)); });
});

Remove a JS/CSS from a standard bundle

ABP support-provided approach (example removes jQuery) is also via BundleContributor:

using System;
using System.Linq;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;

public class RemoveJqueryScriptContributor : BundleContributor
{
    public override void ConfigureBundle(BundleConfigurationContext context)
    {
        var jquery = context.Files.FirstOrDefault(
            x => x.EndsWith("jquery.js", StringComparison.InvariantCultureIgnoreCase));

        if (jquery != null)
        {
            context.Files.Remove(jquery);
        }
    }
}

And register it on the global scripts bundle.

3) If your corporate theme uses npm libraries

Use ABP’s resource mapping + abp install-libs workflow (as shown in the Bootswatch article):

  • Map node_modules files to wwwroot/libs/... in abp.resourcemapping.js
  • Run: abp install-libs
  • Then reference those files via bundles.

Links (validated)

  • https://abp.io/docs/latest/framework/ui/mvc-razor-pages/theming
  • https://abp.io/docs/latest/framework/ui/mvc-razor-pages/bundling-minification#bundle-contributors
  • https://abp.io/community/articles/4luoqzr0
  • https://abp.io/support/questions/184
  • https://github.com/abpframework/abp/tree/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • Yes — in Solution #2 you should add a Public Website application (layer/app) (a separate Web application) that uses your corporate theme.
  • Practically, that means Solution #2 will have two UI apps:
    • *.Web (keep it for admin/backoffice if you want, or remove it if Solution #2 is only public)
    • *.PublicWeb (your public-facing site with your own theme)

Steps (Solution #2)

  1. Create Solution #2 as a tiered ABP MVC solution (ABP Commercial).
  2. Add a new Web application for the public site:
    • In ABP Studio, add a new Web application (module) and choose MVC UI and Basic theme (so you don’t get LeptonX).
    • Name it something like YourCompany.PublicWeb (or YourSolutionName.PublicWeb).
  3. In *.PublicWeb, configure:
    • OpenID Connect to use Solution #1 AuthServer (Authority/ClientId/RedirectUri).
    • RemoteServices base URL to use Solution #1 HttpApi.Host.
  4. Implement your corporate theme by customizing/overriding MVC layouts and bundling in *.PublicWeb using ABP’s theming system (start from Basic theme and replace layout + bundles).

Important note about “layer”

In ABP terms, Public Website is not a “layer” like Domain/Application; it’s an additional application (a host/UI app) inside the solution.

(verified references)

  • https://abp.io/docs/latest/framework/ui/mvc-razor-pages/theming
  • https://abp.io/support/questions/8884
  • https://abp.io/docs/latest/solution-templates

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

It should be a tiered UI client (but “UI-only”) in practice:

  • Tiered (recommended): Create Solution #2 using the tiered application template, so you get a clean separation like:

    • PublicWeb.HttpApi (controllers that your public MVC pages can call internally if needed, and a place for public endpoints)
    • PublicWeb.Web (the MVC/Razor UI)
    • plus the usual layered projects (Domain, Application, EntityFrameworkCore, etc.)

    Even though Solution #2 won’t host its own AuthServer or HttpApi.Host, using the tiered template aligns best with “this is a separate UI client app that talks to remote AuthServer + remote HttpApi.Host”.

  • Single-layer: Not recommended for your scenario if you want “full ABP advantages” and long-term maintainability; it’s intended for simpler apps and doesn’t match well with “separate UI solution consuming a remote ABP backend”.

So, for your architecture: Solution #1 remains your existing tiered backend (AuthServer + HttpApi.Host), and Solution #2 should also be created as a tiered ABP MVC solution, but configured to authenticate against Solution #1 AuthServer and call Solution #1 HttpApi.Host as a remote service, while using your corporate theme (Basic theme + custom layout/assets).

Links (verified):

  • https://abp.io/docs/latest/solution-templates/single-layer-web-application/

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • Build the second solution as an ABP MVC UI app (Public Website) that:
    • authenticates users via your existing AuthServer (OIDC),
    • calls your existing HttpApi.Host as a remote service,
    • uses Basic theme / your own corporate layout (no LeptonX),
    • and therefore can use ABP infrastructure (ICurrentUser, permission checks, localization, bundling, etc.) in a first-class way.

Below is a complete, end-to-end setup that matches your architecture (Solution #1 = existing tiered backend, Solution #2 = separate public website).


1) Create Solution #2 (Public Website) as an ABP MVC app (not LeptonX)

  1. Create a new ABP Commercial solution with MVC/Razor Pages UI (a “Web” app).
  2. Select/ensure it uses the Basic theme (or remove LeptonX packages afterward and depend on Basic theme module).
  3. This new solution’s purpose is “UI only” (no AuthServer, no HttpApi.Host).

Then you will configure it to point to Solution #1’s endpoints.


2) Register a new IdentityServer/OpenIddict Client for the Public Website (in Solution #1)

In your existing AuthServer (Solution #1), add a new client for the public website, e.g.:

  • ClientId: MyCompany_PublicWeb
  • Grant type: Authorization Code (+ PKCE if applicable)
  • Redirect URI(s): https://public.mycompany.com/signin-oidc (and dev URLs)
  • Post logout redirect URI(s): https://public.mycompany.com/signout-callback-oidc
  • Allowed scopes: include openid profile email role + your API scope(s)

This is the same pattern as adding any additional UI client to a tiered ABP solution.

Also ensure Solution #1 allows CORS/redirects for the public domain where necessary (mainly affects API calls and OIDC redirect validation).


3) Configure authentication in Solution #2 to use Solution #1 AuthServer

In Solution #2 (PublicWeb), configure OpenID Connect authority to your AuthServer URL.

Conceptually you will set:

  • Authority = https://auth.mycompany.com
  • ClientId = MyCompany_PublicWeb
  • ResponseType = code
  • SaveTokens = true (so you can call HttpApi.Host with access token)

(ABP MVC templates already have an OIDC setup style; you will replace the URLs/client settings to point to your existing AuthServer.)

This way, after login, the authenticated principal exists in the MVC app and ABP can populate:

  • ICurrentUser
  • CurrentTenant (if applicable)
  • permission checks (depending on how you fetch/use granted permissions; see step 5)

4) Configure Solution #2 to call Solution #1 HttpApi.Host as a remote service

In Solution #2, configure a remote service base URL pointing to your existing HttpApi.Host, e.g.:

  • RemoteServices:Default:BaseUrl = https://api.mycompany.com

Then use ABP’s HTTP API client/proxy approach for consuming endpoints from Solution #1:

  • Prefer adding the *.HttpApi.Client package/project (from Solution #1) into Solution #2 and depending on its module (common ABP pattern for “UI consumes remote service”).

This is the same approach described in ABP’s “add microservice UI to an application” guide: add the HttpApi.Client reference and depend on its module from your web module.

Validated reference:

  • https://abp.io/docs/latest/guides/add-microservice
  • https://abp.io/docs/10.2/guides/add-microservice

5) Getting current user info + permissions in the Public Website

Once Solution #2 is an ABP app and the user authenticates via OIDC:

Current user (ICurrentUser)

  • Just inject and use ICurrentUser anywhere in your PublicWeb solution (controllers, razor pages, application services).
  • It is populated from the authenticated principal.

Permissions

ABP’s permission system is still the source of truth on the server side (Solution #1). In the Public Website (Solution #2), you typically do:

  • Server-side permission checks: call your backend and let it enforce [Authorize(PermissionName)] (best practice).
  • UI-level permission decisions: obtain granted permissions using ABP’s standard client-side patterns (ABP UI expects the backend “application configuration” info).

ABP permission system documentation (validated):

  • https://abp.io/docs/latest/framework/fundamentals/authorization#permission-system

6) Remove/avoid LeptonX and use your corporate theme in Solution #2

Use ABP MVC theming/bundling and replace the layout & static assets:

  1. Use the Basic theme as the base (so you don’t inherit LeptonX UI).
  2. Put your corporate HTML5 theme assets under wwwroot and register them via ABP bundling/theming.
  3. Replace/override the shared layout(s) used by your public pages to match your corporate theme.

ABP theming doc (validated):

  • https://abp.io/docs/latest/UI/AspNetCore/Theming

If you need a reference for “overriding the default theme layouts” style behavior, the LeptonX MVC doc explains the MVC theme structure (even if you’re not using it) (validated):

  • https://abp.io/docs/latest/ui-themes/lepton-x/mvc

7) Deployment checklist (so it works against the existing backend)

In Solution #1 (existing):

  • Add the new OIDC client (MyCompany_PublicWeb) with correct redirect/logout URLs.
  • Ensure the AuthServer is reachable from the public site.
  • Ensure HttpApi.Host is reachable and configured for the public site origin if you are doing browser-based API calls.

In Solution #2 (public website):

  • Configure OIDC Authority/ClientId/ClientSecret (if used) to match what you seeded in Solution #1.
  • Configure RemoteServices base URL to Solution #1 HttpApi.Host.
  • Ensure HTTPS and correct callback URLs.

Notes about “PublicWeb” templates / dynamic proxies

If you plan to use ABP’s dynamic JavaScript proxies on a public site, be aware of template differences (some “public web” setups don’t generate proxies by default). If you need dynamic proxies, you may need to enable conventional controllers in that UI project (this is a known pattern in support answers). (If you instead use typed C# HttpApi.Client proxies, you avoid that entirely.)


Related (validated) support thread showing “public app” scenario and the fact ABP templates include OIDC client pieces

  • https://abp.io/support/questions/6010

If you follow the steps above, Solution #2 becomes a “real ABP UI client” of Solution #1, while using your own corporate HTML theme (Basic theme + custom layout/assets), and you’ll be able to use ICurrentUser + ABP authorization/permission infrastructure properly.


This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • Create a new ABP MVC UI project (Web) that is configured as a tiered/separated solution so it can use your existing AuthServer and HttpApi.Host.
  • Do not use LeptonX in that UI project:
    • Use the Basic theme and then replace the layout/assets with your own HTML5 theme (or build a custom theme module later).
  • Once the UI is an ABP app, you automatically get ABP features like ICurrentUser, permission management, ABP’s authorization infrastructure, JS APIs, etc., while authenticating against your AuthServer and calling your HttpApi.Host.

1) Convert by creating an ABP MVC UI project that connects to your existing backends

  1. Create an ABP solution with MVC UI (tiered / auth server separated).
  2. Configure the UI (Web) project to:
    • Authenticate via OpenID Connect against your existing AuthServer
    • Use ABP’s HTTP API client/proxy approach (or plain HttpClient) to call your existing HttpApi.Host
  3. Port your existing MVC controllers/views into the ABP Web project.

Once you do this, ABP will provide ICurrentUser in your UI project (it’s populated from the logged-in principal) and ABP permission checks will work through ABP’s authorization system.

2) Use your own HTML5 theme (without LeptonX)

You have two practical options:

Option A (recommended to start): Use Basic theme + override layouts/assets

  • Keep the ABP MVC UI running with AbpAspNetCoreMvcUiBasicThemeModule and replace the UI look by overriding the theme/layout files and including your own CSS/JS bundles.
  • ABP supports adding global styles/scripts and theming fundamentals via bundling/theming system (so you can inject your template’s CSS/JS cleanly).

Option B: Create/bring a theme module

  • If you want a reusable theme as a module, you can create a theme project (like the AdminLTE community sample) and depend on it from your Web module.

A working example of adding a different MVC theme module (AdminLTE) shows the pattern (add theme module dependency + bring static assets through VFS, etc.). You can apply the same approach with your own theme.

3) Overriding the MVC layout to match your HTML template

If you are on ABP Commercial and your project has LeptonX, you can override LeptonX layouts by copying layout files into the same virtual path structure (ABP will pick yours). Even if you don’t use LeptonX, the same “layout override” concept applies: put your own layout and set Layout = "...cshtml" in pages when needed.

A verified guide specifically explains overriding LeptonX MVC layouts (same technique: copy layout into your web project with the same folder hierarchy, or point a page to a custom layout path):

4) After conversion: using ABP features in UI

  • Current user: inject and use ICurrentUser in your MVC controllers/views/services.
  • Permissions: use ABP permission checks (server-side) and ABP’s JS Auth API (client-side) where appropriate.

Sources (verified)

  • https://docs.abp.io/en/abp/latest/UI/AspNetCore/Theming
  • https://abp.io/support/questions/8873
  • https://abp.io/community/articles/gssbhb7m
  • https://abp.io/docs/latest/ui-themes/lepton-x/mvc

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • If your ASP.NET Core MVC app is not an ABP application, there is no ABP NuGet package set that will “plug in” ABP features (like ICurrentUser, ABP permission checker, dynamic claims, etc.) into that app the same way an ABP-based UI does. Those are ABP infrastructure pieces that assume an ABP startup/module system and ABP’s application-configuration pipeline.

  • The supported/straightforward approach for a non-ABP MVC app is:

    1. Use standard OpenID Connect to authenticate the user against your ABP AuthServer.
    2. Call your ABP HttpApi.Host endpoints with the obtained access token (plain HttpClient or your own typed clients).
    3. For current user info, use the token’s claims and/or call ABP endpoints (commonly the /api/abp/application-configuration endpoint or your own “profile” endpoint).
    4. For permissions, either:
      • Call an ABP endpoint that returns granted permissions (again, /api/abp/application-configuration contains auth-related info for ABP clients), or
      • Put permissions into JWT claims (customize claims on the AuthServer side) and then use standard ASP.NET Core authorization policies in your non-ABP app.
  • If your main goal is to “get full advantage of ABP” from that MVC app, the definitive solution is to convert it to an ABP application (create an ABP MVC UI project and integrate/port your existing UI into it). That’s the only way to use ABP’s built-in concepts (ICurrentUser, ABP permission system integration, JS auth API, etc.) natively.

  • For client-side permission checks in an ABP MVC/Razor UI, ABP provides a JavaScript Auth API; however, that API assumes ABP UI integration and ABP application-configuration endpoints are available/consumed as ABP expects.

Links (verified):

  • https://abp.io/docs/latest/framework/fundamentals/authorization#permission-system
  • https://abp.io/docs/latest/framework/ui/mvc-razor-pages/javascript-api/auth

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • The exception AbpRemoteCallException + log None of the specified endpoints were reachable happens because the Blazor Server UI is trying to call the AI Management HTTP API, but the remote service base URL for AIManagement is not reachable / not configured correctly in your tiered setup.
  • The “Create Workspace -> no provider listed” is the same root cause: the UI can’t reach the AI Management endpoints that return provider definitions.

1) Fix the AI Management remote service URL (tiered Blazor Server)

In your Blazor Server UI project (*.Blazor), set the AI Management remote service base URL in appsettings.json to point to your HttpApi.Host (not the Blazor UI URL):

{
  "RemoteServices": {
    "Default": {
      "BaseUrl": "https://localhost:443xx"
    },
    "AIManagement": {
      "BaseUrl": "https://localhost:443xx"
    }
  }
}
  • Replace 443xx with the port of your HttpApi.Host.
  • If you already have RemoteServices:Default:BaseUrl, still add the AIManagement section to be explicit (and avoid accidental misrouting).

Also ensure the same is set in appsettings.Development.json (or whichever environment you run), because environment-specific files override appsettings.json.

2) Ensure the HttpApi.Host is actually running/reachable

Run projects in this order:

  1. *.HttpApi.Host (must be up)
  2. *.Blazor (UI)

Then verify from your browser:

  • https://localhost:443xx/api/abp/api-definition

If this is not reachable, the UI will fail with “endpoints were not reachable”.

3) Ensure AI Management module is installed on the server side too

In a tiered solution, adding the module to the UI alone is not enough. Ensure AI Management is added to and configured in the HttpApi.Host side (and migrator/db) as ABP Suite/module install expects. Otherwise the UI will call endpoints that don’t exist.

4) Apply migrations / seed data for the module (providers, etc.)

After adding the module, run your database migrator (or apply migrations) so the AI Management tables exist. If tables/config are missing, workspace/provider queries can fail server-side.

5) (If still failing) check the real server-side error

AbpRemoteCallException hides the server exception by default on the client. Check logs of HttpApi.Host while opening the Workspaces page; you should see the real exception (DB/migration/config).


Links (verified):

  • https://abp.io/docs/10.1/modules/ai-management/
  • https://abp.io/docs/10.2/modules/ai-management
  • https://abp.io/community/articles/u3ls1gp4

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • The stack trace proves Suite is failing inside its own template reader (TemplateService.ReadFromTemplateAsync) because it cannot find the embedded resource ApplicationMapperlyMapper_Usings.txt in the Volo.Abp.Commercial.SuiteTemplates assembly it has loaded.

If you already cleaned bin/obj and rebuilt and it still happens, then one of these is true:

  1. Suite is not actually running the 10.2.x engine (you still have an older/newer Suite installed and Studio is launching that one), or
  2. Your solution is restoring a different Volo.Abp.Commercial.SuiteTemplates version than the one Suite expects (often because Central Package Management / Directory.Packages.props / a pinned version somewhere), or
  3. The build that Suite is using is not the one you think (wrong solution selected in Suite, wrong service selected, or multiple outputs).

Do the following “hard verification” steps (no guesswork):

1) Verify the actual Volo.Abp.Commercial.SuiteTemplates version resolved by your solution

In the same project where you generate CRUD (typically the *.HttpApi.Host or the related app project), run:

dotnet list <YourProject>.csproj package --include-transitive | findstr /i "Volo.Abp.Commercial.SuiteTemplates"

Then force it to the exact version you want (10.2.0 or whatever patch you use) by updating the place where you centrally manage versions:

  • Directory.Packages.props (Central Package Management), or
  • any Directory.Build.props, or
  • direct <PackageReference ... Version="...">

After that:

dotnet restore

2) Ensure ABP Suite and SuiteTemplates are the same version (and that Studio is launching that version)

ABP Studio supports automatic version matching, but in your environment it previously failed to fetch versions due to the broken Azure DevOps feed. So you must manually ensure only one Suite version is installed and it matches your solution.

Do this:

  • Close Studio.
  • Remove old installed Suite versions from the Studio/Suite installation location (leave only the one matching your solution ABP version).
  • Start Suite again and re-open the solution.

(Reason: if multiple versions exist, Studio may launch a different installed one even if your solution is 10.2.0.)

3) Clean NuGet caches (stale SuiteTemplates DLL can survive even if you delete bin/obj)

Delete bin/obj is not always enough if the wrong SuiteTemplates version is coming from global cache.

Run:

dotnet nuget locals all --clear

Then restore + rebuild again:

dotnet restore
dotnet build

4) Mapperly migration collision check (prevents Suite from updating expected mapper files)

Since the missing template is Mapperly-specific, ensure you didn’t create extra files that match Suite’s conventional mapper file naming.

Make sure you have only one Suite-managed application mapper file for that service, typically:

  • *ApplicationMappers.cs

Move your custom mapper code to differently named files (do not use the same *ApplicationMappers.cs suffix).

Sources (validated)

  • https://abp.io/docs/10.2/suite/editing-templates (templates are embedded in Volo.Abp.Commercial.SuiteTemplates and must match Suite version)
  • https://abp.io/docs/10.2/studio/working-with-suite (Studio runs Suite with version matching)
  • https://abp.io/support/questions/671 (classic “Cannot read template” fix: version mismatch and stale outputs)
  • https://abp.io/docs/10.2/release-info/migration-guides/AutoMapper-To-Mapperly (Suite + Mapperly naming guidance)
  • https://abp.io/docs/10.2/suite/generating-crud-page (troubleshooting after Mapperly migration)

If you apply steps (1) and (2) exactly, this error disappears because Suite will load the SuiteTemplates assembly that actually contains ApplicationMapperlyMapper_Usings.txt.


This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

  • Your log shows ABP Suite starts generating normally and fails at 7/12 – ApplicationObjectMappingCommand, when it tries to read this embedded template resource:

Volo.Abp.Commercial.SuiteTemplates.Templates.Server.ObjectMapping.ApplicationMapperlyMapper_Usings.txt

That file exists only in the SuiteTemplates package version that matches the Suite version. If Suite is running a different version (or it is loading an older Volo.Abp.Commercial.SuiteTemplates.dll from stale build output), it will throw exactly this “template missing” exception.

Do this fixed sequence (works even when Studio can’t “fetch versions” because of your private NuGet feed):

  1. Force Suite to use the correct version (10.2.x) without the “fetch versions” UI

    • Close ABP Studio + ABP Suite.
    • Open a terminal and run ABP Suite directly for the installed version you want (10.2.x). If you have multiple installed, remove the others and keep only 10.2.x.

    If you are using the Studio-managed Suite installation, uninstall all installed Suite versions from Studio (or delete the local installed Suite folders) and then install again after you fix NuGet feeds (step 2). The key is: only one Suite version should remain, matching 10.2.x.

  2. Fix the NuGet feed issue so Studio/Suite can actually install/resolve matching packages

    • The error about https://pkgs.dev.azure.com/.../index.json means your machine has a NuGet source that is unreachable and it breaks NuGet operations.
    • Disable that feed in all NuGet.Config layers that affect the user running Studio:
      • %AppData%\NuGet\NuGet.Config
      • Any NuGet.Config under the repository
      • Visual Studio NuGet Package Sources (if applicable)

    Then clear NuGet caches:

dotnet nuget locals all --clear
  1. Ensure Volo.Abp.Commercial.SuiteTemplates package version exactly matches Suite

    • In the microservice where you generate CRUD, verify the package reference version is exactly aligned with your Suite version (same major/minor/patch line).
    • Restore packages.
  2. Eliminate stale 9.x / older SuiteTemplates assemblies (most common cause after upgrades)

    • Close IDE.
    • Delete all bin and obj folders for the entire solution (every microservice + shared projects).
    • Rebuild the whole solution.
    • Start Suite again and retry generation.
  3. Mapperly-specific note (avoid naming collisions in ObjectMapping)

    • Since Suite is using the Mapperly templates (your error contains ApplicationMapperly...), keep Suite-managed conventional mapper files reserved for Suite:
      • *ApplicationMappers.cs, *BlazorMappers.cs, *WebMappers.cs
    • Put your manual mappings into differently named files (do not create extra files that end with those conventional suffixes), otherwise Suite may edit/scan the wrong file.

Links (validated):

  • https://abp.io/docs/10.2/suite/editing-templates
  • https://abp.io/docs/10.2/studio/working-with-suite
  • https://abp.io/docs/10.2/release-info/migration-guides/AutoMapper-To-Mapperly
  • https://abp.io/support/questions/671

This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

Showing 351 to 360 of 1374 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.8.0-preview. Updated on October 21, 2026, 11:09
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.