From a6f5c1b6cdf24ad27a062eb2ba71beef574faff7 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Mon, 3 Feb 2025 10:54:47 +0300 Subject: [PATCH 01/37] update: handling `access_token` event changes on multiple tabs --- .../src/lib/services/local-storage-listener.service.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/local-storage-listener.service.ts b/npm/ng-packs/packages/core/src/lib/services/local-storage-listener.service.ts index 67231f5e85..4920e7fa0e 100644 --- a/npm/ng-packs/packages/core/src/lib/services/local-storage-listener.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/local-storage-listener.service.ts @@ -1,6 +1,5 @@ import { DOCUMENT } from '@angular/common'; import { Injectable, inject } from '@angular/core'; - @Injectable({ providedIn: 'root', }) @@ -9,8 +8,13 @@ export class LocalStorageListenerService { constructor() { this.window.addEventListener('storage', event => { - if (event.key === 'access_token' && event.newValue === null) { - this.window.location.reload(); + if (event.key === 'access_token') { + const tokenRemoved = event.newValue === null; + const tokenAdded = event.oldValue === null && event.newValue !== null; + + if (tokenRemoved || tokenAdded) { + this.window.location.assign('/'); + } } }); } From 0c17d379ef9cb00de6fac7404a1bff6957e914d0 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 3 Feb 2025 16:15:56 +0800 Subject: [PATCH 02/37] Add "alternative words" to filter items in docs --- docs/en/docs-nav.json | 3 ++- .../Volo/Docs/Documents/NavigationNode.cs | 3 +++ .../Documents/TagHelpers/TreeTagHelper.cs | 6 ++++-- .../Pages/Documents/Project/index.js | 20 ++++++++++++------- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 8ca147a3db..e6b98971b7 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -487,7 +487,8 @@ }, { "text": "Exception Handling", - "path": "framework/fundamentals/exception-handling.md" + "path": "framework/fundamentals/exception-handling.md", + "keywords": ["error"] }, { "text": "Localization", diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs index f19b9f41df..015f711850 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs @@ -21,6 +21,9 @@ namespace Volo.Docs.Documents [JsonPropertyName("isIndex")] public bool IsIndex { get; set; } + + [JsonPropertyName("keywords")] + public string[] Keywords { get; set; } public bool IsLeaf => !HasChildItems; diff --git a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs index e6c75d0161..10fa5b0002 100644 --- a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs +++ b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.AspNetCore.Razor.TagHelpers; @@ -23,7 +24,7 @@ namespace Volo.Docs.Areas.Documents.TagHelpers private const string LiItemTemplateWithLink = @"
  • {2}{3}
  • "; - private const string ListItemAnchor = @"{2}"; + private const string ListItemAnchor = @"{3}"; private const string ListItemSpan = @"{1}"; @@ -155,7 +156,8 @@ namespace Volo.Docs.Areas.Documents.TagHelpers sb.Clear(); - listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path), textCss, + var dataKeywords = node.Keywords.IsNullOrEmpty() ? "" : "data-keywords=\"" + node.Keywords.JoinAsString(",") + "\""; + listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path), dataKeywords ,textCss, node.Text.IsNullOrEmpty() ? "?" : sb.Append(node.Text).Append(badgeStringBuilder.ToString()).ToString()); diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js index 6636787f33..763f6ac667 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js @@ -29,7 +29,8 @@ var doc = doc || {}; var $ul = $(``); var $li = $(`
  • `); - $li.append(` ${node.text}`) + var dataKeywords = node.keywords ? `data-keywords="${node.keywords}"` : ""; + $li.append(` ${node.text}`) if(node.isLazyExpandable){ $li.addClass("lazy-expand"); @@ -111,12 +112,17 @@ var doc = doc || {}; var filteredItems = $navigation .find('li > a') .filter(function () { - return ( - $(this) - .text() - .toUpperCase() - .indexOf(filterText.toUpperCase()) > -1 - ); + var keywords = ($(this).data('keywords') ?? "").split(","); + var text = $(this).text(); + + if(text.toUpperCase().indexOf(filterText.toUpperCase()) > -1) + { + return true; + } + + return keywords.some(function(keyword){ + return keyword.toUpperCase().indexOf(filterText.toUpperCase()) > -1; + }); }); filteredItems.each(function () { From 7688be9588293fbf6affad7230c94c113f1f3d7e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 3 Feb 2025 16:19:57 +0800 Subject: [PATCH 03/37] Update TreeTagHelper.cs --- .../Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs index 10fa5b0002..3aa9b85777 100644 --- a/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs +++ b/modules/docs/src/Volo.Docs.Web/Areas/Documents/TagHelpers/TreeTagHelper.cs @@ -156,8 +156,8 @@ namespace Volo.Docs.Areas.Documents.TagHelpers sb.Clear(); - var dataKeywords = node.Keywords.IsNullOrEmpty() ? "" : "data-keywords=\"" + node.Keywords.JoinAsString(",") + "\""; - listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path), dataKeywords ,textCss, + var additionalAttributes = node.Keywords.IsNullOrEmpty() ? "" : "data-keywords=\"" + node.Keywords.JoinAsString(",") + "\""; + listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path), additionalAttributes ,textCss, node.Text.IsNullOrEmpty() ? "?" : sb.Append(node.Text).Append(badgeStringBuilder.ToString()).ToString()); From f9a2fecc156dcd47ab03ff6646cdd1b8af62b9c6 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 3 Feb 2025 16:23:37 +0800 Subject: [PATCH 04/37] Update docs-nav.json --- docs/en/docs-nav.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index e6b98971b7..85d2546b58 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -488,7 +488,7 @@ { "text": "Exception Handling", "path": "framework/fundamentals/exception-handling.md", - "keywords": ["error"] + "keywords": ["Error"] }, { "text": "Localization", From b56c14b3273ad0054f148eebc665d0781735a682 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 5 Feb 2025 13:37:09 +0800 Subject: [PATCH 05/37] Update index.js --- modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js index 763f6ac667..23eca169b5 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js @@ -112,7 +112,7 @@ var doc = doc || {}; var filteredItems = $navigation .find('li > a') .filter(function () { - var keywords = ($(this).data('keywords') ?? "").split(","); + var keywords = ($(this).data('keywords') || "").split(","); var text = $(this).text(); if(text.toUpperCase().indexOf(filterText.toUpperCase()) > -1) From 5a1384844dbe883d7f11574c06d3cea9a52b67bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:09:00 +0300 Subject: [PATCH 06/37] Update Post.md --- .../2023-11-06-Blazor-Fullstack-Web-Ui/Post.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md index c1c38d7818..5c1b03701e 100644 --- a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md +++ b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md @@ -1,8 +1,5 @@ # Blazor's History and Full-stack Web UI -![Cover Image](cover-image.png) - - Blazor is a web framework that allows developers to build interactive web applications using .NET instead of JavaScript. The first version of Blazor was released on May 14, 2020. Since its initial release, Blazor has evolved with the new versions. Until now, six different versions have been declared. Sometimes, it can be not very clear to see the differences between these approaches. First, let's try to understand these. * **Blazor-Server**: >> *Loads fast at first* >> In this version, heavy things are done in the server. Browsers are thin clients and download a small page for the first load. The page updates are done via SignalR connection. This was released with .NET Core 3. From e8d3a0d525ae938af62cc8af65f5770c0972706e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:26:54 +0300 Subject: [PATCH 07/37] Update Post.md --- .../Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md b/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md index a45f893b16..c6a37d85cd 100644 --- a/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md +++ b/docs/en/Community-Articles/2024-01-15-Abp-Supports-NET8/Post.md @@ -1,5 +1,3 @@ -![cover](cover.png) - # ABP Now Supports .NET 8 Recently we have published ABP v8.0. With this version [the ABP Framework](https://github.com/abpframework/abp/blob/dev/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj#L6) and ABP Commercial both supports for .NET 8, aligning itself with the latest enhancements and new features of the ASP.NET's new version 8. @@ -170,4 +168,4 @@ Starting in .NET 8, C# Hot Reload [supports modifying generic types and generic *References:* -* https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8 \ No newline at end of file +* https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8 From 0b160410b0baf117a4cdf65f92331169ba0271f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:30:52 +0300 Subject: [PATCH 08/37] Update POST.md --- .../2024-08-28-Understanding-AOT-vs-JIT/POST.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md index 295b509029..cd4c3177a1 100644 --- a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md +++ b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md @@ -1,7 +1,3 @@ - - -![book](images/cover.png) - Ahead-of-Time (AOT) compilation and Just-in-Time (JIT) compilation are two different methods for compiling Angular applications. Here's a breakdown of the differences between them: ### **Ahead-of-Time (AOT) Compilation** @@ -61,4 +57,4 @@ Ahead-of-Time (AOT) compilation and Just-in-Time (JIT) compilation are two diffe ### **Best Practices:** - **Use AOT** for production builds to ensure faster load times, smaller bundle sizes, and more secure applications. -- **Use JIT** during development to take advantage of quicker builds and easier debugging. \ No newline at end of file +- **Use JIT** during development to take advantage of quicker builds and easier debugging. From c7d3dbef50c07377776de02c0112796030ece34d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:32:35 +0300 Subject: [PATCH 09/37] Update Post.md --- .../2024-08-29-What-is-Angular-Schematics/Post.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md index c13c5ab345..5ea6cb6528 100644 --- a/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md +++ b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md @@ -1,7 +1,5 @@ # What is Angular Schematics? -![Cover Image](cover.png) - **Angular Schematics** is a powerful tool which is part of the Angular CLI that allows developers to automate various development tasks by **generating and modifying code**. Schematics provides a way to create **templates and boilerplate code** for Angular applications or libraries, enabling consistency and reducing the amount of repetitive work. ### Key Concepts of Angular Schematics: @@ -82,4 +80,4 @@ Here are the direct links for the Angular Schematics resources: ### Conclusion: -Angular Schematics is a powerful tool for automating repetitive tasks, generating consistent code, and managing project upgrades. By leveraging schematics, Angular developers can save time, reduce errors, and enforce best practices across their projects. \ No newline at end of file +Angular Schematics is a powerful tool for automating repetitive tasks, generating consistent code, and managing project upgrades. By leveraging schematics, Angular developers can save time, reduce errors, and enforce best practices across their projects. From a545147d1ca2a3f3013605668442585efc2150d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:33:58 +0300 Subject: [PATCH 10/37] Update Post.md --- .../2024-09-01-Do-You-Need-MultiTenancy/Post.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md index b80917f4c4..a294a1f2e6 100644 --- a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md +++ b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md @@ -2,8 +2,6 @@ This article discusses whether you need a multi-tenancy architecture for your next project. Answer my critical questions to decide if multi-tenancy suits your application or not! -![Cover image](cover.png) - ## What’s Multi-tenancy? It’s an architectural approach to building SaaS solutions. In this model, the hardware and software resources are shared between tenants, and application data is virtually or physically isolated between tenants. Here, **the main goal is minimizing costs and maximizing customer count**. From c10f7ba38a78bc3e8d28a90c47f3890a105ef6b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:39:00 +0300 Subject: [PATCH 11/37] Update post.md --- .../Community-Articles/2024-09-18-Blazor-9-New-Features/post.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md index bc73c13210..1d78b493e4 100644 --- a/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md +++ b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md @@ -2,8 +2,6 @@ In this article, I'll highlight .NET 9's Blazor updates and important features for ASP.NET Core 9.0. These features are based on the latest .NET 9 Preview 7. -![Cover](cover.png) - ## .NET MAUI Blazor Hybrid App and Web App solution template There's a new solution template to create .**NET MAUI native** and **Blazor web client** apps. This new template allows to choose a Blazor interactive render mode, it uses a shared Razor class library to maintain the UI's Razor components. From 1f2330643e5e9c72674227f842d24380187e1334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:39:43 +0300 Subject: [PATCH 12/37] Update post.md --- .../post.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/en/Community-Articles/2024-09-24-Angular-Difference-Btw-Promise-Observable/post.md b/docs/en/Community-Articles/2024-09-24-Angular-Difference-Btw-Promise-Observable/post.md index 39d722a293..9f8ae4c9d7 100644 --- a/docs/en/Community-Articles/2024-09-24-Angular-Difference-Btw-Promise-Observable/post.md +++ b/docs/en/Community-Articles/2024-09-24-Angular-Difference-Btw-Promise-Observable/post.md @@ -2,10 +2,6 @@ In this article, I will mention the differences between `Promise` and `Observable` . They are used in TypeScript (Angular) for handling async operations but have different use cases and behaviors. Let's see these six differences... -![Cover](cover.png) - - - ## 1. Eager or Lazy Evaluation - **Promise**: A `promise` is **eager**! This means that as soon as a `promise` is created, it executes the operation, like initiating immediately an HTTP request. **You can't control the execution start time; it begins right away!** From 62f86449090aa01600ceec19a33edbe8ae92ac10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:41:21 +0300 Subject: [PATCH 13/37] Update Post.md --- .../2024-10-01-SignalR-9-New-Features/Post.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/Post.md b/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/Post.md index c004d45eba..c92e38f764 100644 --- a/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/Post.md +++ b/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/Post.md @@ -1,11 +1,6 @@ ### ASP.NET Core SignalR New Features — Summary - In this article, I’ll highlight the latest .**NET 9 SignalR updates** for ASP.NET Core 9.0. -![Cover](cover.png) - - - ### SignalR Hub Accepts Base Classes SignalR `Hub` class can now get a base class of a polymorphic class. As you see in the example below, I can send `Animal` to `Process` method. Before .NET 9, we could only pass the derived classes: `Cat` and `Dog`. From 515ff17f669372cd3fe161117d02d02c14aee677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:42:27 +0300 Subject: [PATCH 14/37] Update Post.md --- .../2024-10-09-NET9-Performance-Improvements/Post.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/en/Community-Articles/2024-10-09-NET9-Performance-Improvements/Post.md b/docs/en/Community-Articles/2024-10-09-NET9-Performance-Improvements/Post.md index 67e451f0df..4710cc0a99 100644 --- a/docs/en/Community-Articles/2024-10-09-NET9-Performance-Improvements/Post.md +++ b/docs/en/Community-Articles/2024-10-09-NET9-Performance-Improvements/Post.md @@ -2,8 +2,6 @@ With every release, .NET becomes faster & faster! You get these improvements for free by just updating your project to the latest .NET! -![Cover Image](cover.png) - It’s very interesting that **20% of these improvements** are implemented by **open-source volunteers** rather than Microsoft employees. These improvements mostly focus on cloud-native and high-throughput applications. I’ll briefly list them below. ![From Microsoft Blog Post](cited-from-microsoft-blog-post.png) From 14ac2ee70cd949c57409386cfbdad8618f783a29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:43:28 +0300 Subject: [PATCH 15/37] Update Post.md --- .../2024-10-09-Cookies-vs-Local-Storage/Post.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/en/Community-Articles/2024-10-09-Cookies-vs-Local-Storage/Post.md b/docs/en/Community-Articles/2024-10-09-Cookies-vs-Local-Storage/Post.md index bac7f69596..b7122253ab 100644 --- a/docs/en/Community-Articles/2024-10-09-Cookies-vs-Local-Storage/Post.md +++ b/docs/en/Community-Articles/2024-10-09-Cookies-vs-Local-Storage/Post.md @@ -1,9 +1,5 @@ # When to Use Cookies, When to Use Local Storage? -![cover](cover.png) - - - ## Cookies vs Local Storage When you want to save client-side data on browsers, you can use `Cookies` or `Local Storage` of the browser. While these methods look similar, they have different behaviors. You need to decide based on the specific use-case, security concerns and the data size being stored. I'll clarify the differences between these methods. @@ -60,4 +56,4 @@ When you want to save client-side data on browsers, you can use `Cookies` or `Lo In many cases, you might use both cookies and local storage, depending on the specific requirements of different parts of your application. There are also other places where you can store the client-side data. You can check out [this article](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage) for more information. -Happy coding 🧑🏽‍💻 \ No newline at end of file +Happy coding 🧑🏽‍💻 From 135cf2a40ede7baf9dadbb4935a5ff2e3e03dc6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:44:38 +0300 Subject: [PATCH 16/37] Update post.md --- .../en/Community-Articles/2024-10-23-Abp-Net9-Upgrade/post.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/en/Community-Articles/2024-10-23-Abp-Net9-Upgrade/post.md b/docs/en/Community-Articles/2024-10-23-Abp-Net9-Upgrade/post.md index 2a75a97df3..bc8bd691b5 100644 --- a/docs/en/Community-Articles/2024-10-23-Abp-Net9-Upgrade/post.md +++ b/docs/en/Community-Articles/2024-10-23-Abp-Net9-Upgrade/post.md @@ -1,9 +1,5 @@ # ABP Now Supports .NET 9 -![Cover image](cover.png) - - - **.NET 9.0.100-rc.2** has been released on **October 8, 2024**. To align with the latest .NET, we also released the ABP Platform [9.0.0-rc.1](https://github.com/abpframework/abp/releases/tag/9.0.0-rc.1) version. **With this release, ABP now supports .NET 9.** From ed6681edd301d391a37c11a2c547fbfafd4b6793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:45:34 +0300 Subject: [PATCH 17/37] Update post.md --- .../2024-11-13-BuiltIn-OpenApi-Documentation/post.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/en/Community-Articles/2024-11-13-BuiltIn-OpenApi-Documentation/post.md b/docs/en/Community-Articles/2024-11-13-BuiltIn-OpenApi-Documentation/post.md index 3e950c38c0..f257577ac2 100644 --- a/docs/en/Community-Articles/2024-11-13-BuiltIn-OpenApi-Documentation/post.md +++ b/docs/en/Community-Articles/2024-11-13-BuiltIn-OpenApi-Documentation/post.md @@ -1,8 +1,6 @@ Built-in OpenAPI Document Generation with .NET 9 — No more SwaggerUI! 👋 ======================================================================== -![Cover](cover.png) - What’s Swagger UI? ------------------ From 773bf300276f05ac721ba110537812276003a1ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:50:04 +0300 Subject: [PATCH 18/37] Update background-jobs-vs-background-workers.md --- .../background-jobs-vs-background-workers.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/en/Community-Articles/2025-01-03-ABP-Background-Workers-vs-Jobs/background-jobs-vs-background-workers.md b/docs/en/Community-Articles/2025-01-03-ABP-Background-Workers-vs-Jobs/background-jobs-vs-background-workers.md index 5677b74335..43a3c3a813 100644 --- a/docs/en/Community-Articles/2025-01-03-ABP-Background-Workers-vs-Jobs/background-jobs-vs-background-workers.md +++ b/docs/en/Community-Articles/2025-01-03-ABP-Background-Workers-vs-Jobs/background-jobs-vs-background-workers.md @@ -1,7 +1,5 @@ # ABP Framework: Background Jobs vs Background Workers — When to Use Which? -![cover](cover.png) - In the ABP Framework, **Background Jobs** and **Background Workers** serve different purposes but can sometimes seem interchangeable. Sometimes it can be confusing. Let’s clarify their differences, and I'll show you some real-world cases to help you understand how to decide between these two. We have official documents for these: 📕 **Background Workers ABP Document** https://abp.io/docs/latest/framework/infrastructure/background-workers From 1bb1d02bcd4e4372766a5cfa2e663705c5f58432 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Wed, 5 Feb 2025 16:22:58 +0300 Subject: [PATCH 19/37] update: add missing localizations --- .../src/lib/components/permission-management.component.html | 2 +- .../email-setting-group/email-setting-group.component.html | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html index a2cf136c7b..7470c3e772 100644 --- a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html +++ b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html @@ -40,7 +40,7 @@
    - {{ 'Permission Group' }} + {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}
    diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html index bc944af045..be97948a93 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html +++ b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html @@ -131,9 +131,11 @@ formName="emailTestForm" [disabled]="emailTestForm.invalid && emailTestForm.dirty" > - {{ 'AbpTenantManagement::Send' | abpLocalization }} + {{ 'AbpSettingManagement::Send' | abpLocalization }} - + From 1353490217341217186ad82722652c5cd0bf6420 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Wed, 5 Feb 2025 16:23:21 +0300 Subject: [PATCH 20/37] update: add missing localization for `TenantId` --- .../Volo/Abp/AuditLogging/Localization/ar.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/cs.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/de-DE.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/de.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/en.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/es.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/fi.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/fr.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/hi.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/hr.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/hu.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/is.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/it.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/nl.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/pl-PL.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/pt-BR.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/ro-RO.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/ru.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/sk.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/sl.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/sv.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/tr.json | 5 +++-- .../Volo/Abp/AuditLogging/Localization/vi.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/zh-Hans.json | 3 ++- .../Volo/Abp/AuditLogging/Localization/zh-Hant.json | 3 ++- 25 files changed, 51 insertions(+), 26 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ar.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ar.json index 1f6d8fd608..3b94f7f834 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ar.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ar.json @@ -78,6 +78,7 @@ "EndDate": "تاريخ الانتهاء", "Feature:AuditLoggingGroup": "تدوين التسجيل", "Feature:AuditLoggingEnable": "تمكين صفحة تسجيل التدقيق", - "Feature:AuditLoggingEnableDescription": "تفعيل صفحة تسجيل التدقيق في التطبيق." + "Feature:AuditLoggingEnableDescription": "تفعيل صفحة تسجيل التدقيق في التطبيق.", + "TenantId": "معرف المستأجر" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/cs.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/cs.json index 0804c7e734..ceeb244fc8 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/cs.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/cs.json @@ -78,6 +78,7 @@ "EndDate": "Datum ukončení", "Feature:AuditLoggingGroup": "Protokolování auditu", "Feature:AuditLoggingEnable": "Povolena stránka protokolování auditu", - "Feature:AuditLoggingEnableDescription": "Povolit stránku protokolování auditu v aplikaci." + "Feature:AuditLoggingEnableDescription": "Povolit stránku protokolování auditu v aplikaci.", + "TenantId": "ID nájemce" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/de-DE.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/de-DE.json index 138f7a04e2..75e5c251c3 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/de-DE.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/de-DE.json @@ -77,6 +77,7 @@ "EndDate": "Endtermin", "Feature:AuditLoggingGroup": "Audit-Protokollierung", "Feature:AuditLoggingEnable": "Aktivieren Sie die Überwachungsprotokollseite", - "Feature:AuditLoggingEnableDescription": "Aktivieren Sie die Überwachungsprotokollseite in der App." + "Feature:AuditLoggingEnableDescription": "Aktivieren Sie die Überwachungsprotokollseite in der App.", + "TenantId": "Mandanten-ID" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/de.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/de.json index 9b229eb182..2f3152fca5 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/de.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/de.json @@ -78,6 +78,7 @@ "EndDate": "Endtermin", "Feature:AuditLoggingGroup": "Audit-Protokollierung", "Feature:AuditLoggingEnable": "Aktivierte Audit-Logging-Seite", - "Feature:AuditLoggingEnableDescription": "Aktivieren Sie die Audit-Logging-Seite in der Anwendung." + "Feature:AuditLoggingEnableDescription": "Aktivieren Sie die Audit-Logging-Seite in der Anwendung.", + "TenantId": "Mandanten-ID" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/en.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/en.json index d4b3ef586c..fa7596e898 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/en.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/en.json @@ -93,6 +93,7 @@ "DisplayName:ExpiredDeleterPeriod": "Expired item deletion period", "Description:ExpiredDeleterPeriod": "Set the number of days after which expired items will be automatically deleted.", "ExpiredDeleterPeriodUnit": "day(s)", - "AuditLogsBeforeXWillBeDeleted": "Audit logs before {0} will be deleted." + "AuditLogsBeforeXWillBeDeleted": "Audit logs before {0} will be deleted.", + "TenantId": "Tenant Id" } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/es.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/es.json index 0e7ce7a37f..1227e0bc08 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/es.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/es.json @@ -78,6 +78,7 @@ "EndDate": "Fecha final", "Feature:AuditLoggingGroup": "Registros de auditoría", "Feature:AuditLoggingEnable": "Habilitar la página de registro de auditoría", - "Feature:AuditLoggingEnableDescription": "Habilite la página de registro de auditoría en la aplicación." + "Feature:AuditLoggingEnableDescription": "Habilite la página de registro de auditoría en la aplicación.", + "TenantId": "ID de inquilino" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/fi.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/fi.json index 285cc214e1..9870d85155 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/fi.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/fi.json @@ -78,6 +78,7 @@ "EndDate": "Päättymispäivä", "Feature:AuditLoggingGroup": "Tarkastusten kirjaaminen", "Feature:AuditLoggingEnable": "Aktivoi auditointilokisivu", - "Feature:AuditLoggingEnableDescription": "Ota käyttöön tarkastuksen kirjaussivu sovelluksessa." + "Feature:AuditLoggingEnableDescription": "Ota käyttöön tarkastuksen kirjaussivu sovelluksessa.", + "TenantId": "Vuokralaisen tunnus" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/fr.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/fr.json index 228a3ad788..ced0d637c9 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/fr.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/fr.json @@ -78,6 +78,7 @@ "EndDate": "Date de fin", "Feature:AuditLoggingGroup": "Journalisation d'audit", "Feature:AuditLoggingEnable": "Page de journalisation d'audit activée", - "Feature:AuditLoggingEnableDescription": "Activez la page de journalisation d'audit dans l'application." + "Feature:AuditLoggingEnableDescription": "Activez la page de journalisation d'audit dans l'application.", + "TenantId": "ID du locataire" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hi.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hi.json index 10dbb7cf10..7c6a4b5587 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hi.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hi.json @@ -78,6 +78,7 @@ "EndDate": "समाप्ति तिथि", "Feature:AuditLoggingGroup": "ऑडिट लॉगिंग", "Feature:AuditLoggingEnable": "सक्षम ऑडिट लॉगिंग पृष्ठ", - "Feature:AuditLoggingEnableDescription": "एप्लिकेशन में ऑडिट लॉगिंग पृष्ठ सक्षम करें।" + "Feature:AuditLoggingEnableDescription": "एप्लिकेशन में ऑडिट लॉगिंग पृष्ठ सक्षम करें।", + "TenantId": "किरायेदार आईडी" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hr.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hr.json index 587efee335..ec6028c6a8 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hr.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hr.json @@ -78,6 +78,7 @@ "EndDate": "Datum završetka", "Feature:AuditLoggingGroup": "Zapisivanje revizije", "Feature:AuditLoggingEnable": "Omogućena stranica za bilježenje revizije", - "Feature:AuditLoggingEnableDescription": "Omogućite stranicu za bilježenje revizije u aplikaciji." + "Feature:AuditLoggingEnableDescription": "Omogućite stranicu za bilježenje revizije u aplikaciji.", + "TenantId": "ID stanara" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hu.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hu.json index 0812acfb37..1122431190 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hu.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/hu.json @@ -78,6 +78,7 @@ "EndDate": "Befejezés dátuma", "Feature:AuditLoggingGroup": "Audit naplózás", "Feature:AuditLoggingEnable": "Engedélyezett naplózási oldal", - "Feature:AuditLoggingEnableDescription": "Engedélyezze a naplózási oldalt az alkalmazásban." + "Feature:AuditLoggingEnableDescription": "Engedélyezze a naplózási oldalt az alkalmazásban.", + "TenantId": "Bérlő azonosító" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/is.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/is.json index 3175bfe492..cdf1217b36 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/is.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/is.json @@ -78,6 +78,7 @@ "EndDate": "Loka dagsetning", "Feature:AuditLoggingGroup": "Endurskoðunarskráning", "Feature:AuditLoggingEnable": "Virkjað endurskoðunarskráningarsíða", - "Feature:AuditLoggingEnableDescription": "Virkjaðu endurskoðunarskráningarsíðu í forritinu." + "Feature:AuditLoggingEnableDescription": "Virkjaðu endurskoðunarskráningarsíðu í forritinu.", + "TenantId": "Leigutakaauðkenni" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/it.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/it.json index 1a434abadc..1a7823908a 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/it.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/it.json @@ -78,6 +78,7 @@ "EndDate": "Data di fine", "Feature:AuditLoggingGroup": "Registrazione di controllo", "Feature:AuditLoggingEnable": "Pagina di registrazione di controllo abilitata", - "Feature:AuditLoggingEnableDescription": "Abilita la pagina di registrazione dell'audit nell'applicazione." + "Feature:AuditLoggingEnableDescription": "Abilita la pagina di registrazione dell'audit nell'applicazione.", + "TenantId": "ID inquilino" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/nl.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/nl.json index b8b218ca2d..6500e216b6 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/nl.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/nl.json @@ -78,6 +78,7 @@ "EndDate": "Einddatum", "Feature:AuditLoggingGroup": "Auditregistratie", "Feature:AuditLoggingEnable": "Pagina voor auditregistratie ingeschakeld", - "Feature:AuditLoggingEnableDescription": "Schakel de auditlogboekpagina in de applicatie in." + "Feature:AuditLoggingEnableDescription": "Schakel de auditlogboekpagina in de applicatie in.", + "TenantId": "Huurder-ID" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/pl-PL.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/pl-PL.json index 179e5f4f98..bbbc627b98 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/pl-PL.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/pl-PL.json @@ -78,6 +78,7 @@ "EndDate": "Data końcowa", "Feature:AuditLoggingGroup": "Rejestrowanie audytu", "Feature:AuditLoggingEnable": "Włączono stronę rejestrowania audytu", - "Feature:AuditLoggingEnableDescription": "Włącz stronę rejestrowania audytu w aplikacji." + "Feature:AuditLoggingEnableDescription": "Włącz stronę rejestrowania audytu w aplikacji.", + "TenantId": "Identyfikator najemcy" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/pt-BR.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/pt-BR.json index 9173d3cdd4..8e5557e442 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/pt-BR.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/pt-BR.json @@ -78,6 +78,7 @@ "EndDate": "Data final", "Feature:AuditLoggingGroup": "Registro de auditoria", "Feature:AuditLoggingEnable": "Página de registro de auditoria habilitada", - "Feature:AuditLoggingEnableDescription": "Habilite a página de registro de auditoria no aplicativo." + "Feature:AuditLoggingEnableDescription": "Habilite a página de registro de auditoria no aplicativo.", + "TenantId": "ID do inquilino" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ro-RO.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ro-RO.json index 9f079420eb..73da32a928 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ro-RO.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ro-RO.json @@ -78,6 +78,7 @@ "EndDate": "Data de încheiere", "Feature:AuditLoggingGroup": "Înregistrare de audit", "Feature:AuditLoggingEnable": "Pagina de înregistrare a auditului activată", - "Feature:AuditLoggingEnableDescription": "Activați pagina de înregistrare a auditului în aplicație." + "Feature:AuditLoggingEnableDescription": "Activați pagina de înregistrare a auditului în aplicație.", + "TenantId": "ID chiriaș" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ru.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ru.json index f06719e4b2..9dba5121ce 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ru.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/ru.json @@ -78,6 +78,7 @@ "EndDate": "Дата окончания", "Feature:AuditLoggingGroup": "Ведение журнала аудита", "Feature:AuditLoggingEnable": "Включенная страница ведения журнала аудита", - "Feature:AuditLoggingEnableDescription": "Включить страницу ведения журнала аудита в приложении." + "Feature:AuditLoggingEnableDescription": "Включить страницу ведения журнала аудита в приложении.", + "TenantId": "Идентификатор арендатора" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sk.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sk.json index e58dd37a5a..672f32dd44 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sk.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sk.json @@ -78,6 +78,7 @@ "EndDate": "Dátum konca", "Feature:AuditLoggingGroup": "Audit logovanie", "Feature:AuditLoggingEnable": "Povoliť stránku audit logovania", - "Feature:AuditLoggingEnableDescription": "Povolená stránka audit logovania v aplikácii." + "Feature:AuditLoggingEnableDescription": "Povolená stránka audit logovania v aplikácii.", + "TenantId": "ID nájomníka" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sl.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sl.json index e38afe0002..324a03b6db 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sl.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sl.json @@ -78,6 +78,7 @@ "EndDate": "Končni datum", "Feature:AuditLoggingGroup": "Revizijsko beleženje", "Feature:AuditLoggingEnable": "Omogočena stran za beleženje revizije", - "Feature:AuditLoggingEnableDescription": "Omogočite stran za beleženje revizije v aplikaciji." + "Feature:AuditLoggingEnableDescription": "Omogočite stran za beleženje revizije v aplikaciji.", + "TenantId": "ID najemnika" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json index f0b8b1ebee..2432e63d33 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json @@ -93,6 +93,7 @@ "DisplayName:ExpiredDeleterPeriod": "Utgången raderingsperiod för objekt", "Description:ExpiredDeleterPeriod": "Ställ in antalet dagar efter vilka utgångna objekt automatiskt ska raderas.", "ExpiredDeleterPeriodUnit": "dag(ar)", - "AuditLogsBeforeXWillBeDeleted": "Granskningsloggar före {0} kommer att raderas." + "AuditLogsBeforeXWillBeDeleted": "Granskningsloggar före {0} kommer att raderas.", + "TenantId": "Hyresgäst-ID" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/tr.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/tr.json index 2760b4ba28..6fb89d3b2b 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/tr.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/tr.json @@ -46,7 +46,7 @@ "Date": "Tarih", "Url": "Url", "UserName": "Kullanıcı adı", - "TenantImpersonator": "Kiracı Taklitçisi", + "TenantImpersonator": "Müşteri Taklitçisi", "UserImpersonator": "Kullanıcı Taklitçisi", "UrlFilter": "Url Filtresi", "User": "Kullanıcı", @@ -78,6 +78,7 @@ "Feature:AuditLoggingGroup": "İşlem Kayıtları", "Feature:AuditLoggingEnable": "İşlem kayıtları sayfasını etkinleştirin", "Feature:AuditLoggingEnableDescription": "Uygulamadanızdaki işlem kayıtları sayfasını etkinleştirir.", - "MinMaxDuration": "Süre (Min. - Max.)" + "MinMaxDuration": "Süre (Min. - Max.)", + "TenantId": "Müşteri Id" } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/vi.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/vi.json index 03e68947c8..0ea4845071 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/vi.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/vi.json @@ -78,6 +78,7 @@ "EndDate": "Ngày cuối", "Feature:AuditLoggingGroup": "Ghi nhật ký kiểm tra", "Feature:AuditLoggingEnable": "Đã bật trang ghi nhật ký kiểm tra", - "Feature:AuditLoggingEnableDescription": "Kích hoạt trang ghi nhật ký kiểm tra trong ứng dụng." + "Feature:AuditLoggingEnableDescription": "Kích hoạt trang ghi nhật ký kiểm tra trong ứng dụng.", + "TenantId": "ID người thuê" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/zh-Hans.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/zh-Hans.json index 23ab2cf949..3f6099f04f 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/zh-Hans.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/zh-Hans.json @@ -78,6 +78,7 @@ "EndDate": "结束日期", "Feature:AuditLoggingGroup": "审计日志", "Feature:AuditLoggingEnable": "启用审计记录页面", - "Feature:AuditLoggingEnableDescription": "在应用程序中启用审计日志页面。" + "Feature:AuditLoggingEnableDescription": "在应用程序中启用审计日志页面。", + "TenantId": "租户 ID" } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/zh-Hant.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/zh-Hant.json index f987b0f31b..5b663c9568 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/zh-Hant.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/zh-Hant.json @@ -78,6 +78,7 @@ "EndDate": "結束時間", "Feature:AuditLoggingGroup": "審計日誌", "Feature:AuditLoggingEnable": "啟用審計日誌頁面", - "Feature:AuditLoggingEnableDescription": "在應用程序中啟用審計日誌頁面." + "Feature:AuditLoggingEnableDescription": "在應用程序中啟用審計日誌頁面.", + "TenantId": "租戶 ID" } } \ No newline at end of file From 0948138ee64e471919d7eaaae00fd44a6dc0445b Mon Sep 17 00:00:00 2001 From: selman koc <64414348+skoc10@users.noreply.github.com> Date: Thu, 6 Feb 2025 08:48:21 +0300 Subject: [PATCH 21/37] Update version to release 9.0.5 --- common.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common.props b/common.props index 9d4e5cbd20..8a81465271 100644 --- a/common.props +++ b/common.props @@ -1,8 +1,8 @@ latest - 9.0.4 - 4.0.5 + 9.0.5 + 4.0.6 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From 7d654f3e50d4fcdd36cd4221663248c1e6d8eb04 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Thu, 6 Feb 2025 11:49:57 +0300 Subject: [PATCH 22/37] fix: missing modal title localization --- .../email-setting-group/email-setting-group.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html index be97948a93..aa13148379 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html +++ b/npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html @@ -51,7 +51,7 @@
    @@ -93,7 +93,7 @@ -

    {{ 'SendTestEmail' | abpLocalization }}

    +

    {{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}

    From bae23d7582d7c65ba07ae2ff591a5590cdf64b9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:23:26 +0300 Subject: [PATCH 23/37] Update POST.md --- .../POST.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/en/Community-Articles/2025-01-24-Understanding-Transactions-in-ABP-Unit-Of-Work/POST.md b/docs/en/Community-Articles/2025-01-24-Understanding-Transactions-in-ABP-Unit-Of-Work/POST.md index 49a75b2a25..929203c6a0 100644 --- a/docs/en/Community-Articles/2025-01-24-Understanding-Transactions-in-ABP-Unit-Of-Work/POST.md +++ b/docs/en/Community-Articles/2025-01-24-Understanding-Transactions-in-ABP-Unit-Of-Work/POST.md @@ -2,8 +2,6 @@ [The Unit of Work](https://en.wikipedia.org/wiki/Unit_of_work) is a software design pattern that maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems to ensure that all changes are made within a single transaction. -![pic](./pic.png) - ## Transaction Management Overview One of the primary responsibilities of the Unit of Work is managing database transactions. It provides the following transaction management features: From e5282163813d74546c549f0c8714b030fbde06f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:27:27 +0300 Subject: [PATCH 24/37] Update POST.md --- .../Community-Articles/2024-12-01-OpenAI-Integration/POST.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/en/Community-Articles/2024-12-01-OpenAI-Integration/POST.md b/docs/en/Community-Articles/2024-12-01-OpenAI-Integration/POST.md index 4706e79f49..830f0d094a 100644 --- a/docs/en/Community-Articles/2024-12-01-OpenAI-Integration/POST.md +++ b/docs/en/Community-Articles/2024-12-01-OpenAI-Integration/POST.md @@ -2,8 +2,6 @@ In this article, I will show you how to integrate and use the [OpenAI API](https://github.com/openai/openai-dotnet?tab=readme-ov-file#getting-started) with the [ABP Framework](https://abp.io/). We will explore step-by-step how these technologies can work together to enhance your application with powerful AI capabilities, such as natural language processing, image generation, and more. -![cover-image](cover-image.png) - ## Creating an ABP Project To begin integrating OpenAI API with ABP Framework, you first need to create an ABP project. Follow these steps to create and set up your ABP project: @@ -384,4 +382,4 @@ To showcase the integration of the OpenAI API with the ABP Framework, we impleme ## Conclusion -In this article, we covered how to integrate the OpenAI API with the ABP Framework by creating a sample project, setting up the OpenAI services, and implementing examples for conversational AI, knowledge-based assistance, and image generation. By following these steps, you can add powerful AI-driven capabilities to your application, making it more interactive, intelligent, and capable of meeting user needs effectively. \ No newline at end of file +In this article, we covered how to integrate the OpenAI API with the ABP Framework by creating a sample project, setting up the OpenAI services, and implementing examples for conversational AI, knowledge-based assistance, and image generation. By following these steps, you can add powerful AI-driven capabilities to your application, making it more interactive, intelligent, and capable of meeting user needs effectively. From 37e906b4fa94daae9c13b9181ee5e4a02a2a241d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ya=C4=9Fmur=20=C3=87elik?= <157795849+yagmurcelk@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:30:14 +0300 Subject: [PATCH 25/37] Update POST.md --- .../2024-10-11-NET-Aspire-vs-ABP-Studio/POST.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/en/Community-Articles/2024-10-11-NET-Aspire-vs-ABP-Studio/POST.md b/docs/en/Community-Articles/2024-10-11-NET-Aspire-vs-ABP-Studio/POST.md index 9e996d2099..fe7b706b5a 100644 --- a/docs/en/Community-Articles/2024-10-11-NET-Aspire-vs-ABP-Studio/POST.md +++ b/docs/en/Community-Articles/2024-10-11-NET-Aspire-vs-ABP-Studio/POST.md @@ -2,8 +2,6 @@ In this article, I will compare [.NET Aspire](https://learn.microsoft.com/en-us/dotnet/aspire/) by [ABP Studio](https://abp.io/docs/latest/studio) by explaining their similarities and differences. -![cover](cover.png) - ## Introduction While .NET Aspire and ABP Studio are tools for different purpose with different scope and they have different approaches to solve the problems, many developers still may confuse since they also have some similar functionalities and solves some common problems. From 19470f6228e6c9e59a04b5e5ca7edd4b162921b2 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 7 Feb 2025 16:32:10 +0800 Subject: [PATCH 26/37] Check user password if sign in result is `IsNotAllowed`. --- .../Controllers/TokenController.Password.cs | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.Password.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.Password.cs index 392e696d08..33a1a37845 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.Password.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.Password.cs @@ -115,24 +115,32 @@ public partial class TokenController } else if (result.IsNotAllowed) { - Logger.LogInformation("Authentication failed for username: {username}, reason: not allowed", request.Username); - - if (user.ShouldChangePasswordOnNextLogin) + if (!await UserManager.CheckPasswordAsync(user, request.Password)) { - return await HandleShouldChangePasswordOnNextLoginAsync(request, user, request.Password); + Logger.LogInformation("Authentication failed for username: {username}, reason: invalid credentials", request.Username); + errorDescription = "Invalid username or password!"; } - - if (await UserManager.ShouldPeriodicallyChangePasswordAsync(user)) + else { - return await HandlePeriodicallyChangePasswordAsync(request, user, request.Password); - } + Logger.LogInformation("Authentication failed for username: {username}, reason: not allowed", request.Username); - if (user.IsActive) - { - return await HandleConfirmUserAsync(request, user); - } + if (user.ShouldChangePasswordOnNextLogin) + { + return await HandleShouldChangePasswordOnNextLoginAsync(request, user, request.Password); + } - errorDescription = "You are not allowed to login! Your account is inactive."; + if (await UserManager.ShouldPeriodicallyChangePasswordAsync(user)) + { + return await HandlePeriodicallyChangePasswordAsync(request, user, request.Password); + } + + if (user.IsActive) + { + return await HandleConfirmUserAsync(request, user); + } + + errorDescription = "You are not allowed to login! Your account is inactive."; + } } else { From 212749fa567fa9a1e607c48697d29917d9149fea Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 7 Feb 2025 16:35:06 +0800 Subject: [PATCH 27/37] Update IdentityServer `ResourceOwnerPasswordValidator`. --- .../AbpResourceOwnerPasswordValidator.cs | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs index eece31acc3..d4e0fb5490 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs @@ -128,21 +128,29 @@ public class AbpResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator } else if (result.IsNotAllowed) { - Logger.LogInformation("Authentication failed for username: {username}, reason: not allowed", context.UserName); - - if (user.ShouldChangePasswordOnNextLogin) + if (!await UserManager.CheckPasswordAsync(user, context.Password)) { - await HandleShouldChangePasswordOnNextLoginAsync(context, user, context.Password); - return; + Logger.LogInformation("Authentication failed for username: {username}, reason: invalid credentials", context.UserName); + errorDescription = Localizer["InvalidUserNameOrPassword"]; } - - if (await UserManager.ShouldPeriodicallyChangePasswordAsync(user)) + else { - await HandlePeriodicallyChangePasswordAsync(context, user, context.Password); - return; - } + Logger.LogInformation("Authentication failed for username: {username}, reason: not allowed", context.UserName); - errorDescription = Localizer["LoginIsNotAllowed"]; + if (user.ShouldChangePasswordOnNextLogin) + { + await HandleShouldChangePasswordOnNextLoginAsync(context, user, context.Password); + return; + } + + if (await UserManager.ShouldPeriodicallyChangePasswordAsync(user)) + { + await HandlePeriodicallyChangePasswordAsync(context, user, context.Password); + return; + } + + errorDescription = Localizer["LoginIsNotAllowed"]; + } } else { From e63fb6c53d4873bf8f4f419cc2f9a83b56081c55 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 7 Feb 2025 17:51:09 +0800 Subject: [PATCH 28/37] Update `System.Linq.Dynamic.Core` to `1.6.0.1` Close #22095 --- Directory.Packages.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index f5863e502d..042b00ec7a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -159,7 +159,7 @@ - + @@ -178,4 +178,4 @@ - \ No newline at end of file + From 45fdc686fa19830045a97da8f648e6d481c03248 Mon Sep 17 00:00:00 2001 From: selman koc <64414348+skoc10@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:12:22 +0300 Subject: [PATCH 29/37] Update update-versions.yml github action pipeline --- .github/workflows/update-versions.yml | 74 +++++++++++++++------------ 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml index d0a295884f..a46f7d6076 100644 --- a/.github/workflows/update-versions.yml +++ b/.github/workflows/update-versions.yml @@ -1,33 +1,41 @@ -name: Update Latest Versions - -on: - release: - types: - - published - -permissions: - contents: write - pull-requests: write - -jobs: - update-versions: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: 3.x - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install PyGithub - - - name: Update latest-versions.json and create PR - env: - GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} - run: | - python .github/scripts/update_versions.py +import os +import json +import xml.etree.ElementTree as ET + +def get_version_from_common_props(): + """ common.props dosyasındaki versiyon bilgilerini çeker. """ + tree = ET.parse("common.props") + root = tree.getroot() + + version = root.find(".//Version").text + leptonx_version = root.find(".//LeptonXVersion").text + + return version, leptonx_version + +def update_latest_versions(): + version, leptonx_version = get_version_from_common_props() + + # Eğer versiyon "preview" içeriyorsa PR oluşturma (sadece stable versiyonlar için) + if "preview" in version or "rc" in version: + return False + + with open("latest-versions.json", "r") as f: + latest_versions = json.load(f) + + # Yeni versiyon bilgisini en üst sıraya ekle + new_version_entry = { + "version": version, + "releaseDate": "", + "type": "stable", + "message": "", + "leptonx": { + "version": leptonx_version + } + } + + latest_versions.insert(0, new_version_entry) # Yeni versiyonu en üste ekliyoruz + + with open("latest-versions.json", "w") as f: + json.dump(latest_versions, f, indent=2) + + return True From 05efbb77ff1fcd586827f314c1ef1834962348cd Mon Sep 17 00:00:00 2001 From: selmankoc Date: Fri, 7 Feb 2025 15:15:43 +0300 Subject: [PATCH 30/37] Revert "Update update-versions.yml github action pipeline" This reverts commit 45fdc686fa19830045a97da8f648e6d481c03248. --- .github/workflows/update-versions.yml | 74 ++++++++++++--------------- 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/.github/workflows/update-versions.yml b/.github/workflows/update-versions.yml index a46f7d6076..d0a295884f 100644 --- a/.github/workflows/update-versions.yml +++ b/.github/workflows/update-versions.yml @@ -1,41 +1,33 @@ -import os -import json -import xml.etree.ElementTree as ET - -def get_version_from_common_props(): - """ common.props dosyasındaki versiyon bilgilerini çeker. """ - tree = ET.parse("common.props") - root = tree.getroot() - - version = root.find(".//Version").text - leptonx_version = root.find(".//LeptonXVersion").text - - return version, leptonx_version - -def update_latest_versions(): - version, leptonx_version = get_version_from_common_props() - - # Eğer versiyon "preview" içeriyorsa PR oluşturma (sadece stable versiyonlar için) - if "preview" in version or "rc" in version: - return False - - with open("latest-versions.json", "r") as f: - latest_versions = json.load(f) - - # Yeni versiyon bilgisini en üst sıraya ekle - new_version_entry = { - "version": version, - "releaseDate": "", - "type": "stable", - "message": "", - "leptonx": { - "version": leptonx_version - } - } - - latest_versions.insert(0, new_version_entry) # Yeni versiyonu en üste ekliyoruz - - with open("latest-versions.json", "w") as f: - json.dump(latest_versions, f, indent=2) - - return True +name: Update Latest Versions + +on: + release: + types: + - published + +permissions: + contents: write + pull-requests: write + +jobs: + update-versions: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.x + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install PyGithub + + - name: Update latest-versions.json and create PR + env: + GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} + run: | + python .github/scripts/update_versions.py From 1bde19cdf11827afb1f91506313c72d6df56ae98 Mon Sep 17 00:00:00 2001 From: selmankoc Date: Fri, 7 Feb 2025 15:30:01 +0300 Subject: [PATCH 31/37] Enhance version update script to fetch latest release branch and version details from common.props --- .github/scripts/update_versions.py | 93 ++++++++++++++++++------------ 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/.github/scripts/update_versions.py b/.github/scripts/update_versions.py index dcbd749796..a0c45ea407 100644 --- a/.github/scripts/update_versions.py +++ b/.github/scripts/update_versions.py @@ -1,54 +1,71 @@ import os import json +import re +import xml.etree.ElementTree as ET from github import Github +def get_latest_release_branch(): + """ GitHub repository'deki tüm `rel-x.x` branch'lerini listeleyerek en büyük sürüme sahip olanı döndürür. """ + g = Github(os.environ["GITHUB_TOKEN"]) + repo = g.get_repo("abpframework/abp") + + branches = repo.get_branches() + release_branches = [] + + # `rel-x.x` look for pattern + pattern = re.compile(r"rel-(\d+\.\d+)") + + for branch in branches: + match = pattern.match(branch.name) + if match: + release_branches.append((branch.name, float(match.group(1)))) # (branch_name, version) + + if not release_branches: + raise ValueError("No release branches found!") + + # Find the branch with the highest version + latest_branch = max(release_branches, key=lambda x: x[1])[0] + return latest_branch + +def get_version_from_common_props(branch): + """ Belirtilen branch'teki `common.props` dosyasından `Version` ve `LeptonXVersion` bilgilerini çeker. """ + g = Github(os.environ["GITHUB_TOKEN"]) + repo = g.get_repo("abpframework/abp") + + # Take the content of the file + file_content = repo.get_contents("common.props", ref=branch) + common_props_content = file_content.decoded_content.decode("utf-8") + + # XML parse it + root = ET.fromstring(common_props_content) + version = root.find(".//Version").text + leptonx_version = root.find(".//LeptonXVersion").text + + return version, leptonx_version + def update_latest_versions(): - version = os.environ["GITHUB_REF"].split("/")[-1] + latest_branch = get_latest_release_branch() + version, leptonx_version = get_version_from_common_props(latest_branch) - if "rc" in version: + if "preview" in version or "rc" in version: return False with open("latest-versions.json", "r") as f: latest_versions = json.load(f) - latest_versions[0]["version"] = version + new_version_entry = { + "version": version, + "releaseDate": "", + "type": "stable", + "message": "", + "leptonx": { + "version": leptonx_version + } + } + + latest_versions.insert(0, new_version_entry) # Add to the beginning of the list with open("latest-versions.json", "w") as f: json.dump(latest_versions, f, indent=2) return True - -def create_pr(): - g = Github(os.environ["GITHUB_TOKEN"]) - repo = g.get_repo("abpframework/abp") - - branch_name = f"update-latest-versions-{os.environ['GITHUB_REF'].split('/')[-1]}" - base = repo.get_branch("dev") - repo.create_git_ref(ref=f"refs/heads/{branch_name}", sha=base.commit.sha) - - # Get the current latest-versions.json file and its sha - contents = repo.get_contents("latest-versions.json", ref="dev") - file_sha = contents.sha - - # Update the file in the repo - repo.update_file( - path="latest-versions.json", - message=f"Update latest-versions.json to version {os.environ['GITHUB_REF'].split('/')[-1]}", - content=open("latest-versions.json", "r").read().encode("utf-8"), - sha=file_sha, - branch=branch_name, - ) - - try: - pr = repo.create_pull(title="Update latest-versions.json", - body="Automated PR to update the latest-versions.json file.", - head=branch_name, base="dev") - except Exception as e: - print(f"Error while creating PR: {e}") - - pr.create_review_request(reviewers=["ebicoglu", "gizemmutukurt", "skoc10"]) - -if __name__ == "__main__": - should_create_pr = update_latest_versions() - if should_create_pr: - create_pr() \ No newline at end of file From 88d220b64943c28c225d666d61bc7a0b8fcfc14d Mon Sep 17 00:00:00 2001 From: selmankoc Date: Fri, 7 Feb 2025 15:36:55 +0300 Subject: [PATCH 32/37] Update docstrings in update_versions.py for clarity and consistency --- .github/scripts/update_versions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/scripts/update_versions.py b/.github/scripts/update_versions.py index a0c45ea407..93817e3f10 100644 --- a/.github/scripts/update_versions.py +++ b/.github/scripts/update_versions.py @@ -5,7 +5,7 @@ import xml.etree.ElementTree as ET from github import Github def get_latest_release_branch(): - """ GitHub repository'deki tüm `rel-x.x` branch'lerini listeleyerek en büyük sürüme sahip olanı döndürür. """ + """ Lists all `rel-x.x` branches in the GitHub repository and returns the one with the highest version. """ g = Github(os.environ["GITHUB_TOKEN"]) repo = g.get_repo("abpframework/abp") @@ -28,7 +28,7 @@ def get_latest_release_branch(): return latest_branch def get_version_from_common_props(branch): - """ Belirtilen branch'teki `common.props` dosyasından `Version` ve `LeptonXVersion` bilgilerini çeker. """ + """ Fetches the `Version` and `LeptonXVersion` information from the `common.props` file in the specified branch. """ g = Github(os.environ["GITHUB_TOKEN"]) repo = g.get_repo("abpframework/abp") From 9119f234b1980c2086ac339579d48b0f68eb0254 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 7 Feb 2025 20:50:24 +0800 Subject: [PATCH 33/37] Make Single-Layer Solution documentation Lazy expand --- docs/en/docs-nav.json | 63 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 8054c37dbe..a404e988c0 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -1852,7 +1852,68 @@ }, { "text": "Single-Layer Solution", - "path": "solution-templates/single-layer-web-application" + "isLazyExpandable": true, + "path": "solution-templates/single-layer-web-application", + "items": [ + { + "text": "Overview", + "path": "solution-templates/single-layer-web-application/overview.md" + }, + { + "text": "Solution Structure", + "path": "solution-templates/single-layer-web-application/solution-structure.md" + }, + { + "text": "Main Components", + "isLazyExpandable": true, + "path": "solution-templates/single-layer-web-application/main-components.md", + "items": [ + { + "text": "Web Applications", + "path": "solution-templates/single-layer-web-application/web-applications.md" + }, + { + "text": "Db Migrator", + "path": "solution-templates/single-layer-web-application/db-migrator.md" + } + ] + }, + { + "text": "Built-In Features", + "isLazyExpandable": true, + "path": "solution-templates/single-layer-web-application/built-in-features.md", + "items": [ + { + "text": "Authentication", + "path": "solution-templates/single-layer-web-application/authentication.md" + }, + { + "text": "Database configurations", + "path": "solution-templates/single-layer-web-application/database-configurations.md" + }, + { + "text": "Logging (with Serilog)", + "path": "solution-templates/single-layer-web-application/logging.md" + }, + { + "text": "Swagger integration", + "path": "solution-templates/single-layer-web-application/swagger-integration.md" + }, + { + "text": "Multi-Tenancy", + "path": "solution-templates/single-layer-web-application/multi-tenancy.md" + }, + { + "text": "BLOB Storing", + "path": "solution-templates/single-layer-web-application/blob-storing.md" + }, + { + "text": "CORS configuration", + "path": "solution-templates/single-layer-web-application/cors-configuration.md" + } + ] + } + ] }, { "text": "Layered Solution", From c4c674eb5d1784dee7a3e3f167a1a4a512a871b2 Mon Sep 17 00:00:00 2001 From: selmankoc Date: Fri, 7 Feb 2025 16:33:49 +0300 Subject: [PATCH 34/37] Refactor version update logic to determine target release branch and improve error handling for common.props retrieval --- .github/scripts/update_versions.py | 80 ++++++++++++++++-------------- 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/.github/scripts/update_versions.py b/.github/scripts/update_versions.py index 93817e3f10..1f593273bc 100644 --- a/.github/scripts/update_versions.py +++ b/.github/scripts/update_versions.py @@ -4,55 +4,62 @@ import re import xml.etree.ElementTree as ET from github import Github -def get_latest_release_branch(): - """ Lists all `rel-x.x` branches in the GitHub repository and returns the one with the highest version. """ - g = Github(os.environ["GITHUB_TOKEN"]) - repo = g.get_repo("abpframework/abp") - - branches = repo.get_branches() - release_branches = [] - - # `rel-x.x` look for pattern - pattern = re.compile(r"rel-(\d+\.\d+)") - - for branch in branches: - match = pattern.match(branch.name) - if match: - release_branches.append((branch.name, float(match.group(1)))) # (branch_name, version) - - if not release_branches: - raise ValueError("No release branches found!") - - # Find the branch with the highest version - latest_branch = max(release_branches, key=lambda x: x[1])[0] - return latest_branch +def get_target_release_branch(version): + """ + Extracts the first two numbers from the release version (`9.0.5` → `rel-9.0`) + to determine the corresponding `rel-x.x` branch. + """ + match = re.match(r"(\d+)\.(\d+)\.\d+", version) + if not match: + raise ValueError(f"Invalid version format: {version}") + + major, minor = match.groups() + target_branch = f"rel-{major}.{minor}" + return target_branch def get_version_from_common_props(branch): - """ Fetches the `Version` and `LeptonXVersion` information from the `common.props` file in the specified branch. """ + """ + Retrieves `Version` and `LeptonXVersion` from the `common.props` file in the specified branch. + """ g = Github(os.environ["GITHUB_TOKEN"]) repo = g.get_repo("abpframework/abp") - # Take the content of the file - file_content = repo.get_contents("common.props", ref=branch) - common_props_content = file_content.decoded_content.decode("utf-8") + try: + file_content = repo.get_contents("common.props", ref=branch) + common_props_content = file_content.decoded_content.decode("utf-8") - # XML parse it - root = ET.fromstring(common_props_content) - version = root.find(".//Version").text - leptonx_version = root.find(".//LeptonXVersion").text + root = ET.fromstring(common_props_content) + version = root.find(".//Version").text + leptonx_version = root.find(".//LeptonXVersion").text - return version, leptonx_version + return version, leptonx_version + except Exception as e: + raise FileNotFoundError(f"common.props not found in branch {branch}: {e}") def update_latest_versions(): - latest_branch = get_latest_release_branch() - version, leptonx_version = get_version_from_common_props(latest_branch) - + """ + Updates `latest-versions.json` based on the most relevant release branch. + """ + # Get the release version from GitHub reference + release_version = os.environ["GITHUB_REF"].split("/")[-1] # Example: "refs/tags/v9.0.5" → "v9.0.5" + if release_version.startswith("v"): + release_version = release_version[1:] # Convert to "9.0.5" format + + # Determine the correct `rel-x.x` branch + target_branch = get_target_release_branch(release_version) + + # Retrieve `common.props` data from the target branch + version, leptonx_version = get_version_from_common_props(target_branch) + + # Skip if the version is a preview or release candidate if "preview" in version or "rc" in version: return False + # Read the `latest-versions.json` file with open("latest-versions.json", "r") as f: latest_versions = json.load(f) + # Add the new version entry new_version_entry = { "version": version, "releaseDate": "", @@ -62,9 +69,10 @@ def update_latest_versions(): "version": leptonx_version } } + + latest_versions.insert(0, new_version_entry) # Insert the new version at the top - latest_versions.insert(0, new_version_entry) # Add to the beginning of the list - + # Update the file with open("latest-versions.json", "w") as f: json.dump(latest_versions, f, indent=2) From 0230bb078fcb27ef1e3297e33417f2fa87b23c4a Mon Sep 17 00:00:00 2001 From: selmankoc Date: Fri, 7 Feb 2025 17:08:58 +0300 Subject: [PATCH 35/37] chore: update .NET Core version from 8.x to 9.x in GitHub Actions deployment steps --- .../step3-deployment-github-action.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md b/docs/en/solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md index d6533ef6ec..a9ec807c64 100644 --- a/docs/en/solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md +++ b/docs/en/solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md @@ -49,7 +49,7 @@ jobs: - name: Set up .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.x' + dotnet-version: '9.x' include-prerelease: true - name: Install ABP CLI @@ -150,7 +150,7 @@ jobs: - name: Set up .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.x' + dotnet-version: '9.x' include-prerelease: true - name: Install ABP CLI @@ -250,7 +250,7 @@ jobs: - name: Set up .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.x' + dotnet-version: '9.x' include-prerelease: true - name: Install ABP CLI @@ -355,7 +355,7 @@ jobs: - name: Set up .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.x' + dotnet-version: '9.x' include-prerelease: true - name: Install ABP CLI @@ -489,7 +489,7 @@ build: - name: Set up .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.x' + dotnet-version: '9.x' include-prerelease: true - name: Install ABP CLI @@ -569,7 +569,7 @@ jobs: - name: Set up .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.x' + dotnet-version: '9.x' include-prerelease: true - name: Install ABP CLI From 9ba778613655bc82ca0fe086c03dd1b14b553d20 Mon Sep 17 00:00:00 2001 From: Mansur Besleney Date: Mon, 10 Feb 2025 16:19:16 +0300 Subject: [PATCH 36/37] added right link --- .../AbpIoLocalization/Commercial/Localization/Resources/en.json | 2 +- .../AbpIoLocalization/Www/Localization/Resources/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 4856813fe1..b81733d247 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -645,7 +645,7 @@ "ExtendPaymentInfoSection_Description": "By extending/renewing your license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.", "LicenseRenewalPrice": "License renewal price", "LicensePrice": "License Price", - "TrialLicensePaymentInfoSection_Description": "Purchase license: By purchasing a license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.
    See the license comparison table to check the differences between the license types.", + "TrialLicensePaymentInfoSection_Description": "Purchase license: By purchasing a license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.
    See the license comparison table to check the differences between the license types.", "SelectTargetLicense": "Select Target License", "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Yes, extend my license expiration date for 1 year.", "UpgradePaymentInfoSection_WantToExtendLicense": "Do you want to extend your license for 1 more year?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 2cc7827122..9f9dd49e65 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -1348,7 +1348,7 @@ "ExtendPaymentInfoSection_Description": "By extending/renewing your license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.", "LicenseRenewalPrice": "License renewal price", "LicensePrice": "License Price", - "TrialLicensePaymentInfoSection_Description": "Purchase license: By purchasing a license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.
    See the license comparison table to check the differences between the license types.", + "TrialLicensePaymentInfoSection_Description": "Purchase license: By purchasing a license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.
    See the license comparison table to check the differences between the license types.", "SelectTargetLicense": "Select Target License", "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Yes, extend my license expiration date for 1 year.", "UpgradePaymentInfoSection_WantToExtendLicense": "Do you want to extend your license for 1 more year?", From 3cfad055c34329a75f46033666984276ae2b10b1 Mon Sep 17 00:00:00 2001 From: selman koc <64414348+skoc10@users.noreply.github.com> Date: Tue, 11 Feb 2025 08:56:04 +0300 Subject: [PATCH 37/37] Update version to release 9.1.0-rc.2 --- common.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common.props b/common.props index 83a713fe69..9b30b8d788 100644 --- a/common.props +++ b/common.props @@ -1,8 +1,8 @@ latest - 9.1.0-rc.1 - 4.1.0-rc.1 + 9.1.0-rc.2 + 4.1.0-rc.2 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/