Hi,
When you open the D:\Packages\volo.abp.studio.extensions.standardsolutiontemplates
path in File Explorer, can you see any version folders, specifically 1.2.2?
When you open the D:\Packages\volo.abp.studio.extensions.standardsolutiontemplates
path in File Explorer, can you see any version folders, specifically 1.2.2? If you can't find a folder named volo.abp.studio.extensions.standardsolutiontemplates in D:\Packages
, probably you didn't set the NUGET_PACKAGES environment variable as explained here.
You can set it with the following PowerShell command.
setx /M NUGET_PACKAGES D:\Packages
If the issue still persists, the problem may be caused by the NuGet cache. You can clear it with this command:
dotnet nuget locals all --clear
Alternatively, you can manually download the extension using the command below:
nuget install Volo.Abp.Studio.Extensions.StandardSolutionTemplates -version 0.6.6 -source https://nuget.abp.io/[YOUR_API_KEY]/v3/index.json
Please replace
[YOUR_API_KEY]
with your actual API key, which you can find in yourNuGet.config
file.
Also, since your machine doesn’t have the .NET 9 SDK, please install it from the official Microsoft download page: https://dotnet.microsoft.com/en-us/download/dotnet/9.0
Hi,
It seems there is cache problem, can you try cleaning all the nuget cache and install abp suite standalone.
dotnet nuget locals all --clear
Install/update abp cli:
dotnet tool update --global Volo.Abp.Studio.Cli
Then try to open abp suite
abp suite
⚠️ Make sure you're logged in ABP CLI or ABP Studio. you can check if you're authenticated or not via following command:
abp login-info
If you're not logged in, use
abp login
command
Additionally, it is expected that solutions cannot be created on Suite. You can now use ABP Studio to create new solutions after the prerequisites have been installed. See more: https://abp.io/docs/latest/get-started
Thanks for the follow-up — and enjoy your holiday!
You're right, we can't control how users organize their files, and your case clearly highlights that. We'll look into making this part more fault-tolerant, as you suggested. For now, no need to inspect your system — your explanation is already very helpful.
Thanks again!
Thank you for your feedback.
Actually, this behavior is the result of a design decision. ABP Studio relies on certain conventions and file/folder structures when opening a solution. This may feel strict, but it allows Studio to provide a consistent and automated experience across different setups.
We can think of it like how project references work in .csproj
files. You can add a reference to another project, but if the file path is incorrect or that project is later moved or renamed, the build will fail. Similarly, Studio needs to resolve some paths and metadata correctly to function as expected — otherwise, it may not behave reliably.
That said, your feedback is valid, and we’ll consider how we can improve Studio’s resilience in future versions.
In the meantime, you can try deleting the **.abpsln, **.abpmdl, and **.abppkg files in the project and reinitializing the project from the toolbar. Just remember to back up your project before doing so.
Hello, does the problem occur only in a specific solution, or are you also unable to open newly created solutions afterward?
Hello,
Sorry for the late reply — it was delayed due to public holidays.
I was not able to reproduce the issue on macOS, but I have observed the terminal opening problem a few times on Windows when running a service. I will open an internal issue to track this.
Ek olarak, tek Web servisinide çalıştırmayı denedim; uygulama hemen “Application shutting down… Exited with code: 1” hatası verip kapanıyor. Bu “exited with code: 1” durumu loglarda hiçbir detaylı hata ya da stack trace göstermiyor; starting loading şkelind ekalıyor ve abp studioyu kapatmadan durduramıyorum.
If you could share the log records related to the service not starting when you run it individually, it might help us better understand the problem. Also, when you right-click and try to stop the service, I assume it does not stop either — is that correct?
When I tried to reproduce the issues using the information you provided, I was not able to reproduce them. However, if possible, please share your solution via email at support@abp.io, including your ticket number. This will help us investigate the issue more effectively and provide a quicker resolution.
Best regards, Berkan Şaşmaz
Hello,
Could you please provide more details so that we can reproduce the issue? For example:
You can access solution configuration like below:
These informations will help us investigate the problem more effectively.
Best regards,
Berkan Şaşmaz
Developer Advocate
https://www.berkansasmaz.com
As a result of our meeting, I am sharing the code blocks you requested below:
OpenIdConnect Configuration:
context.Services.AddAuthentication().AddOpenIdConnect();
context.Services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.Authority = configuration["AzureAd:Instance"];
options.ClientId = configuration["AzureAd:ClientId"];
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.CallbackPath = configuration["AzureAd:CallbackPath"];
options.ClientSecret = configuration["AzureAd:ClientSecret"];
options.RequireHttpsMetadata = false;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.SignInScheme = IdentityConstants.ExternalScheme;
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = redirectContext =>
{
redirectContext.ProtocolMessage.Prompt = "login";
return Task.CompletedTask;
}
};
options.Scope.Add("email");
options.Scope.Add("openid");
options.Scope.Add("offline_access");
options.Scope.Add("profile");
options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "sub");
});
Custom register model to create user automatically:
[ExposeServices(typeof(RegisterModel))]
public class MyRegisterModel : RegisterModel
{
public MyRegisterModel(IAuthenticationSchemeProvider schemeProvider, IOptions<AbpAccountOptions> accountOptions, IAccountExternalProviderAppService accountExternalProviderAppService, ICurrentPrincipalAccessor currentPrincipalAccessor, IHttpClientFactory httpClientFactory) : base(schemeProvider, accountOptions, accountExternalProviderAppService, currentPrincipalAccessor, httpClientFactory)
{
}
public override async Task<IActionResult> OnGetAsync()
{
ExternalProviders = await GetExternalProviders();
if (!await CheckSelfRegistrationAsync())
{
if (IsExternalLoginOnly)
{
return await OnPostExternalLogin(ExternalLoginScheme);
}
Alerts.Warning(L["SelfRegistrationDisabledMessage"]);
return Page();
}
if (IsExternalLogin)
{
var externalLoginInfo = await SignInManager.GetExternalLoginInfoAsync();
if (externalLoginInfo == null)
{
Logger.LogWarning("External login info is not available");
return RedirectToPage("./Login");
}
var identity = externalLoginInfo.Principal.Identities.First();
var emailClaim = identity.FindFirst(AbpClaimTypes.Email) ?? identity.FindFirst(ClaimTypes.Email);
if (emailClaim == null)
{
throw new AbpException("Could not find an email address for the user from the external login info!");
}
var userName = await UserManager.GetUserNameFromEmailAsync(emailClaim.Value);
var user = await RegisterExternalUserAsync(externalLoginInfo,userName, emailClaim.Value);
await SignInManager.SignInAsync(user, isPersistent: true, authenticationMethod: ExternalLoginScheme);
// Clear the dynamic claims cache.
await IdentityDynamicClaimsPrincipalContributorCache.ClearAsync(user.Id, user.TenantId);
return Redirect(ReturnUrl ?? "/");
}
Alerts.Warning(L["SelfRegistrationDisabledMessage"]);
return Page();
}
}
Disable local login in appsettings.json:
"Settings": {
"Abp.Account.EnableLocalLogin":false
}
Note: After adding this setting, if it does not appear as false when you start the application, it is because the value stored in the database overrides the one in the appsettings. If you create a new database from scratch, the value in the appsettings will be used since there will be no conflicting setting in the database.
If you have no further questions on the subject, can I close the ticket?