Learn More, Pay Less!
Limited Time Offer!

Activities of "cangunaydin"

  • ABP Framework version: v9
  • UI Type: Angular
  • Database System: EF Core (PostgreSQL.)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes

Hello i am having a problem when i am trying to generate a proxy for my main module. When i try to run the command abp generate-proxy -t ng -m doohlink -u https://localhost:44389 i am getting

[API Not Available] Request to https://localhost:44389/api/abp/api-definition is unsuccessful. Please double-check the URL in the source project environment and make sure your application is up and running. but the url is available

I can send you the api-definition file if you want. I am using kestrel to debug the application. And i tried dotnet run from the root also. Any assistance would be appreciated

  • ABP Framework version: v9
  • UI Type: Angular
  • Database System: EF Core ( PostgreSQL)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes

Hello my question is about how to implement hangfire. I am using hangfire in my abp project. But i am having some weird behavior. To make the things simpler i can post some basic code for my module and hangfire implementation.

[DependsOn(
    typeof(AbpAspNetCoreMvcUiMultiTenancyModule),
    typeof(AbpAspNetCoreAuthenticationOpenIdConnectModule),
    typeof(PopManagementModule),
    typeof(AbpBlobStoringAzureModule),
    typeof(AbpBackgroundJobsHangfireModule),
    typeof(AbpBackgroundWorkersHangfireModule),
    typeof(AbpAspNetCoreMvcUiLeptonXThemeModule),
    typeof(DoohlinkSharedHostingMicroservicesModule)
)]
public class PopManagementHttpApiHostModule:AbpModule
{
    //etc...

and here is how i configure hangfire.

private void ConfigureHangfire(ServiceConfigurationContext context, IConfiguration configuration)
    {
        context.Services.AddHangfire(config =>
        {
            var options = new PostgreSqlStorageOptions
            {
                DistributedLockTimeout = TimeSpan.FromMinutes(1)
            };

            config.UsePostgreSqlStorage(postgresSqlStorageConfig =>
            {
                postgresSqlStorageConfig.UseNpgsqlConnection(configuration.GetConnectionString("PopManagement"));
            }, options);
        
        });
    }

and here is my project structure (part of my project)

so when i run the project everythings works fine. But the weird part is i don't see any background jobs enqueued in my hangfire dashboard with parameters.

what i mean by that is i have this background job.

public class PopJob : AsyncBackgroundJob<PopJobBto>, ITransientDependency
{
    private readonly IPopRepository _popRepository;
    private readonly IBlobContainer<PopCsvContainer> _popCsvContainer;
    private readonly IGuidGenerator _guidGenerator;

    public PopJob(IPopRepository popRepository, IBlobContainer<PopCsvContainer> popCsvContainer,
        IGuidGenerator guidGenerator)
    {
        _popRepository = popRepository;
        _popCsvContainer = popCsvContainer;
        _guidGenerator = guidGenerator;
    }

    public override async Task ExecuteAsync(PopJobBto args)
    {
        var file = await _popCsvContainer.GetOrNullAsync(args.FileName);
        if (file == null)
        {
            return;
        }

        var csvData = System.Text.Encoding.UTF8.GetString(GetBytesFromStream(file));
        var items= ConvertFromCsv(csvData);
        await _popRepository.InsertBulkAsync(items);
    }
public sealed record PopJobBto(string FileName);
public class PopAppService : PopManagementAppService, IPopAppService
{
    private readonly IBlobContainer<PopCsvContainer> _blobContainer;
    private readonly IClock _clock;
    private readonly IBackgroundJobManager _backgroundJobManager;
    private readonly IDistributedCache<PopCacheItem, PopCacheItemKey> _distributedCache;
    private readonly IPopRepository _popRepository;
    private readonly IScreenRepository _screenRepository;
    private readonly IFileRepository _fileRepository;

    public PopAppService(IBlobContainer<PopCsvContainer> blobContainer, IClock clock,
        IBackgroundJobManager backgroundJobManager, IDistributedCache<PopCacheItem, PopCacheItemKey> distributedCache,
        IPopRepository popRepository, IScreenRepository screenRepository, IFileRepository fileRepository)
    {
        _blobContainer = blobContainer;
        _clock = clock;
        _backgroundJobManager = backgroundJobManager;
        _distributedCache = distributedCache;
        _popRepository = popRepository;
        _screenRepository = screenRepository;
        _fileRepository = fileRepository;
    }
 public async Task CreateAsync(CreatePopDto input)
    {
        //create csv file from the input and send it to azure blob storage
        var csvData = ConvertToCsv(input.Items);
        var csvBytes = GetCsvBytes(csvData);
        // Generate the file name using the first item's DeviceId and the current date and time
        if (!input.Items.Any())
        {
            return;
        }

        var deviceId = input.Items.First().DeviceId;
        var dateTime = _clock.Now.ToString("yyyyMMdd_HHmmss");
        var fileName = $"{deviceId}_{dateTime}.csv";
        await _blobContainer.SaveAsync(fileName, csvBytes);
        await _backgroundJobManager.EnqueueAsync(new PopJobBto(fileName));
    }

so in hangfire i am expecting to see the file name and how it is serialized. But all i see is background workers.

I believe it still uses default fifo implementation cause i can see that it hits background job. But sometimes it hangs and never fire the background job, could be because of the distributed lock i suppose. What am i missing over here. Can you point me to the right direction?

  • ABP Framework version: v9
  • Database System: EF Core (PostgreSQL)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes

Hello i have a very general question about how the unitofwork is working in Abp. If i use multiple db context with separate connection strings in my modular monolith app and if i want to do multiple operations with one unitofwork. Is it going to be a problem? since each of the modules are going to have different databases, i want to ask how does transaction is going to be handled. If i raise a domain event and as a side effect in the same scope i want to also insert a record on another database server? Or if the app has a separate databases for each module on one database server. Thank you for the assistance.

  • ABP Framework version: v9.0.2
  • UI Type: Angular
  • Database System: EF Core (PostgreSQL)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes

Hello, When i try to serve a file with chunks, i am getting an error from abp studio middleware. here is my code.

    [HttpGet]
    [Route("download")]
    public async Task DownloadAsync([FromQuery(Name = "id")]  Guid? id,[FromQuery(Name = "tenantId")]  Guid? tenantId)
    {
        Check.NotNull(id, nameof(id));
        Check.NotNull(tenantId, nameof(tenantId));
        var file = await _fileAppService.GetAsync(id.Value, tenantId.Value);
        HttpContext.Response.ContentType = file.MimeType;
        await HandleContentDownload(file, 0, file.Size);
    }

    private async Task HandleContentDownload(FileDto file, long startOffset, long length)
    {
        using (CurrentTenant.Change(file.TenantId))
        {
            var tempOffset = (int)startOffset;
            var tempLength = length;
            var chunkLength = 1024 * 1024; //1mb

            var outputStream = HttpContext.Response.Body;
            while (tempOffset < tempLength)
            {
                var remainingLength = tempLength - tempOffset;
                if (remainingLength < chunkLength)
                {
                    chunkLength = (int)(tempLength - tempOffset);
                }

                await using (var stream = await _fileAppService.DownloadAsync(file.Id, tempOffset, chunkLength))
                {
                    await outputStream.WriteAsync((stream as MemoryStream)?.ToArray());
                }

                tempOffset += chunkLength;
            }

            await outputStream.FlushAsync();
        }
    }

i am getting this error.

System.InvalidOperationException: Writing to the response body is invalid for responses with status code 204.
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.FirstWriteAsyncInternal(ReadOnlyMemory`1 data, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.WritePipeAsync(ReadOnlyMemory`1 data, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpResponseStream.WriteAsync(Byte[] buffer, Int32 offset, Int32 count, CancellationToken cancellationToken)
   at System.IO.MemoryStream.CopyToAsync(Stream destination, Int32 bufferSize, CancellationToken cancellationToken)
   at System.IO.Stream.CopyToAsync(Stream destination)
   at Volo.Abp.Studio.Client.AspNetCore.AbpStudioMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Volo.Abp.Studio.Client.AspNetCore.AbpStudioMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Volo.Abp.Studio.Client.AspNetCore.AbpStudioMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Volo.Abp.AspNetCore.Mvc.Libs.AbpMvcLibsService.<CheckLibs>b__1_0(HttpContext httpContext, RequestDelegate next)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)

what can be done to fix the problem? any idea? somehow can i leave this method out of AbpStudioMiddleware?

  • ABP Framework version: v9.0.2
  • UI Type: Angular
  • Database System: EF Core (PostgreSQL)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes

Hello, I realized that maui template is still using Microsoft.Windows.CsWin32 nuget package for msix. As i know you can debug it without msix by giving property <WindowsPackageType>None</WindowsPackageType>

and if you do that with the startup project you are getting winrt exception. And you can not load the fonts that comes from UraniumUI.Icons package. It throws an error. it can not load the fonts that comes with it. To generate the error you can uncheck the "Create MSIX Package" and try to debug it.

so to create msix packages you do not need to depend on Microsoft.Windows.CsWin32 anymore. Just giving <WindowsPackageType>None</WindowsPackageType> and changing launchsettings.json file is enough with the values here.

{
  "profiles": {
    "Windows Machine": {
      "commandName": "MsixPackage",
      "nativeDebugging": false
    }
  }
}

by the way do not try to debug with jetbrains rider ide for msix package. I suppose it has a bug when you try to debug it, it always throws an error.

Another thing i have found is. When i create mobile solution with abp studio. It saves wrong port and url for openiddict into the db while it seeds for mobile app. So you can not log in from mobile app since port was different.

initial values that i have tried with abp studio was mvc, efcore (postgresql) with mobile support tiered.

  • ABP Framework version: v9.0.2
  • UI Type: Angular
  • Database System: EF Core (PostgreSQL)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes

Hello, I am trying to intercept my service from my aks cluster. Everything works fine, i can intercept the call and redirect it to my local machine.

but when i debug the app from visual studio or jetbrains, environment variables are not overridden it gets the appsettings.json values. How does abp studio overriding the environment variables that is the same with the service? am i doing sth wrong? thank you for the help.

  • ABP Framework version: v9.0.2
  • UI Type: Angular
  • Database System: EF Core ( PostgreSQL)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes
  • Exception message and full stack trace:

Hello, I am trying to upgrade my project to abp v9 When i run my backend, i am getting an exception. I use Hangfire for background jobs and background workers. Here is the exception i am getting from Volo.Abp.Identity.Pro.Domain

[19:16:09 FTL] Doohlink.HttpApi.Host terminated unexpectedly! Volo.Abp.AbpInitializationException: An error occurred during the initialize Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor phase of the module Volo.Abp.Identity.AbpIdentityProDomainModule, Volo.Abp.Identity.Pro.Domain, Version=9.0.2.0, Culture=neutral, PublicKeyToken=null: Current storage doesn't support specifying queues directly for a specific job. Please use the QueueAttribute instead.. See the inner exception for details. ---> System.NotSupportedException: Current storage doesn't support specifying queues directly for a specific job. Please use the QueueAttribute instead. at Hangfire.RecurringJobManager.AddOrUpdate(String recurringJobId, Job job, String cronExpression, RecurringJobOptions options) in C:\projects\hangfire-525\src\Hangfire.Core\RecurringJobManager.cs:line 108 at Hangfire.RecurringJob.AddOrUpdate(String recurringJobId, String queue, Expression`1 methodCall, String cronExpression, RecurringJobOptions options) in C:\projects\hangfire-525\src\Hangfire.Core\RecurringJob.cs:line 568 at Volo.Abp.BackgroundWorkers.Hangfire.HangfireBackgroundWorkerManager.AddAsync(IBackgroundWorker worker, CancellationToken cancellationToken) at Volo.Abp.Identity.AbpIdentityProDomainModule.OnApplicationInitializationAsync(ApplicationInitializationContext context) at Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor.InitializeAsync(ApplicationInitializationContext context, IAbpModule module) at Volo.Abp.Modularity.ModuleManager.InitializeModulesAsync(ApplicationInitializationContext context) --- End of inner exception stack trace --- at Volo.Abp.Modularity.ModuleManager.InitializeModulesAsync(ApplicationInitializationContext context) at Volo.Abp.AbpApplicationBase.InitializeModulesAsync() at Volo.Abp.AbpApplicationWithExternalServiceProvider.InitializeAsync(IServiceProvider serviceProvider) at Microsoft.AspNetCore.Builder.AbpApplicationBuilderExtensions.InitializeApplicationAsync(IApplicationBuilder app) at Doohlink.Program.Main(String[] args) in C:\dev\projects\Adzup\aspnet-core\src\Doohlink.HttpApi.Host\Program.cs:line 91

and here is how i configure my hangfire.

 private void ConfigureHangfire(ServiceConfigurationContext context, IConfiguration configuration)
    {
        context.Services.AddHangfire(config =>
        {
            config.UsePostgreSqlStorage(configuration.GetConnectionString("Default"),
                new PostgreSqlStorageOptions()
                {
                    DistributedLockTimeout = TimeSpan.FromMinutes(1)
                });
        });
    }

is this a bug?

  • ABP Framework version: v8.1.4

  • UI Type: Angular

  • Database System: EF Core ( PostgreSQL)

  • Tiered (for MVC) or Auth Server Separated (for Angular): yes

  • Exception message and full stack trace: [17:50:42 INF] fail: 11/16/2024 17:50:42.340 CoreEventId.SaveChangesFailed[10000] (Microsoft.EntityFrameworkCore.Update) An exception occurred in the database while saving changes for context type 'Doohlink.PlaylistManagement.EntityFrameworkCore.PlaylistManagementDbContext'. Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details. ---> Npgsql.PostgresException (0x80004005): 23503: insert or update on table "PlaylistManagementPlaylistFiles" violates foreign key constraint "FK_PlaylistManagementPlaylistFiles_PlaylistManagementFiles_Fil~"

    DETAIL: Key (FileId)=(3a1647cd-ead1-7bbc-8095-7c274e70176b) is not present in table "PlaylistManagementFiles".
    
  • Steps to reproduce the issue: Hello, I have a general question about data filtering. I have 3 tables in my database Playlist,File and PlaylistFile. you can see the entities and aggregate roots below.

File

public class File : AggregateRoot<Guid>, IMultiTenant, ISoftDelete
{
    public bool IsDeleted { get; protected set; }
    public Guid? TenantId { get; protected set; }

    public string Name { get; private set; }= null!;
    //rest of the code
}    

Playlist

public class Playlist : FullAuditedAggregateRoot<Guid>, IMultiTenant
{
    public Guid? TenantId { get; protected set; }
    public string Name { get; private set; } = null!;
    public string? Description { get; set; }
    //rest of the code    
    
}

PlaylistFile

public class PlaylistFile:CreationAuditedAggregateRoot<Guid>,ISoftDelete
{
    public bool IsDeleted { get; protected set; }
    public Guid PlaylistId { get; private set; }
    public Guid FileId { get; private set; }
    //rest of the code

}

so as you can see playlist and file is having imultitenant interface but since playlistfile belongs to two other table, i preferred to not make it imultitenat. The problem i am having is when i use separete db for a tenant. since PlaylistFile doesn't have imultitenant interface, when i use separate db for tenant even if the current tenant is the tenant with separate db connection string, it tries to insert it to the shared database. Here is an example from an app service.

    public async Task CreateBatchAsync(Guid playlistId, CreateOrUpdatePlaylistFilesDto input)
    {
        await _playlistRepository.GetAsync(playlistId);
        var newFileIds = input.FileIds.ToList();
        var playlistFiles = await _playlistFileManager.CreateBatchAsync(playlistId, newFileIds);
        foreach (var playlistFile in playlistFiles)
        {
            await _playlistFileRepository.InsertAsync(playlistFile);
        }
    }

in this code _playlistRepository is looking at the separate db since it has imultitenant interface but when i try to insert the records through _playlistFileRepository it takes the shared connection string. And i am getting exception since no fileid is present on the shared db. Is this common behavior? I know that i can give imultitenant interface to PlaylistFile aggregate root, but i do not prefer that since it is a table that will reflect the tenantid from their parent table. Is there any other way to fix it?

  • ABP Framework version: v8.1.4
  • UI Type: Angular
  • Database System: EF Core ( PostgreSQL.)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes
  • Exception message and full stack trace: StackExchange.Redis.RedisCommandException: Multi-key operations must involve a single slot; keys can use 'hash tags' to help this, i.e. '{/users/12345}/account' and '{/users/12345}/contacts' will always be in the same slot at StackExchange.Redis.ConnectionMultiplexer.PrepareToPushMessageToBridge[T](Message message, ResultProcessor1 processor, IResultBox1 resultBox, ServerEndPoint& server) in //src/StackExchange.Redis/ConnectionMultiplexer.cs:line 1966at StackExchange.Redis.ConnectionMultiplexer.TryPushMessageToBridgeAsync[T](Message message, ResultProcessor1 processor, IResultBox1 resultBox, ServerEndPoint& server) in //src/StackExchange.Redis/ConnectionMultiplexer.cs:line 2004 at StackExchange.Redis.ConnectionMultiplexer.ExecuteAsyncImpl[T](Message message, ResultProcessor1 processor, Object state, ServerEndPoint server) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 2182 at StackExchange.Redis.RedisBase.ExecuteAsync[T](Message message, ResultProcessor1 processor, ServerEndPoint server) in //src/StackExchange.Redis/RedisBase.cs:line 54at StackExchange.Redis.RedisDatabase.KeyDeleteAsync(RedisKey[] keys, CommandFlags flags) in //src/StackExchange.Redis/RedisDatabase.cs:line 769 at Volo.Abp.Caching.StackExchangeRedis.AbpRedisCache.RemoveManyAsync(IEnumerable1 keys, CancellationToken token) at Volo.Abp.Caching.DistributedCache2.<&gt;c__DisplayClass63_0.<g__RemoveRealCache|0&gt;d.MoveNext()
  • Steps to reproduce the issue: Create a redis cluster by using helm bitnami chart inside kubernetes environment. Give the redis connection string to your abp app to use this redis-cluster for distributed cache. Then try to change the database connection string and save. Then switch back to shared database. You will get the above error.

The Problem i am facing is related with redis cache. If you use Redis Cluster instead of single instance of redis, you are facing an issue that some values are remaining in redis cache or they are not the same with the values in db. This brings the unstable behavior in the application. To give an example. 1- Change Database Connection Strings for a tenant. 2- Then try to login with that tenant, it will use the new connection string. 3- Afterwards try to revert it back to shared database. 4- You will get the error and it is not going to delete it from redis cache. 5- Even in database it is using the shared database, it will still use the connection string, since it stayed in cache in that way.

ps: it can be also vice versa( from redis cache it is gonna come an empty connection strings while in db there are connection strings). So the point is cache not becoming stable with database.

/// <summary>
    /// Apply pending EF Core schema migrations to the database.
    /// Returns true if any migration has applied.
    /// </summary>
    protected virtual async Task<bool> MigrateDatabaseSchemaAsync(Guid? tenantId)
    {
        var result = false;
        Logger.LogError($"MigrateDatabaseSchemaAsync tenantId: {tenantId}");
        using (CurrentTenant.Change(tenantId))
        {
            using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: false))
            {
                async Task<bool> MigrateDatabaseSchemaWithDbContextAsync()
                {
                    var dbContext = await uow.ServiceProvider
                        .GetRequiredService<IDbContextProvider<TDbContext>>()
                        .GetDbContextAsync();

                    if ((await dbContext.Database.GetPendingMigrationsAsync()).Any())
                    {
                        await dbContext.Database.MigrateAsync();
                        Logger.LogError($"Migrated Database for tenant: {tenantId}");
                        return true;
                    }

                    return false;
                }
                Logger.LogError($"Starting migration for {tenantId}");
                if (tenantId == null)
                {
                    //Migrating the host database
                    Logger.LogInformation($"Migrating database of host. Database Name = {DatabaseName}");
                    Logger.LogError($"Migrating database of host. Database Name = {DatabaseName}");
                    result = await MigrateDatabaseSchemaWithDbContextAsync();
                }
                else
                {
                    var tenantConfiguration = await TenantStore.FindAsync(tenantId.Value);
                    Logger.LogError("Tenant Configuration: "+tenantConfiguration?.Name);
                    Logger.LogError("Connection string values: " + (tenantConfiguration?.ConnectionStrings?.Values != null ? string.Join(", ", tenantConfiguration.ConnectionStrings.Values) : "null"));
                    Logger.LogError($"Connections strings is null: {tenantConfiguration?.ConnectionStrings != null}");
                    Logger.LogError($"tenantConfiguration.ConnectionStrings.Default is null or whitespace: {tenantConfiguration?.ConnectionStrings?.Default.IsNullOrWhiteSpace()}");
                    Logger.LogError($"tenantConfiguration.ConnectionStrings.GetOrDefault is null or whitespace: {tenantConfiguration?.ConnectionStrings?.GetOrDefault(DatabaseName).IsNullOrWhiteSpace()}");
                    if (tenantConfiguration != null
                        && tenantConfiguration.ConnectionStrings != null
                        && (!tenantConfiguration.ConnectionStrings.Default.IsNullOrWhiteSpace() || !tenantConfiguration.ConnectionStrings.GetOrDefault(DatabaseName).IsNullOrWhiteSpace()))
                    {
                        //Migrating the tenant database (only if tenant has a separate database)
                        Logger.LogInformation($"Migrating separate database of tenant. Database Name = {DatabaseName}, TenantId = {tenantId}");
                        Logger.LogError($"Migrating separate database of tenant. Database Name = {DatabaseName}, TenantId = {tenantId}");
                        result = await MigrateDatabaseSchemaWithDbContextAsync();
                        Logger.LogError($"Migrated separate database of tenant. Database Name = {DatabaseName}, TenantId = {tenantId}");
                        Logger.LogError("Connection string values: " + (tenantConfiguration?.ConnectionStrings?.Values != null ? string.Join(", ", tenantConfiguration.ConnectionStrings.Values) : "null"));
                    }
                }

                await uow.CompleteAsync();
            }
        }

        return result;
    }

The tenant configuration here

var tenantConfiguration = await TenantStore.FindAsync(tenantId.Value);

is giving me an empty connection strings time to time even if connection strings are defined in my database. I fix this by changing it to a single instance of redis cache, but it could be nice to use redis-cluster for performance. if you want to try, you can use helm chart that is provided by bitnami from this link. https://github.com/bitnami/charts/tree/main/bitnami/redis-cluster

  • ABP Framework version: v8.1.4
  • UI Type: Angular
  • Database System: EF Core (PostgreSQL with pgbouncer)
  • Auth Server Separated (for Angular): yes

Hello. I didn't switch to abp studio. I still use abp cli for my app. But my application is deployed on Kubernetes Cluster on azure. I have some manifest files to deploy the application. What i wonder is, If i use abp studio, can i debug my app remotely from my local machine. Even if i do not use the helm charts that abp studio is produced? So i want to deploy my app as usual but use abp studio to debug it. Is it possible to do sth like that?

Showing 1 to 10 of 37 entries
Made with ❤️ on ABP v9.2.0-preview. Updated on February 17, 2025, 05:40