diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
index 696d401fed..0bfa3e0711 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -51,7 +51,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@master
with:
- dotnet-version: 8.0.100
+ dotnet-version: 9.0.100-rc.1.24452.12
- name: chown
run: |
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 8f741e93b8..f6db56e778 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -51,69 +51,70 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
+
@@ -127,7 +128,7 @@
-
+
@@ -154,17 +155,17 @@
-
+
-
+
-
-
-
+
+
+
@@ -174,5 +175,6 @@
+
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj
index 267ace87f2..6e7bbc184e 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
index 82aabed272..ed7781b476 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
@@ -251,6 +251,7 @@
"VideoCourses": "Essential Videos",
"DoYouAgreePrivacyPolicy": "By clicking Subscribe button you agree to the Terms & Conditions and Privacy Policy.",
"AbpConferenceDescription": "ABP Conference is a virtual event for .NET developers to learn and connect with the community.",
- "Mobile": "Mobile"
+ "Mobile": "Mobile",
+ "MetaTwitterCard": "summary_large_image"
}
}
\ No newline at end of file
diff --git a/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md b/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md
index c0bf748876..3ed34680c1 100644
--- a/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md
+++ b/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md
@@ -52,7 +52,7 @@ For example, you can update the ASP.NET Core image as follows:
```diff
- FROM mcr.microsoft.com/dotnet/aspnet:7.0-bullseye-slim AS base
-+ FROM mcr.microsoft.com/dotnet/aspnet:8.0
++ FROM mcr.microsoft.com/dotnet/aspnet:9.0
```
You can check the related images from Docker Hub and update them accordingly:
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
new file mode 100644
index 0000000000..c004d45eba
--- /dev/null
+++ b/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/Post.md
@@ -0,0 +1,99 @@
+### 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.
+
+
+
+
+
+### 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`.
+
+```csharp
+/*** My Base Class is Animal ***/
+[JsonPolymorphic]
+[JsonDerivedType(typeof(Cat), nameof(Cat))]
+[JsonDerivedType(typeof(Dog), nameof(Dog))]
+private class Animal
+{
+ public string Name { get; set; }
+}
+
+/*** CAT derived from Animal ***/
+private class Cat : Animal
+{
+ public CatTypes CatType { get; set; }
+}
+
+/*** DOG derived from Animal ***/
+private class Dog : Animal
+{
+ public DogTypes DogType { get; set; }
+}
+
+
+public class MyHub : Hub
+{
+ /*** We can use the base type Animal here ***/
+ public void Process(Animal animal)
+ {
+ if (animal is Cat) { ... }
+ else if (animal is Dog) { ... }
+ }
+}
+
+```
+
+
+
+### Better Diagnostics and Telemetry
+
+Microsoft focuses mainly on .NET Aspire nowadays. That’s why SignalR now integrates more deeply with the .NET Activity API, which is commonly used for distributed tracing. The enhancement is implemented for better monitoring in [.NET Aspire Dashboard](https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/dashboard/overview?tabs=bash#using-the-dashboard-with-net-aspire-projects). To support this feature:
+
+1- Add these packages to your`csproj`:
+
+```xml
+
+
+
+```
+
+2- Add the following startup code to your host project:
+
+```csharp
+builder.Services.AddSignalR();
+/* After AddSignalR use AddOpenTelemetry() */
+builder
+ .Services
+ .AddOpenTelemetry()
+ .WithTracing(tracing =>
+ {
+ if (builder.Environment.IsDevelopment())
+ {
+ tracing.SetSampler(new AlwaysOnSampler()); //for dev env monitor all traces
+ }
+
+ tracing.AddAspNetCoreInstrumentation();
+ tracing.AddSource("Microsoft.AspNetCore.SignalR.Server");
+ });
+
+builder.Services.ConfigureOpenTelemetryTracerProvider(tracing => tracing.AddOtlpExporter());
+```
+
+Finally, you’ll see the **SignalR Hub** events on the [Aspire Dashboard](https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/dashboard/overview):
+
+
+
+
+
+### Trimming and Native AOT Support
+
+With .NET 9, **trimming** and **native** **Ahead Of Time** compilation are **supported**. This will improve our application performance. To support AOT, your SignalR object serialization needs to be JSON, and you must use the `System.Text.Json` s[ource generator](https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/source-generation). Also on the server side, [you shouldn't use](https://github.com/dotnet/aspnetcore/issues/56179) `IAsyncEnumerable` and `ChannelReader` where `T` is a ValueType (`struct`) for Hub method arguments. One more limitation; [Strongly typed hubs](https://learn.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-8.0#strongly-typed-hubs) aren't supported with Native AOT (`PublishAot`). And you should use only `Task`, `Task`, `ValueTask`, `ValueTask` for `async` return types.
+
+
+
+---
+
+That's all the new features coming to SignalR in .NET 9!
+Happy coding 🧑🏽💻
diff --git a/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/cover.png b/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/cover.png
new file mode 100644
index 0000000000..d5e783520a
Binary files /dev/null and b/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/cover.png differ
diff --git a/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/signalr-activity-dashboard.png b/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/signalr-activity-dashboard.png
new file mode 100644
index 0000000000..44f167c603
Binary files /dev/null and b/docs/en/Community-Articles/2024-10-01-SignalR-9-New-Features/signalr-activity-dashboard.png differ
diff --git a/docs/en/deployment/ssl.md b/docs/en/deployment/ssl.md
index e1f463dba8..152bc1d5a2 100644
--- a/docs/en/deployment/ssl.md
+++ b/docs/en/deployment/ssl.md
@@ -2,9 +2,11 @@
A website needs an SSL certificate in order to keep user data secure, verify ownership of the website, prevent attackers from creating a fake version of the site, and gain user trust.
-This document introduces how to get and use SSL certificate(HTTPS) for your application.
+This document introduces how to get and use an SSL certificate(HTTPS) for your application.
-## Get a SSL Certificate from a Certificate Authority
+
+
+## Get an SSL Certificate from a Certificate Authority
You can get a SSL certificate from a certificate authority (CA) such as [Let's Encrypt](https://letsencrypt.org/) or [Cloudflare](https://www.cloudflare.com/learning/ssl/what-is-an-ssl-certificate/) and so on.
@@ -14,21 +16,137 @@ Once you have a certificate, you need to configure your web server to use it. Th
* [Host ASP.NET Core on Linux with Nginx: HTTPS configuration](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx)
* [How to Set Up SSL on IIS 7 or later](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis)
-## Create a Self-Signed Certificate
-You can create a self-signed certificate for testing purposes or internal use.
-There is an article about [how to create a self-signed certificate](https://learn.microsoft.com/en-us/dotnet/core/additional-tools/self-signed-certificates-guide), If you are using IIS, you can use the following this document to [obtain a Certificate](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis#obtain-a-certificate)
+### How to get a free SSL certificate from Let's Encrypt?
+
+Let's Encrypt is **a free, automated, and open certificate authority (CA)**. It gives the digital certificates to enable HTTPS (SSL/TLS) for websites. To get a free SSL certificate, we will use [acme.sh](https://github.com/acmesh-official/acme.sh) and Cloudflare DNS API to get a free SSL certificate from [Let's Encrypt](https://letsencrypt.org/).
+
+> If you have any problem with the following steps, you can read the [acme.sh](https://github.com/acmesh-official/acme.sh/wiki/dnsapi) tutorial.
+
+
+
+#### Install [acme.sh](https://github.com/acmesh-official/acme.sh)
+
+Ensure that you have `curl` command in your terminal. And run the following command on your terminal:
+
+```bash
+curl https://get.acme.sh | sh -s email=my@example.com
+```
+
+
+
+#### [Cloudflare DNS API token](https://dash.cloudflare.com/profile/api-tokens)
+
+
+You will need to create an API token which either:
+
+(i) has permission to edit a single specific DNS zone; or
+(ii) has permission to edit multiple DNS zones.
+
+You can do this via your Cloudflare profile page under the API Tokens section. When you create the token, under Permissions, select Zone > DNS > Edit, and under Zone Resources, only include the specific DNS zones within which you need to perform ACME DNS challenges.
+
+The API token is a 40-character string that may contain uppercase letters, lowercase letters, numbers, and underscores. You must provide it to acme.sh by setting the environment variable CF_Token to its value, e.g. run export CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs".
+
+**(i) Single DNS zone**
+You must give acme.sh the zone ID of the DNS zone it needs to edit. This is a 32-character hexadecimal string (e.g. 763eac4f1bcebd8b5c95e9fc50d010b4), and should not be confused with the zone name (e.g. example.com). This zone ID can be found via the Cloudflare dashboard on the zone's Overview page in the right-hand sidebar.
+
+You provide this info by setting the environment variable CF_Zone_ID to this zone ID, e.g. run export CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4".
+
+**(ii) Multiple DNS zones**
+You must give acme.sh the account ID of the Cloudflare account to which the relevant DNS zones belong. This is a 32-character hexadecimal string, and should not be confused with other account identifiers, such as the account email address (e.g. alice@example.com) or global API key (which is also a 32-character hexadecimal string). This account ID can be found via the Cloudflare dashboard, as the end of the URL when logged in, or on the Overview page of any of your zones, in the right-hand sidebar, beneath the zone ID.
+
+You provide this info by setting the environment variable CF_Account_ID to this account ID, e.g. run export CF_Account_ID="763eac4f1bcebd8b5c95e9fc50d010b4".
+
+
+
+#### Issue a certificate
+
+```bash
+> export CF_Token='your_token'
+> export CF_Account_ID='your_account_id'
+> export CF_Zone_ID='your_zone_id'
+> acme.sh --issue --dns dns_cf -d getabp.net
+
+[Info] Domains have changed.
+[Info] Using CA: https://acme.zerossl.com/v2/DV90
+[Info] Single domain='getabp.net'
+[Info] Getting webroot for domain='getabp.net'
+[Info] Adding TXT value: 1uEeVFfmwXM7N21Wi9PitgEnhJbl4W4dHeRkapGkRSs for domain: _acme-challenge.getabp.net
+[Info] Adding record
+[Info] Added, OK
+[Info] The TXT record has been successfully added.
+[Info] Let's check each DNS record now. Sleeping for 20 seconds first.
+[Info] You can use '--dnssleep' to disable public dns checks.
+[Info] See: https://github.com/acmesh-official/acme.sh/wiki/dnscheck
+[Info] Checking getabp.net for _acme-challenge.getabp.net
+[Info] Success for domain getabp.net '_acme-challenge.getabp.net'.
+[Info] All checks succeeded
+[Info] Verifying: getabp.net
+[Info] Processing. The CA is processing your order, please wait. (1/30)
+[Info] Success
+[Info] Removing DNS records.
+[Info] Removing txt: 1uEeVFfmwXM7N21Wi9PitgEnhJbl4W4dHeRkapGkRSs for domain: _acme-challenge.getabp.net
+[Info] Successfully removed
+[Info] Verification finished, beginning signing.
+[Info] Let's finalize the order.
+[Info] Le_OrderFinalize='https://acme.zerossl.com/v2/DV90/order/1AP31vqE7rzxCmvpDsDgvA/finalize'
+[Info] Order status is 'processing', let's sleep and retry.
+[Info] Sleeping for 15 seconds then retrying
+[Info] Polling order status: https://acme.zerossl.com/v2/DV90/order/1AP31vqE7rzxCmvpDsDgvA
+[Info] Downloading cert.
+[Info] Le_LinkCert='https://acme.zerossl.com/v2/DV90/cert/o1jBkRs8LVVBiEZShd4Yow'
+[Info] Cert success.
+-----BEGIN CERTIFICATE-----
+MIID9jCCA3ygAwIBAgIQbJr7iNOSnkMXJjkwngvQRzAKBggqhkjOPQQDAzBLMQsw
+CQYDVQQGEwJBVDEQMA4GA1UEChMHWmVyb1NTTDEqMCgGA1UEAxMhWmVyb1NTTCBF
+Q0MgRG9tYWluIFNlY3VyZSBTaXRlIENBMB4XDTI0MDkyODAwMDAwMFoXDTI0MTIy
+NzIzNTk1OVowFTETMBEGA1UEAxMKZ2V0YWJwLm5ldDBZMBMGByqGSM49AgEGCCqG
+SM49AwEHA0IABJ.....io0Kq3W2o0eAgXDVXw2QJ6RlZKi0RGha/D92u/OAqvjX0I4
+YEPRRgAm6l2oLg==
+-----END CERTIFICATE-----
+[Info] Your cert is in: getabp.net.cer
+[Info] Your cert key is in: getabp.net.key
+[Info] The intermediate CA cert is in: ca.cer
+[Info] And the full-chain cert is in: fullchain.cer
+```
+
+#### Convert the certificate to PFX format(IIS format)
+
+```bash
+openssl pkcs12 -export \
+ -in getabp.net.cer \
+ -inkey getabp.net.key \
+ -out getabp.net.pfx \
+ -passout pass:
+```
+
+If you want to set a password for the PFX file, you can set the password with `-passout pass:your_password`.
+
+
+
+## Common Exceptions
+
+If you encounter the following exceptions, it means your **certificate is not trusted by the client or the certificate is not valid**.
+You will may see the following SSL certificate errors in your browser when you try to access the website.
+
+```cs
+---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
+---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure: RemoteCertificateNameMismatch
+```
-## Common Problems
+```cs
+---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
+---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
+```
-### The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
-This error may occur when using IIS. You need to trust your certificate by `Manage computer certificates`.
## References
* [ABP IIS Deployment](./index.md)
+* [acme.sh](https://github.com/acmesh-official/acme.sh)
+* [acme.sh DNS API](https://github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_cf)
* [HTTPS in ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl)
* [Let's Encrypt](https://letsencrypt.org/getting-started)
-* [Cloudflare's Free SSL / TLS](https://www.cloudflare.com/application-services/products/ssl/)
\ No newline at end of file
+* [Cloudflare's Free SSL / TLS](https://www.cloudflare.com/application-services/products/ssl/)
diff --git a/docs/en/framework/architecture/modularity/basics.md b/docs/en/framework/architecture/modularity/basics.md
index 481c1e192a..f92e6edc3b 100644
--- a/docs/en/framework/architecture/modularity/basics.md
+++ b/docs/en/framework/architecture/modularity/basics.md
@@ -7,7 +7,7 @@ ABP was designed to support to build fully modular applications and systems wher
* This document introduces the basics of the module system.
* [Module development best practice guide](../best-practices) explains some **best practices** to develop **re-usable application modules** based on **DDD** principles and layers. A module designed based on this guide will be **database independent** and can be deployed as a **microservice** if needed.
* [Pre-built application modules](../../../modules) are **ready to use** in any kind of application.
-* [Module startup template](../../../solution-templates/layered-web-application) is a jump start way to **create a new module**.
+* [Module startup template](../../../solution-templates/application-module) is a jump start way to **create a new module**.
* [ABP CLI](../../../cli/index.md) has commands to support modular development.
* All other framework features are compatible to the modularity system.
diff --git a/docs/en/framework/fundamentals/dynamic-claims.md b/docs/en/framework/fundamentals/dynamic-claims.md
index 44bebd2aea..f326ac444d 100644
--- a/docs/en/framework/fundamentals/dynamic-claims.md
+++ b/docs/en/framework/fundamentals/dynamic-claims.md
@@ -1,8 +1,8 @@
# Dynamic Claims
-When a client authenticates and obtains an access token or an authentication cookie, the claims in that token or cookie are not changed unless it re-authenticates. For most of the claims, that may not be a problem since claims are not frequently changing values. However, some claims may be changed and these changes should be reflected to the current session immediately. For example, we can revoke a role from a user and that should be immediately effective, otherwise user will continue to use that role's permissions until re-login to the application.
+When a client authenticates and obtains an access token or an authentication cookie, the claims in that token or cookie are not changed unless it re-authenticates. That is not a problem for most claims since the claim values do not frequently change. However, for some claims, it may be required to immediately see the impact after the claim values change in the current session. For example, if a role is revoked from a user, you want to see its effect in the next request. Otherwise, the user will continue to use that role's permissions until re-login to the application.
-ABP's dynamic claims feature is used to automatically and dynamically override the configured claim values in the client's authentication token/cookie by the latest values of these claims.
+ABP's dynamic claims feature dynamically overrides the configured claim values in the client's authentication token/cookie with the latest values of these claims.
## How to Use
@@ -10,7 +10,7 @@ This feature is disabled by default. You should enable it for your application a
> **Beginning from the v8.0, all the [startup templates](../../solution-templates) are pre-configured and the dynamic claims feature is enabled by default. So, if you have created a solution with v8.0 and above, you don't need to make any configuration. Follow the instructions only if you've upgraded from a version lower than 8.0.**
-### Enabling the Dynamic Claims
+### Enabling / Disabling the Dynamic Claims
You can enable it by the following code:
@@ -19,7 +19,7 @@ public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.Configure(options =>
{
- options.IsDynamicClaimsEnabled = true;
+ options.IsDynamicClaimsEnabled = true; //set it "true" to enable "Dynamic Claims" or "false" to disable it.
});
}
````
diff --git a/docs/en/framework/ui/blazor/branding.md b/docs/en/framework/ui/blazor/branding.md
index 9fea655eb4..81b4244c25 100644
--- a/docs/en/framework/ui/blazor/branding.md
+++ b/docs/en/framework/ui/blazor/branding.md
@@ -24,8 +24,6 @@ namespace MyCompanyName.MyProjectName.Blazor
}
````
-> Currently, setting the `AppName` is only applicable to the [Basic Theme](./basic-theme.md), it does not have any effect on the other [official themes](../../../ui-themes).
-
The result will be like shown below:

diff --git a/docs/en/framework/ui/mvc-razor-pages/branding.md b/docs/en/framework/ui/mvc-razor-pages/branding.md
index 53d499031c..46c05d7d7e 100644
--- a/docs/en/framework/ui/mvc-razor-pages/branding.md
+++ b/docs/en/framework/ui/mvc-razor-pages/branding.md
@@ -26,8 +26,6 @@ namespace MyProject.Web
}
````
-> Currently, setting the `AppName` is only applicable to the [Basic Theme](./basic-theme.md), it does not have any effect on the other [official themes](../../../ui-themes).
-
The result will be like shown below:

diff --git a/docs/en/get-started/console.md b/docs/en/get-started/console.md
index df06fc33de..6a17784380 100644
--- a/docs/en/get-started/console.md
+++ b/docs/en/get-started/console.md
@@ -10,12 +10,14 @@ First, install the [ABP CLI](../cli) if you haven't installed before:
dotnet tool install -g Volo.Abp.Studio.Cli
````
-Then use the `abp new` command in an empty folder to create a new solution:
+Then use the `abp new` command in an empty folder to create a new solution (with the `--old` parameter at the end of the command):
````bash
-abp new Acme.MyConsoleApp -t console
+abp new Acme.MyConsoleApp -t console --old
````
+> **Note**: Since this startup template is not provided by the new ABP Studio Templates yet, you need to pass the `--old` parameter at the end of the command to use the old CLI & templating system for this startup template.
+
`Acme.MyConsoleApp` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming.
## Solution Structure
diff --git a/docs/en/get-started/wpf.md b/docs/en/get-started/wpf.md
index 8ccaeac181..287119986e 100644
--- a/docs/en/get-started/wpf.md
+++ b/docs/en/get-started/wpf.md
@@ -10,12 +10,14 @@ First, install the [ABP CLI](../cli) if you haven't installed before:
dotnet tool install -g Volo.Abp.Studio.Cli
````
-Then use the `abp new` command in an empty folder to create a new solution:
+Then use the `abp new` command in an empty folder to create a new solution (with the `--old` parameter at the end of the command):
````bash
-abp new Acme.MyWpfApp -t wpf
+abp new Acme.MyWpfApp -t wpf --old
````
+> **Note**: Since this startup template is not provided by the new ABP Studio Templates yet, you need to pass the `--old` parameter at the end of the command to use the old CLI & templating system for this startup template.
+
`Acme.MyWpfApp` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming.
## Solution Structure
diff --git a/docs/en/guides/ms-multi-tenant-domain-resolving.md b/docs/en/guides/ms-multi-tenant-domain-resolving.md
index 7a7aface92..cb48a63905 100644
--- a/docs/en/guides/ms-multi-tenant-domain-resolving.md
+++ b/docs/en/guides/ms-multi-tenant-domain-resolving.md
@@ -270,6 +270,7 @@ Your request from the browser to the subdomain will be accepted by the ingress-c
Update your charts ingress.yaml files. Ex for **administration-ingress.yaml**:
+{%{
```yaml
spec:
tls:
@@ -303,6 +304,7 @@ spec:
port:
number: 80
```
+}%}
**Update all the application, gateway and microservice ingress.yaml files.** Eventually, when deploy the application, you will be seeing:

@@ -311,6 +313,7 @@ spec:
Navigate to applications, gateways and microservices' **x-deployment.yaml** file and override the newly introduced `TenantDomain` key:
+{%{
```yaml
... Removed for brevity
- name: "TenantDomain" # Add this key
@@ -319,11 +322,13 @@ Navigate to applications, gateways and microservices' **x-deployment.yaml** file
value: "{{ .Values.config.authServer.authority }}"
...
```
+}%}
> **Update all the application, gateway and microservice deployment.yaml files.**
**For AuthServer, also add the WildCardDomains that is used to handle subdomain *redirect* and *post_logout redirect* URIs to the authserver-deployment.yaml file:**
+{%{
```yaml
... Removed for brevity
- name: "TenantDomain"
@@ -348,6 +353,7 @@ Navigate to applications, gateways and microservices' **x-deployment.yaml** file
value: "{{ .Values.wildCardDomains.productService }}"
...
```
+}%}
Afterwards, update the **values.yaml** file for all the sub-charts (administration, authserver etc):
@@ -383,7 +389,7 @@ wildCardDomains:
After updating the **deployment.yaml** and **values.yaml** files of all the application, gateway and microservices' navigate to the **mystore chart values.yaml** file located under the k8s/Mystore/values.yaml that overrides all the sub-charts:
**AuthServer:**
-
+{%{
```yaml
# auth-server sub-chart override
authserver:
@@ -402,11 +408,13 @@ authserver:
saasService: "https://{0}.saas.mystore.dev"
productService: "https://{0}.product.mystore.dev"
```
+}%}
You may also get CORS error when authenticating SwaggerUI of your gateways or microservices. Add Override the AuthServer CORS values with the subdomain to solve this problem:
**identityService:**
+{%{
```yaml
# identity-service sub-chart override
identity:
@@ -416,9 +424,10 @@ identity:
... Removed for brevity
tenantDomain: "https://{0}.identity.mystore.dev"
```
+}%}
**administrationService:**
-
+{%{
```yaml
# administration-service sub-chart override
administration:
@@ -428,9 +437,11 @@ administration:
... Removed for brevity
tenantDomain: "https://{0}.administration.mystore.dev"
```
+}%}
**saasService:**
+{%{
```yaml
# saas-service sub-chart override
saas:
@@ -440,9 +451,9 @@ saas:
... Removed for brevity
tenantDomain: "https://{0}.saas.mystore.dev"
```
-
+}%}
**productService:**
-
+{%{
```yaml
# product-service sub-chart override
product:
@@ -452,9 +463,10 @@ product:
... Removed for brevity
tenantDomain: "https://{0}.product.mystore.dev"
```
+}%}
**gateway-web:**
-
+{%{
```yaml
# saas-service sub-chart override
gateway-web:
@@ -464,9 +476,10 @@ gateway-web:
... Removed for brevity
tenantDomain: "https://{0}.gateway-web.mystore.dev"
```
+}%}
**gateway-web-public:**
-
+{%{
```yaml
# gateway-web-public sub-chart override
gateway-web-public:
@@ -476,9 +489,10 @@ gateway-web-public:
... Removed for brevity
tenantDomain: "https://{0}.gateway-public.mystore.dev"
```
+}%}
**publicweb:**
-
+{%{
```yaml
# Public Web application sub-chart override
publicweb:
@@ -489,9 +503,10 @@ publicweb:
... Removed for brevity
tenantDomain: "https://{0}.mystore.dev"
```
+}%}
**angular:**
-
+{%{
```yaml
# Angular back-office application sub-chart override
angular:
@@ -505,6 +520,7 @@ angular:
strictDiscoveryDocumentValidation: false
skipIssuerCheck: true
```
+}%}
> If you are using Web or BlazorServer application for back-office, it is similar configuration with the public-web application
diff --git a/docs/en/images/pen-test-alert-list-8.3.png b/docs/en/images/pen-test-alert-list-8.3.png
new file mode 100644
index 0000000000..d0584bde22
Binary files /dev/null and b/docs/en/images/pen-test-alert-list-8.3.png differ
diff --git a/docs/en/modules/docs.md b/docs/en/modules/docs.md
index 6ab4f566c0..dc04339e78 100644
--- a/docs/en/modules/docs.md
+++ b/docs/en/modules/docs.md
@@ -367,7 +367,7 @@ You can use [ABP](https://github.com/abpframework/abp/) GitHub documents to conf
For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table:
```mssql
-INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName], [ConcurrencyStamp]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL, N'', N'12f21123e08e4f15bedbae0b2d939659')
+INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName], [ConcurrencyStamp]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"","GitHubUserAgent":""}', N'/', N'dev', N'', N'12f21123e08e4f15bedbae0b2d939659')
```
Be aware that `GitHubAccessToken` is masked. It's a private token and you must get your own token and replace the `***` string.
@@ -407,7 +407,7 @@ You can use [ABP](https://github.com/abpframework/abp/) GitHub documents to conf
For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table:
```mssql
-INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL, N'')
+INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName], [ConcurrencyStamp]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL, N'', N'12f21123e08e4f15bedbae0b2d939659')
```
Add one of the sample projects above and run the application. In the menu you will see `Documents` link, click the menu link to open the documents page.
diff --git a/docs/en/others/penetration-test-report.md b/docs/en/others/penetration-test-report.md
index 524f3fc9a7..c092a856ea 100644
--- a/docs/en/others/penetration-test-report.md
+++ b/docs/en/others/penetration-test-report.md
@@ -1,6 +1,6 @@
# ABP Penetration Test Report
-The ABP Commercial MVC `v8.2.0` application template has been tested against security vulnerabilities by the [OWASP ZAP v2.14.0](https://www.zaproxy.org/) tool. The demo web application was started on the `https://localhost:44349` address. The below alerts have been reported by the pentest tool. These alerts are sorted by the risk level as high, medium, and low. The informational alerts are not mentioned in this document.
+The ABP Commercial MVC `v8.3.0` application template has been tested against security vulnerabilities by the [OWASP ZAP v2.14.0](https://www.zaproxy.org/) tool. The demo web application was started on the `https://localhost:44349` address. The below alerts have been reported by the pentest tool. These alerts are sorted by the risk level as high, medium, and low. The informational alerts are not mentioned in this document.
Many of these alerts are **false-positive**, meaning the vulnerability scanner detected these issues, but they are not exploitable. It's clearly explained for each false-positive alert why this alert is a false-positive.
@@ -10,14 +10,15 @@ In the next sections, you will find the affected URLs, attack parameters (reques
There are high _(red flag)_, medium _(orange flag)_, low _(yellow flag)_, and informational _(blue flag)_ alerts.
-
-w
+
+
> The informational alerts are not mentioned in this document. These alerts are not raising any risks on your application and they are optional.
### Path Traversal [Risk: High] - False Positive
- *[GET] - https://localhost:44349/api/audit-logging/audit-logs?startTime=&endTime=&url=&userName=&applicationName=&clientIpAddress=&correlationId=&httpMethod=audit-logs&httpStatusCode=&maxExecutionDuration=&minExecutionDuration=&hasException=true&sorting=executionTime+desc&skipCount=0&maxResultCount=10* (attack: **httpMethod=audit-logs**)
- *[POST] - https://localhost:44349/Account/Login* (attack: **\Login**)
+- *[POST] - https://localhost:44349/Account/Register* (attack: **\Register**)
- *[POST] - https://localhost:44349/Account/SecurityLogs* (attack: **\SecurityLogs**)
- *[POST] - https://localhost:44349/Identity/SecurityLogs* (attack: **\SecurityLogs**)
@@ -49,6 +50,18 @@ SQL injection may be possible. SQL injection is a web security vulnerability tha
ABP uses Entity Framework Core and LINQ. **It's safe against SQL Injection because it passes all data to the database via SQL parameters.** LINQ queries are not composed by using string manipulation or concatenation, that's why they are not susceptible to traditional SQL injection attacks. Therefore, this is a **false-positive** alert.
+### SQL Injection - Authentication Bypass [Risk: High] - False Positive
+
+* *[POST] — https://localhost:44349/Account/Login* (attack: **false AND 1=1 --**)
+
+**Description**:
+
+SQL injection may be possible on a login page, potentially allowing the application's authentication mechanism to be bypassed.
+
+**Solution**:
+
+This alert indicates that we must not trust client side input (even if there is client side validation in place) and check all data on the server side. ABP Framework already does that and makes server-side validations while authenticating a user. Therefore this is a **false-positive** alert.
+
### Absence of Anti-CSRF Tokens [Risk: Medium] — False Positive
* *[GET] - https://localhost:44349/Account/LinkUsers/LinkUsersModal?returnUrl=/SettingManagement*
@@ -113,8 +126,8 @@ Configure(options =>
### Format String Error [Risk: Medium] - False Positive
-- *[GET] — https://localhost:44349/Abp/Languages/Switch?culture=ZAP%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%0A&returnUrl=%2F&uiCulture=ar*
-- *[GET] — https://localhost:44349/Abp/ApplicationLocalizationScript?cultureName=ZAP%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%0A*
+- *[GET] — https://localhost:44349/Abp/Languages/Switch?culture=ZAP%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%0A&returnUrl=%2F&uiCulture=ar* (with combination of different parameters)
+- *[GET] — https://localhost:44349/Abp/ApplicationLocalizationScript?cultureName=ZAP%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%0A* (with combination of different parameters)
**Description:**
@@ -148,19 +161,21 @@ Injection using XSL transformations may be possible and may allow an attacker to
**Explanation**:
-This is a **false-positive** alert. v8.2.0 uses .NET 8 and the XSLT transformation is not possible on .NET5 or higher.
+This is a **false-positive** alert. v8.3.0 uses .NET 8 and the XSLT transformation is not possible on .NET5 or higher.
### Application Error Disclosure [Risk: Low] — False Positive
- *[POST] — https://localhost:44349/Account/ImpersonateUser*
+- *[POST] — https://localhost:44349/Saas/Host/Editions*
+- *[POST] — https://localhost:44349/Saas/Host/Tenants*
**Description:**
-The reported page contains an error/warning message that may disclose sensitive information like the location of the file that produced the unhandled exception. This information can be used to launch further attacks against the web application. The alert could be a false positive if the error message is found inside a documentation page.
+The reported pages contain an error/warning message that may disclose sensitive information like the location of the file that produced the unhandled exception. This information can be used to launch further attacks against the web application. The alert could be a false positive if the error message is found inside a documentation page.
**Explanation:**
-This vulnerability was reported as a **positive** alert because the application ran in `Development` mode. ABP Framework throws exceptions for developers in the `Development` environment. We set the environment to `Production` and re-run the test, then the server sent a *500-Internal Error* without the error disclosed. Therefore this alert is **false-positive**. Further information can be found in the following issue: [github.com/abpframework/abp/issues/14177](https://github.com/abpframework/abp/issues/14177#issuecomment-1268206947).
+This vulnerability was reported as a **positive** alert because the application ran in `Development` mode. ABP throws exceptions for developers in the `Development` environment. We set the environment to `Production` and re-run the test, then the server sent a *500-Internal Error* without the error disclosed. Therefore this alert is **false-positive**. Further information can be found in the following issue: [github.com/abpframework/abp/issues/14177](https://github.com/abpframework/abp/issues/14177#issuecomment-1268206947).
### Cookie No `HttpOnly` Flag [Risk: Low] — Positive (No need for a fix)
@@ -326,89 +341,10 @@ The `X-Content-Type-Options` header allows you to avoid MIME type sniffing by sa
You can add the [ABP's Security Header Middleware](../framework/ui/mvc-razor-pages/security-headers.md#security-headers-middleware) into the request pipeline to set the `X-Content-Type-Options` as *no-sniff*. Also, this middleware adds other pre-defined security headers to your application, including `X-XSS-Protection`, `X-Frame-Options` and `Content-Security-Policy` (if it's enabled). Read [Security Headers](../framework/ui/mvc-razor-pages/security-headers.md) documentation for more info.
-## Other Alerts
-
-The following alerts are reported by the community or our customers in v8.1+.
-
-### Disclosed Microsoft Client Secret [Risk: Medium] - Positive (No need for a fix)
-
-* *[GET] — https://localhost:44349/setting-management*
-
-**Description**:
-
-Secrets shall never be exposed to unauthorized parties. This exposure can result from improper storage, insecure transmission, or inadequate access controls. In this specific case the owner of the user account is authorized to read and modify the secret. In case of administrative accounts, it could lead to further damages, by performing lateral movements, by using the credentials to access other services.
-
-**Explanation**:
-
-The endpoint `/setting-management/` requires permission to be visited and can only be accessed via authorized users. It is the setting page to configure the application settings including the *default localization language*, *timezone*, *layout type*, *password settings* and more...
-
-### Incorrect Session Handling – Insufficient Session Termination [Risk: Low] - Positive
-
-* *[GET] — https://localhost:44349/Account/Logout*
-
-**Description**:
-
-Application logout functionality does not terminate the user's session. This increases the risk of unauthorized application access via successful session hijacking attacks, users leaving their computers unattended, and/or a local attacker utilizing the browser history. On logout, user sessions should be invalidated and all relevant session identifiers, authentication tokens and application state information deleted or overwritten both on server and on client side.
-
-**Explanation**:
-
-You can track the status of this case at [github.com/abpframework/abp/issues/19576](https://github.com/abpframework/abp/issues/19576).
-
-### Information Disclosure via Configuration Scripts [Risk: Low] - Positive (No need for a fix)
+## Other Alerts (Fixed)
-- *[GET] — https://localhost:44349/Abp/ApplicationConfigurationScript* or *https://localhost:44349/api/abp/application-configuration*
-- *[GET] — https://localhost:44349/Abp/ServiceProxyScript*
-
-**Description**:
-
-When users authenticate to the application, their browsers issue requests to 2 endpoints that host configuration scripts for the application framework. The first contains information about the passwords that are accepted by the application. This information can be used by the attackers to narrow down their dictionaries and only focus on the possible passwords for their
-attacks. The second, on the other hand, discloses some endpoints that are unavailable to the users with low privileges.
-
-**Explanation**:
-
-* **Application Configuration Script**:
-
- These 2 endpoints are used by ABP application templates. The first one `/Abp/ApplicationConfigurationScript` provides configuration and user based definitions with JSON format. This data is important for SPA based applications to get the current language, localization texts, policies, settings, user info, current tenant or time zone information. This is not a data leak. User specific data can only be accessed after user logon. Other data are application-wide used not dangerous for unauthenticated users. For more information check out the [Application Configuration](../framework/api-development/standard-apis/configuration.md) document.
-
-* **Service Proxy Script**:
-
- This endpoint provides auto-generated JavaScript AJAX call methods for the backend operations. This may disclosure information about the host API methods. On the other hand, it makes easy to consume the HTTP APIs from JavaScript side. ABP Application Services are automatically converted to JavaScript proxies. But it does not mean that these JavaScript methods can be executed anonymously. The attacker still needs to log in to perform operations. For more information check out the [Service Proxy Script](../framework/ui/mvc-razor-pages/dynamic-javascript-proxies.md) document. If you want to disable this functionality, check out [github.com/abpframework/abp/issues/12297](https://github.com/abpframework/abp/issues/12297)
-
-### User E-mail Address Enumeration [Risk: Low] - Positive
-
-* *[GET] — https://localhost:44349/Account/ForgotPassword*
-
-**Description**:
-
-It is possible to collect valid email addresses by interacting with the "Forgot Password" function of the
-application. This vulnerability is useful to increase the efficiency of brute force attacks.
-
-**Explanation**:
-
-If the email is known, it is easier to find the corresponding password. With the "Forgot Password" function, the attacker can enumerate valid email addresses as the function returns `Cannot find the given email` error, when there is no user registered with the provided e-mail address. This vulnerability has been fixed with v8.2, see the related issue for more info: [github.com/abpframework/abp/issues/19588](https://github.com/abpframework/abp/issues/19588).
-
-### Software Version Disclosure [Risk: Low] - Positive (No need for a fix)
-
-* *[GET] — https://localhost:44349/*
-
-**Description**:
-
-The assessed web server discloses its version number within the HTTP response headers. This information facilitates attackers in planning future attacks and can be used in the automation of the attack process. It is unnecessary to share this information with the clients of the web application. The vulnerability can be verified by issuing HTTP requests and inspecting HTTP response headers. HTTP header "Server" contains the version information.
-The following header was received in server responses: `Server: Microsoft-IIS/10.0` or `Server: Microsoft-HTTPAPI/2.0`.
-
-**Explanation**:
-
-This is not directly related to ABP. It's a header added by the IIS server. So you can disable this header with the `web.config` file:
-
-```xml
-
-
-
-
-
-
-
-
-```
+The following alerts were reported by the community or our customers in v8.2 and fixed:
-The following issue has been opened for this vulnerability, you can follow it at [github.com/abpframework/abp/issues/19589](https://github.com/abpframework/abp/issues/19589).
\ No newline at end of file
+* https://github.com/abpframework/abp/issues/19576
+* https://github.com/abpframework/abp/issues/19588
+* https://github.com/abpframework/abp/issues/19589
diff --git a/docs/en/release-info/migration-guides/abp-8-2.md b/docs/en/release-info/migration-guides/abp-8-2.md
index cd904f052e..15de922d4f 100644
--- a/docs/en/release-info/migration-guides/abp-8-2.md
+++ b/docs/en/release-info/migration-guides/abp-8-2.md
@@ -16,9 +16,6 @@ This document is a guide for upgrading ABP v8.x solutions to ABP v8.2. There are
Before this version, all of the projects above were targeting multiple frameworks (**netstandard2.0**, **netstandard2.1** and **net8.0**), with this version, we started to only target **net8.0** for these template projects. Note that, all other shared libraries still target multiple frameworks.
> This change should not affect your pre-existing solutions and you don't need to make any changes in your application. See the PR for more info: https://github.com/abpframework/abp/pull/19565
-## Upgraded AutoMapper to 13.0.1
-
-In this version, **AutoMapper** library version upgraded to 13.0.1. See [the release notes of AutoMapper v13.0.1](https://github.com/AutoMapper/AutoMapper/releases/tag/v13.0.1) for more information.
## Added default padding to `.tab-content` class for Basic Theme
@@ -60,4 +57,62 @@ In this version, the Angular UI has been updated to use the Angular version 17.3
The **Session Management** feature allows you to prevent concurrent login and manage user sessions.
-In this version, a new entity called `IdentitySession` has been added to the framework and you should create a new migration and apply it to your database.
\ No newline at end of file
+In this version, a new entity called `IdentitySession` has been added to the framework and you should create a new migration and apply it to your database.
+
+## Upgraded NuGet Dependencies
+
+You can see the following list of NuGet libraries that have been upgraded with this release, if you are using one of these packages explicitly, you may consider upgrading them in your solution:
+
+| Package | Old Version | New Version |
+| ---------------------------------------------------------- | ----------- | ----------- |
+| AutoMapper | 12.0.1 | 13.0.1 |
+| Blazorise | 1.4.1 | 1.5.2 |
+| Blazorise.Bootstrap5 | 1.4.1 | 1.5.2 |
+| Blazorise.Icons.FontAwesome | 1.4.1 | 1.5.2 |
+| Blazorise.Components | 1.4.1 | 1.5.2 |
+| Blazorise.DataGrid | 1.4.1 | 1.5.2 |
+| Blazorise.Snackbar | 1.4.1 | 1.5.2 |
+| Hangfire.AspNetCore | 1.8.6 | 1.8.14 |
+| Hangfire.SqlServer | 1.8.6 | 1.8.14 |
+| Microsoft.AspNetCore.Authentication.JwtBearer | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Authentication.OpenIdConnect | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Authorization | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Components | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Components.Authorization | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Components.Web | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Components.WebAssembly | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Components.WebAssembly.Server | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Components.WebAssembly.Authentication | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Components.WebAssembly.DevServer | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.DataProtection.StackExchangeRedis | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Mvc.NewtonsoftJson | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.Mvc.Testing | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.TestHost | 8.0.0 | 8.0.4 |
+| Microsoft.AspNetCore.WebUtilities | 8.0.0 | 8.0.4 |
+| Microsoft.Data.SqlClient | 8.0.0 | 8.0.4 |
+| Microsoft.EntityFrameworkCore | 8.0.0 | 8.0.4 |
+| Microsoft.EntityFrameworkCore.Design | 8.0.0 | 8.0.4 |
+| Microsoft.EntityFrameworkCore.InMemory | 8.0.0 | 8.0.4 |
+| Microsoft.EntityFrameworkCore.Proxies | 8.0.0 | 8.0.4 |
+| Microsoft.EntityFrameworkCore.Relational | 8.0.0 | 8.0.4 |
+| Microsoft.EntityFrameworkCore.Sqlite | 8.0.0 | 8.0.4 |
+| Microsoft.EntityFrameworkCore.SqlServer | 8.0.0 | 8.0.4 |
+| Microsoft.EntityFrameworkCore.Tools | 8.0.0 | 8.0.4 |
+| Microsoft.Extensions.DependencyInjection.Abstractions | 8.0.0 | 8.0.1 |
+| Microsoft.Extensions.FileProviders.Embedded | 8.0.0 | 8.0.4 |
+| Microsoft.Extensions.Logging.Abstractions | 8.0.0 | 8.0.1 |
+| Microsoft.Extensions.Options | 8.0.0 | 8.0.2 |
+| Microsoft.IdentityModel.Protocols.OpenIdConnect | - | 7.5.1 |
+| Microsoft.IdentityModel.Tokens | - | 7.5.1 |
+| Microsoft.IdentityModel.JsonWebTokens | - | 7.5.1 |
+| System.IdentityModel.Tokens.Jwt | - | 7.5.1 |
+| OpenIddict.Abstractions | 5.1.0 | 5.5.0 |
+| OpenIddict.Core | 5.1.0 | 5.5.0 |
+| OpenIddict.Server.AspNetCore | 5.1.0 | 5.5.0 |
+| OpenIddict.Validation.AspNetCore | 5.1.0 | 5.5.0 |
+| OpenIddict.Validation.ServerIntegration | 5.1.0 | 5.5.0 |
+| Oracle.EntityFrameworkCore | 8.21.121 | 8.23.40 |
+| Pomelo.EntityFrameworkCore.MySql | 8.0.0 | 8.0.2 |
+| SixLabors.ImageSharp | 3.0.2 | 3.1.4 |
+
diff --git a/docs/en/release-info/migration-guides/pro/openiddict-mvc.md b/docs/en/release-info/migration-guides/pro/openiddict-mvc.md
index 3aceab4864..620e715c6a 100644
--- a/docs/en/release-info/migration-guides/pro/openiddict-mvc.md
+++ b/docs/en/release-info/migration-guides/pro/openiddict-mvc.md
@@ -261,6 +261,7 @@ This project is renamed to **AuthServer** after v6.0.0. You can also refactor an
"RequireHttpsMetadata": "false",
"SwaggerClientId": "MyApplication_Swagger"
},
+ ```
## See Also
diff --git a/docs/en/tutorials/microservice/index.md b/docs/en/tutorials/microservice/index.md
new file mode 100644
index 0000000000..ee425f8afe
--- /dev/null
+++ b/docs/en/tutorials/microservice/index.md
@@ -0,0 +1,3 @@
+# Microservice Development Tutorial
+
+This tutorial is work in progress. Please check later. You can check here to [see the draft tutorial](https://github.com/abpframework/abp/blob/microservice-tutorial/docs/en/tutorials/microservice/index.md).
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration-dialog.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration-dialog.png
index c96217ac47..7edec8f3d9 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration-dialog.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration-dialog.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration.png
index 1629f541d8..857df5f25d 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-dd-module.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-dd-module.png
deleted file mode 100644
index f8a701770e..0000000000
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-dd-module.png and /dev/null differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-ddd-module.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-ddd-module.png
new file mode 100644
index 0000000000..ed11a95f57
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-ddd-module.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-empty-module.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-empty-module.png
index 8815d15c44..53d453cd37 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-empty-module.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-empty-module.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-folder-command.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-folder-command.png
index 6557599a4e..56c861d4fd 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-folder-command.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-folder-command.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-package.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-package.png
index de9e1aa8c5..7e28d708bf 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-package.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-package.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-2.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-2.png
index 47a5671f7f..308d32c6ad 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-2.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-2.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-3.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-3.png
index e79b72747f..dc51826734 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-3.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-3.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-4.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-4.png
index fa3b5c4e23..b29850cce6 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-4.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-4.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-5.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-5.png
index 4a8ef0ba58..42d7c96cb2 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-5.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-5.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-6.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-6.png
new file mode 100644
index 0000000000..954ea41060
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-6.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-7.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-7.png
new file mode 100644
index 0000000000..3dea701062
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-7.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-5.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-5.png
new file mode 100644
index 0000000000..ad78c4eee7
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-5.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-6.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-6.png
new file mode 100644
index 0000000000..bd1c968b03
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-6.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference.png
index 2cbd244a4b..a6870e4c0e 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-added-ddd-contracts-package.png b/docs/en/tutorials/modular-crm/images/abp-studio-added-ddd-contracts-package.png
new file mode 100644
index 0000000000..f451a550d8
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-added-ddd-contracts-package.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-build-and-restart-application.png b/docs/en/tutorials/modular-crm/images/abp-studio-build-and-restart-application.png
index 010851ee05..889a4251cd 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-build-and-restart-application.png and b/docs/en/tutorials/modular-crm/images/abp-studio-build-and-restart-application.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-add-migration-order.png b/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-add-migration-order.png
index 1e247f069b..b739e59373 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-add-migration-order.png and b/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-add-migration-order.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-update-database.png b/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-update-database.png
index bece8dfc12..b28b4e48a0 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-update-database.png and b/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-update-database.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-graph-build.png b/docs/en/tutorials/modular-crm/images/abp-studio-graph-build.png
index 11855d792e..8930bdd062 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-graph-build.png and b/docs/en/tutorials/modular-crm/images/abp-studio-graph-build.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-import-module-for-ordering.png b/docs/en/tutorials/modular-crm/images/abp-studio-import-module-for-ordering.png
index 94ab70d255..13aab5d477 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-import-module-for-ordering.png and b/docs/en/tutorials/modular-crm/images/abp-studio-import-module-for-ordering.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-import-module-ordering.png b/docs/en/tutorials/modular-crm/images/abp-studio-import-module-ordering.png
index e62c0dc315..8956033762 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-import-module-ordering.png and b/docs/en/tutorials/modular-crm/images/abp-studio-import-module-ordering.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-import-module.png b/docs/en/tutorials/modular-crm/images/abp-studio-import-module.png
index 673d303307..7a63894709 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-import-module.png and b/docs/en/tutorials/modular-crm/images/abp-studio-import-module.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-new-folder-dialog.png b/docs/en/tutorials/modular-crm/images/abp-studio-new-folder-dialog.png
index f726332a37..e1e3065b9c 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-new-folder-dialog.png and b/docs/en/tutorials/modular-crm/images/abp-studio-new-folder-dialog.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-open-in-explorer.png b/docs/en/tutorials/modular-crm/images/abp-studio-open-in-explorer.png
index ce052d2b17..99c6d26b20 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-open-in-explorer.png and b/docs/en/tutorials/modular-crm/images/abp-studio-open-in-explorer.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio-main-app.png b/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio-main-app.png
index 1f879ed795..f4131cfb69 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio-main-app.png and b/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio-main-app.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio.png b/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio.png
index ba96d6f488..2b1bac2db6 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio.png and b/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-ordering-swagger-ui-in-browser.png b/docs/en/tutorials/modular-crm/images/abp-studio-ordering-swagger-ui-in-browser.png
new file mode 100644
index 0000000000..304027af9e
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-ordering-swagger-ui-in-browser.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-graph-build.png b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-graph-build.png
index ececabbf01..10d210a0be 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-graph-build.png and b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-graph-build.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-initial-product-page.png b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-initial-product-page.png
index 480da27d7e..269c55f8b4 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-initial-product-page.png and b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-initial-product-page.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-orders-page.png b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-orders-page.png
index f3e9896e8f..fbd419d145 100644
Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-orders-page.png and b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-orders-page.png differ
diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-swagger-ui-create-order-execute.png b/docs/en/tutorials/modular-crm/images/abp-studio-swagger-ui-create-order-execute.png
new file mode 100644
index 0000000000..b0f384f15d
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-swagger-ui-create-order-execute.png differ
diff --git a/docs/en/tutorials/modular-crm/images/sql-server-orders-database-table-filled.png b/docs/en/tutorials/modular-crm/images/sql-server-orders-database-table-filled.png
new file mode 100644
index 0000000000..75c812593c
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/sql-server-orders-database-table-filled.png differ
diff --git a/docs/en/tutorials/modular-crm/images/sql-server-orders-table-content.png b/docs/en/tutorials/modular-crm/images/sql-server-orders-table-content.png
deleted file mode 100644
index 1bc432c650..0000000000
Binary files a/docs/en/tutorials/modular-crm/images/sql-server-orders-table-content.png and /dev/null differ
diff --git a/docs/en/tutorials/modular-crm/images/visual-studio-ordering-contracts.png b/docs/en/tutorials/modular-crm/images/visual-studio-ordering-contracts.png
new file mode 100644
index 0000000000..d9206f6630
Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/visual-studio-ordering-contracts.png differ
diff --git a/docs/en/tutorials/modular-crm/images/visual-studio-ordering-controller.png b/docs/en/tutorials/modular-crm/images/visual-studio-ordering-controller.png
deleted file mode 100644
index 56a1dad5b1..0000000000
Binary files a/docs/en/tutorials/modular-crm/images/visual-studio-ordering-controller.png and /dev/null differ
diff --git a/docs/en/tutorials/modular-crm/part-02.md b/docs/en/tutorials/modular-crm/part-02.md
index 14560b3766..de8fd69f92 100644
--- a/docs/en/tutorials/modular-crm/part-02.md
+++ b/docs/en/tutorials/modular-crm/part-02.md
@@ -41,7 +41,7 @@ We will use the *DDD Module* template for the Product module and the *Empty Modu
Right-click the `modules` folder on the *Solution Explorer* panel, and select the *Add* -> *New Module* -> *DDD Module* command:
-
+
This command opens a new dialog to define the properties of the new module. You can use the following values to create a new module named `ModularCrm.Products`:
diff --git a/docs/en/tutorials/modular-crm/part-05.md b/docs/en/tutorials/modular-crm/part-05.md
index f7d624bcbf..69a9223882 100644
--- a/docs/en/tutorials/modular-crm/part-05.md
+++ b/docs/en/tutorials/modular-crm/part-05.md
@@ -232,9 +232,215 @@ After the operation completes, you can check your database to see the new `Order

-## Creating the User Interface
+## Creating the Application Service
+
+We will create an application service to manage the `Order` entities.
+
+### Defining the Application Service Contract
+
+We're gonna create the `IOrderAppService` interface under the `ModularCrm.Ordering.Contracts` project but first, we need to add `Volo.Abp.Ddd.Application.Contracts` package reference.
+
+Right-click the `ModularCrm.Ordering.Contracts` project in the *Solution Explorer* panel and select the *Add Package Reference* command:
+
+
+
+This command opens a dialog to add a new package reference:
+
+
+
+Select the *NuGet* tab, type `Volo.Abp.Ddd.Application.Contracts` as the *Package name* and write the version of the package you want to install. Please be sure that you are installing the same version as the other ABP packages you are already using.
+
+Click the *Ok* button. Now you can check the *Packages* under the `ModularCrm.Ordering.Contracts` project *Dependencies* to see the `Volo.Abp.Ddd.Application.Contracts` package is installed:
+
+
+
+Return to your IDE, open the `ModularCrm.Ordering` module's .NET solution and create an `IOrderAppService` interface under the `Services` folder for `ModularCrm.Ordering.Contracts` project:
+
+````csharp
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Services;
+
+namespace ModularCrm.Ordering.Contracts.Services;
+
+public interface IOrderAppService : IApplicationService
+{
+ Task> GetListAsync();
+ Task CreateAsync(OrderCreationDto input);
+}
+````
+
+### Defining Data Transfer Objects
+
+The `GetListAsync` and `CreateAsync` methods will use data transfer objects (DTOs) to communicate with the client. We will create two DTO classes for that purpose.
+
+Create a `OrderCreationDto` class under the `ModularCrm.Ordering.Contracts` project:
+
+````csharp
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace ModularCrm.Ordering.Contracts.Services;
+
+public class OrderCreationDto
+{
+ [Required]
+ [StringLength(150)]
+ public string CustomerName { get; set; }
+
+ [Required]
+ public Guid ProductId { get; set; }
+}
+````
+
+Create a `OrderDto` class under the `ModularCrm.Ordering.Contracts` project:
+
+````csharp
+using System;
+using ModularCrm.Ordering.Contracts.Enums;
+
+namespace ModularCrm.Ordering.Contracts.Services;
+
+public class OrderDto
+{
+ public Guid Id { get; set; }
+ public string CustomerName { get; set; }
+ public Guid ProductId { get; set; }
+ public OrderState State { get; set; }
+}
+````
+
+The new files under the `ModularCrm.Ordering.Contracts` project should be like the following figure:
+
+
+
+### Implementing the Application Service
+
+Before creating the `OrderAppService` class, we need to add the `Volo.Abp.Ddd.Application` and `Volo.Abp.AutoMapper` packages to the Ordering module.
+
+Right-click the `ModularCrm.Ordering` package in the *Solution Explorer* panel and select the *Add Package Reference* command:
+
+
+
+This command opens a dialog to add a new package reference:
+
+
+
+Select the *NuGet* tab, enter `Volo.Abp.Ddd.Application` as the *Package name*, and specify the version of the package you wish to install. Afterward, you can add the `Volo.Abp.AutoMapper` package in the same dialog. Ensure that you install the same version as the other ABP packages you are already using.
+
+Click the *OK* button. Now we should configure the *AutoMapper* object to map the `Order` entity to the `OrderDto` object. We will create a class named `OrderingApplicationAutoMapperProfile` under the `ModularCrm.Ordering` project:
+
+````csharp
+using AutoMapper;
+using ModularCrm.Ordering.Contracts.Services;
+using ModularCrm.Ordering.Entities;
+
+namespace ModularCrm.Ordering;
+
+public class OrderingApplicationAutoMapperProfile : Profile
+{
+ public OrderingApplicationAutoMapperProfile()
+ {
+ CreateMap();
+ }
+}
+````
-Since this is a non-layered module, we can use entities and repositories directly on the user interface. If you think that is not a good practice, then use the layered module template as we've already done for the *Products* module. But for the Ordering module, we will keep it very simple for this tutorial to show it is also possible.
+And configure the `OrderingWebModule` class to use the `OrderingApplicationAutoMapperProfile`:
+
+````csharp
+public override void ConfigureServices(ServiceConfigurationContext context)
+{
+ //Add these lines
+ context.Services.AddAutoMapperObjectMapper();
+ Configure(options =>
+ {
+ options.AddMaps(validate: true);
+ });
+}
+````
+
+Now, we can implement the `IOrderAppService` interface. Create an `OrderAppService` class under the `Services` folder of the `ModularCrm.Ordering` project:
+
+````csharp
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using ModularCrm.Ordering.Contracts.Enums;
+using ModularCrm.Ordering.Contracts.Services;
+using ModularCrm.Ordering.Entities;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+
+namespace ModularCrm.Ordering.Services;
+
+public class OrderAppService : ApplicationService, IOrderAppService
+{
+ private readonly IRepository _orderRepository;
+
+ public OrderAppService(IRepository orderRepository)
+ {
+ _orderRepository = orderRepository;
+ ObjectMapperContext = typeof(OrderingWebModule);
+ }
+
+ public async Task> GetListAsync()
+ {
+ var orders = await _orderRepository.GetListAsync();
+ return ObjectMapper.Map, List>(orders);
+ }
+
+ public async Task CreateAsync(OrderCreationDto input)
+ {
+ var order = new Order
+ {
+ CustomerName = input.CustomerName,
+ ProductId = input.ProductId,
+ State = OrderState.Placed
+ };
+
+ await _orderRepository.InsertAsync(order);
+ }
+}
+````
+
+Open the `ModularCrmWebModule` class in the main application's solution (the `ModularCrm` solution), find the `ConfigureAutoApiControllers` method and add the following lines inside that method:
+
+````csharp
+private void ConfigureAutoApiControllers()
+{
+ Configure(options =>
+ {
+ options.ConventionalControllers.Create(typeof(ModularCrmApplicationModule).Assembly);
+ options.ConventionalControllers.Create(typeof(ProductsApplicationModule).Assembly);
+
+ //ADD THE FOLLOWING LINE:
+ options.ConventionalControllers.Create(typeof(OrderingWebModule).Assembly);
+ });
+}
+````
+
+### Creating Example Orders
+
+This section will create a few example orders using the [Swagger UI](../../framework/api-development/swagger.md). Thus, we will have some sample orders to show on the UI.
+
+Now, right-click the `ModularCrm` under the `main` folder in the Solution Explorer panel and select the *Dotnet CLI* -> *Graph Build* command. This will ensure that the order module and the main application are built and ready to run.
+
+After the build process completes, open the Solution Runner panel and click the *Play* button near the solution root. Once the `ModularCrm.Web` application runs, we can right-click it and select the *Browse* command to open the user interface.
+
+Once you see the user interface of the web application, type `/swagger` at the end of the URL to open the Swagger UI. If you scroll down, you should see the `Orders` API:
+
+
+
+Expand the `/api/app/order` API and click the *Try it out* button. Then, create a few orders by filling in the request body and clicking the *Execute* button:
+
+
+
+If you check the database, you should see the entities created in the *Orders* table:
+
+
+
+## Creating the User Interface
### Creating a `_ViewImports.cshtml` File
@@ -257,28 +463,26 @@ Create an `Orders` folder under the `Pages` folder and add an `Index.cshtml` Raz
````csharp
using Microsoft.AspNetCore.Mvc.RazorPages;
-using ModularCrm.Ordering.Entities;
-using System;
using System.Collections.Generic;
using System.Threading.Tasks;
-using Volo.Abp.Domain.Repositories;
+using ModularCrm.Ordering.Contracts.Services;
namespace ModularCrm.Ordering.Pages.Orders
{
public class IndexModel : PageModel
{
- public List Orders { get; set; }
+ public List Orders { get; set; }
- private readonly IRepository _orderRepository;
+ private readonly IOrderAppService _orderAppService;
- public IndexModel(IRepository orderRepository)
+ public IndexModel(IOrderAppService orderAppService)
{
- _orderRepository = orderRepository;
+ _orderAppService = orderAppService;
}
public async Task OnGetAsync()
{
- Orders = await _orderRepository.GetListAsync();
+ Orders = await _orderAppService.GetListAsync();
}
}
}
@@ -310,14 +514,6 @@ Here, we are injecting a repository to query `Order` entities from the database
This page shows a list of orders on the UI. We haven't created a UI to create new orders, and we will not do it to keep this tutorial simple. If you want to learn how to create advanced UIs with ABP, please follow the [Book Store tutorial](../book-store/index.md).
-### Creating Some Sample Data
-
-You can open the database and manually create a few order records to show on the UI:
-
-
-
-You can get `ProductId` values from the `Products` table and [generate](https://www.guidgenerator.com/) some random GUIDs for other GUID fields.
-
### Building the Application
Now, we will run the application to see the result. Please stop the application if it is already running. Then open the *Solution Runner* panel, right-click the `ModularCrm.Web` application, and select the *Build* -> *Graph Build* command:
@@ -375,11 +571,13 @@ namespace ModularCrm.Ordering
`OrderingMenuContributor` implements the `IMenuContributor` interface, which forces us to implement the `ConfigureMenuAsync` method. In that method, we can manipulate the menu items (add new menu items, remove existing menu items or change the properties of existing menu items). The `ConfigureMenuAsync` method is executed whenever the menu is rendered on the UI, so you can dynamically decide how to manipulate the menu items.
-After creating such a class, we should configure the `AbpNavigationOptions` to add that contributor. Open the `OrderingWebModule` class in the `ModularCrm.Ordering` project and add the following configuration code into the `ConfigureServices` method (if there is no `ConfigureServices` method, first create it as shown below):
+After creating such a class, we should configure the `AbpNavigationOptions` to add that contributor. Open the `OrderingWebModule` class in the `ModularCrm.Ordering` project and add the following configuration code into the `ConfigureServices` method:
````csharp
public override void ConfigureServices(ServiceConfigurationContext context)
{
+ //... other configurations
+
Configure(options =>
{
options.MenuContributors.Add(new OrderingMenuContributor());
diff --git a/docs/en/tutorials/modular-crm/part-06.md b/docs/en/tutorials/modular-crm/part-06.md
index 2fd5d82f34..eca859a8f5 100644
--- a/docs/en/tutorials/modular-crm/part-06.md
+++ b/docs/en/tutorials/modular-crm/part-06.md
@@ -145,68 +145,121 @@ ABP Studio adds the package reference and arranges the [module](../../framework/
Now, we can inject and use `IProductIntegrationService` in the Ordering module codebase.
-Open the `IndexModel` class (the `IndexModel.cshtml.cs` file under the `Pages/Orders` folder of the `ModularCrm.Ordering` project of the `ModularCrm.Ordering` .NET solution) and change its content as like the following code block:
+Open the `OrderAppService` class (the `OrderAppService.cs` file under the `Services` folder of the `ModularCrm.Ordering` project of the `ModularCrm.Ordering` .NET solution) and change its content as like the following code block:
````csharp
-using Microsoft.AspNetCore.Mvc.RazorPages;
-using ModularCrm.Ordering.Entities;
-using ModularCrm.Products.Integration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using ModularCrm.Ordering.Contracts.Enums;
+using ModularCrm.Ordering.Contracts.Services;
+using ModularCrm.Ordering.Entities;
+using ModularCrm.Products.Integration;
+using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
-namespace ModularCrm.Ordering.Pages.Orders
+namespace ModularCrm.Ordering.Services;
+
+public class OrderAppService : ApplicationService, IOrderAppService
{
- public class IndexModel : PageModel
+ private readonly IRepository _orderRepository;
+ private readonly IProductIntegrationService _productIntegrationService;
+
+ public OrderAppService(
+ IRepository orderRepository,
+ IProductIntegrationService productIntegrationService)
{
- public List Orders { get; set; }
-
- // Define a dictionary for Id -> Name conversion
- public Dictionary ProductNames { get; set; }
+ _orderRepository = orderRepository;
+ _productIntegrationService = productIntegrationService;
+ ObjectMapperContext = typeof(OrderingWebModule);
+ }
- private readonly IRepository _orderRepository;
- private readonly IProductIntegrationService _productIntegrationService;
+ public async Task> GetListAsync()
+ {
+ var orders = await _orderRepository.GetListAsync();
- public IndexModel(
- IRepository orderRepository,
- IProductIntegrationService productIntegrationService)
+ // Prepare a list of products we need
+ var productIds = orders.Select(o => o.ProductId).Distinct().ToList();
+ var products = (await _productIntegrationService
+ .GetProductsByIdsAsync(productIds))
+ .ToDictionary(p => p.Id, p => p.Name);
+
+ var result = ObjectMapper.Map, List>(orders);
+ result = result.Select(a =>
{
- _orderRepository = orderRepository;
- _productIntegrationService = productIntegrationService;
- }
+ a.ProductName = products[a.ProductId];
+ return a;
+ })
+ .ToList();
+
+ return result;
+ }
- public async Task OnGetAsync()
+ public async Task CreateAsync(OrderCreationDto input)
+ {
+ var order = new Order
{
- // Getting the orders from this module's database
- Orders = await _orderRepository.GetListAsync();
+ CustomerName = input.CustomerName,
+ ProductId = input.ProductId,
+ State = OrderState.Placed
+ };
+
+ await _orderRepository.InsertAsync(order);
+ }
+}
+````
- // Prepare a list of products we need
- var productIds = Orders.Select(o => o.ProductId).Distinct().ToList();
+And also, open the `OrderDto` class (the `OrderDto.cs` file under the `Services` folder of the `ModularCrm.Ordering.Contracts` project of the `ModularCrm.Ordering` .NET solution) and add a `ProductName` property to it:
- // Request the related products from the product integration service
- var products = await _productIntegrationService
- .GetProductsByIdsAsync(productIds);
+````csharp
+using System;
+using ModularCrm.Ordering.Contracts.Enums;
- // Create a dictionary to get a product name easily by its id
- ProductNames = products.ToDictionary(p => p.Id, p => p.Name);
- }
+namespace ModularCrm.Ordering.Contracts.Services;
+
+public class OrderDto
+{
+ public Guid Id { get; set; }
+ public string CustomerName { get; set; }
+ public Guid ProductId { get; set; }
+ public string ProductName { get; set; } // New property
+ public OrderState State { get; set; }
+}
+````
+
+Lastly, open the `OrderingApplicationAutoMapperProfile` class (the `OrderingApplicationAutoMapperProfile.cs` file under the `Services` folder of the `ModularCrm.Ordering` project of the `ModularCrm.Ordering` .NET solution) and ignore the `ProductName` property in the mapping configuration:
+
+````csharp
+using AutoMapper;
+using ModularCrm.Ordering.Contracts.Services;
+using ModularCrm.Ordering.Entities;
+using Volo.Abp.AutoMapper;
+
+namespace ModularCrm.Ordering;
+
+public class OrderingApplicationAutoMapperProfile : Profile
+{
+ public OrderingApplicationAutoMapperProfile()
+ {
+ CreateMap()
+ .Ignore(x => x.ProductName); // New line
}
}
````
Let's see what we've changed:
-* We have defined a `ProductNames` dictionary. We will use it on the UI to convert product IDs to product names. We are filling that dictionary with products from the product integration service.
+* We've added a `ProductName` property to the `OrderDto` class to store the product name.
* Injecting the `IProductIntegrationService` interface so we can use it to request products.
-* In the `OnGetAsync` method;
+* In the `GetListAsync` method;
* First getting the orders from the ordering module's database just like done before.
* Next, we are preparing a unique list of product IDs since the `GetProductsByIdsAsync` method requests it.
* Then we are calling the `IProductIntegrationService.GetProductsByIdsAsync` method to get a `List` object.
* In the last line, we are converting the product list to a dictionary, where the key is `Guid Id` and the value is `string Name`. That way, we can easily find a product's name with its ID.
+ * Finally, we are mapping the orders to `OrderDto` objects and setting the product name by looking up the product ID in the dictionary.
-Open the `Index.cshtml` file, and change the `@order.ProductId` part by `@Model.ProductNames[order.ProductId]` to write the product name instead of the product ID. The final `Index.cshtml` content should be the following:
+Open the `Index.cshtml` file, and change the `@order.ProductId` part by `@Model.ProductName` to write the product name instead of the product ID. The final `Index.cshtml` content should be the following:
````html
@page
@@ -219,11 +272,11 @@ Open the `Index.cshtml` file, and change the `@order.ProductId` part by `@Model.
@foreach (var order in Model.Orders)
{
-
- Customer: @order.CustomerName
- Product: @Model.ProductNames[order.ProductId]
- State: @order.State
-
+
+ Customer: @order.CustomerName
+ Product: @order.ProductName
+ State: @order.State
+
}
@@ -241,4 +294,3 @@ In the way explained in this section, you can easily create integration services
> **Design Tip**
>
> It is suggested that you keep that type of communication to a minimum and not couple your modules with each other. It can make your solution complicated and may also decrease your system performance. When you need to do it, think about performance and try to make some optimizations. For example, if the Ordering module frequently needs product data, you can use a kind of [cache layer](../../framework/fundamentals/caching.md), so it doesn't make frequent requests to the Products module. Especially if you consider converting your system to a microservice solution in the future, too many direct integration API calls can be a performance bottleneck.
-
diff --git a/docs/en/tutorials/modular-crm/part-07.md b/docs/en/tutorials/modular-crm/part-07.md
index 9dc18648bd..de02c08fee 100644
--- a/docs/en/tutorials/modular-crm/part-07.md
+++ b/docs/en/tutorials/modular-crm/part-07.md
@@ -56,83 +56,87 @@ namespace ModularCrm.Ordering.Contracts.Events
### Using the `IDistributedEventBus` Service
-The `IDistributedEventBus` service publishes events to the event bus. Until this point, the Ordering module has no functionality to create new orders.
-
-In Part 3, we used ABP's Auto HTTP API Controller feature to expose HTTP APIs from application services automatically. In this section, we will create an ASP.NET Core API controller class to create a new order. In that way, you will also see that it is not different from creating a regular ASP.NET Core controller.
-
-Open the `ModularCrm.Ordering` module's .NET solution, create a `Controllers` folder in the `ModularCrm.Ordering` project and place a controller class named `OrdersController` in that new folder. The final folder structure should be like that:
-
-
-
-Here is the full `OrdersController` class:
+The `IDistributedEventBus` service publishes events to the event bus. Until this point, the Ordering module has no functionality to create new orders. Let's change that and place an order, for that purpose open the `ModularCrm.Ordering` module's .NET solution, and update the `OrderAppService` as follows:
````csharp
-using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
using ModularCrm.Ordering.Contracts.Enums;
using ModularCrm.Ordering.Contracts.Events;
+using ModularCrm.Ordering.Contracts.Services;
using ModularCrm.Ordering.Entities;
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.Threading.Tasks;
-using Volo.Abp.AspNetCore.Mvc;
+using ModularCrm.Products.Integration;
+using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.EventBus.Distributed;
-namespace ModularCrm.Ordering.Controllers
+namespace ModularCrm.Ordering.Services;
+
+public class OrderAppService : ApplicationService, IOrderAppService
{
- [Route("api/orders")]
- [ApiController]
- public class OrdersController : AbpControllerBase
+ private readonly IRepository _orderRepository;
+ private readonly IProductIntegrationService _productIntegrationService;
+ private readonly IDistributedEventBus _distributedEventBus;
+
+ public OrderAppService(
+ IRepository orderRepository,
+ IProductIntegrationService productIntegrationService,
+ IDistributedEventBus distributedEventBus)
{
- private readonly IRepository _orderRepository;
- private readonly IDistributedEventBus _distributedEventBus;
+ _orderRepository = orderRepository;
+ _productIntegrationService = productIntegrationService;
+ _distributedEventBus = distributedEventBus;
+ ObjectMapperContext = typeof(OrderingWebModule);
+ }
- public OrdersController(
- IRepository orderRepository,
- IDistributedEventBus distributedEventBus)
- {
- _orderRepository = orderRepository;
- _distributedEventBus = distributedEventBus;
- }
+ public async Task> GetListAsync()
+ {
+ var orders = await _orderRepository.GetListAsync();
+
+ // Prepare a list of products we need
+ var productIds = orders.Select(o => o.ProductId).Distinct().ToList();
+ var products = (await _productIntegrationService
+ .GetProductsByIdsAsync(productIds))
+ .ToDictionary(p => p.Id, p => p.Name);
- [HttpPost]
- public async Task CreateAsync(OrderCreationModel input)
+ var result = ObjectMapper.Map, List>(orders);
+ result = result.Select(a =>
{
- // Create a new Order entity
- var order = new Order
- {
- CustomerName = input.CustomerName,
- ProductId = input.ProductId,
- State = OrderState.Placed
- };
-
- // Save it to the database
- await _orderRepository.InsertAsync(order);
-
- // Publish an event so other modules can be informed
- await _distributedEventBus.PublishAsync(
- new OrderPlacedEto
- {
- ProductId = order.ProductId,
- CustomerName = order.CustomerName
- });
-
- return Created();
- }
+ a.ProductName = products[a.ProductId];
+ return a;
+ })
+ .ToList();
- public class OrderCreationModel
+ return result;
+ }
+
+ public async Task CreateAsync(OrderCreationDto input)
+ {
+ // Create a new Order entity
+ var order = new Order
{
- public Guid ProductId { get; set; }
+ CustomerName = input.CustomerName,
+ ProductId = input.ProductId,
+ State = OrderState.Placed
+ };
- [Required]
- [StringLength(120)]
- public string CustomerName { get; set; }
- }
+ // Save it to the database
+ await _orderRepository.InsertAsync(order);
+
+ // Publish an event so other modules can be informed
+ await _distributedEventBus.PublishAsync(
+ new OrderPlacedEto
+ {
+ ProductId = order.ProductId,
+ CustomerName = order.CustomerName
+ });
}
}
````
-The `OrdersController.CreateAsync` method creates a new `Order` entity, saves it to the database and finally publishes an `OrderPlacedEto` event.
+The `OrderAppService.CreateAsync` method creates a new `Order` entity, saves it to the database and finally publishes an `OrderPlacedEto` event.
## Subscribing to an Event
diff --git a/framework/src/Volo.Abp.ApiVersioning.Abstractions/Volo.Abp.ApiVersioning.Abstractions.csproj b/framework/src/Volo.Abp.ApiVersioning.Abstractions/Volo.Abp.ApiVersioning.Abstractions.csproj
index b869a45a2e..f4de4a2e88 100644
--- a/framework/src/Volo.Abp.ApiVersioning.Abstractions/Volo.Abp.ApiVersioning.Abstractions.csproj
+++ b/framework/src/Volo.Abp.ApiVersioning.Abstractions/Volo.Abp.ApiVersioning.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.ApiVersioning.Abstractions
diff --git a/framework/src/Volo.Abp.AspNetCore.Abstractions/Volo.Abp.AspNetCore.Abstractions.csproj b/framework/src/Volo.Abp.AspNetCore.Abstractions/Volo.Abp.AspNetCore.Abstractions.csproj
index c96dbc0c7b..b080fc603d 100644
--- a/framework/src/Volo.Abp.AspNetCore.Abstractions/Volo.Abp.AspNetCore.Abstractions.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Abstractions/Volo.Abp.AspNetCore.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.AspNetCore.Abstractions
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj
index 839053bc90..2e22d5194f 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.Authentication.JwtBearer
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj
index b31876c3d4..f7ea626835 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.Authentication.OAuth
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj
index 4542fc4cb5..caf1547ead 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.csproj b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.csproj
index 93497ad4be..d3a900f185 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo.Abp.AspNetCore.Components.MauiBlazor.csproj b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo.Abp.AspNetCore.Components.MauiBlazor.csproj
index 031ffd1ede..873eba572d 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo.Abp.AspNetCore.Components.MauiBlazor.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo.Abp.AspNetCore.Components.MauiBlazor.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.Components.MauiBlazor
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj
index 8fffb65f5e..dda318e3e4 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Microsoft/AspNetCore/Authentication/Cookies/CookieAuthenticationOptionsExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server/Microsoft/AspNetCore/Authentication/Cookies/CookieAuthenticationOptionsExtensions.cs
index 7852848e30..9d303579da 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Server/Microsoft/AspNetCore/Authentication/Cookies/CookieAuthenticationOptionsExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Microsoft/AspNetCore/Authentication/Cookies/CookieAuthenticationOptionsExtensions.cs
@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
+using Volo.Abp.Threading;
namespace Microsoft.AspNetCore.Authentication.Cookies;
@@ -70,7 +71,8 @@ public static class CookieAuthenticationOptionsExtensions
var openIdConnectOptions = principalContext.HttpContext.RequestServices.GetRequiredService>().Get(oidcAuthenticationScheme);
if (openIdConnectOptions.Configuration == null && openIdConnectOptions.ConfigurationManager != null)
{
- openIdConnectOptions.Configuration = await openIdConnectOptions.ConfigurationManager.GetConfigurationAsync(principalContext.HttpContext.RequestAborted);
+ var cancellationTokenProvider = principalContext.HttpContext.RequestServices.GetRequiredService();
+ openIdConnectOptions.Configuration = await openIdConnectOptions.ConfigurationManager.GetConfigurationAsync(cancellationTokenProvider.Token);
}
return openIdConnectOptions;
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj
index 338a538402..a5d4f97e59 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Volo.Abp.AspNetCore.Components.Web.Theming.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Volo.Abp.AspNetCore.Components.Web.Theming.csproj
index 03fa885d60..e68024d6e9 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Volo.Abp.AspNetCore.Components.Web.Theming.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Volo.Abp.AspNetCore.Components.Web.Theming.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj
index f43a89e7cc..fb1a56949d 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo.Abp.AspNetCore.Components.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj
index 395891fb82..902163f391 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj
index 614148ec52..084c8aad97 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo.Abp.AspNetCore.Components.WebAssembly.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.Components.WebAssembly
diff --git a/framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj b/framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj
index df1dc14e74..f4663354c9 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components/Volo.Abp.AspNetCore.Components.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.Components
diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj
index 42a1facb98..22a2cb4247 100644
--- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.MultiTenancy
diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs
index 95efaf2d0c..7ac6f41176 100644
--- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs
+++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs
@@ -19,6 +19,7 @@ using Microsoft.Net.Http.Headers;
using Volo.Abp.Http;
using Volo.Abp.Json;
using Volo.Abp.MultiTenancy;
+using Volo.Abp.Threading;
namespace Volo.Abp.AspNetCore.MultiTenancy;
@@ -92,15 +93,16 @@ public class AbpAspNetCoreMultiTenancyOptions
context.Response.ContentType = resolvedContentType;
context.Response.StatusCode = (int)HttpStatusCode.NotFound;
+ var cancellationTokenProvider = context.RequestServices.GetRequiredService();
var responseStream = context.Response.Body;
if (resolvedContentTypeEncoding.CodePage == Encoding.UTF8.CodePage)
{
try
{
- await JsonSerializer.SerializeAsync(responseStream, error, error.GetType(), jsonSerializerOptions, context.RequestAborted);
- await responseStream.FlushAsync(context.RequestAborted);
+ await JsonSerializer.SerializeAsync(responseStream, error, error.GetType(), jsonSerializerOptions, cancellationTokenProvider.Token);
+ await responseStream.FlushAsync(cancellationTokenProvider.Token);
}
- catch (OperationCanceledException) when (context.RequestAborted.IsCancellationRequested) { }
+ catch (OperationCanceledException) when (cancellationTokenProvider.Token.IsCancellationRequested) { }
}
else
{
@@ -108,10 +110,10 @@ public class AbpAspNetCoreMultiTenancyOptions
ExceptionDispatchInfo? exceptionDispatchInfo = null;
try
{
- await JsonSerializer.SerializeAsync(transcodingStream, error, error.GetType(), jsonSerializerOptions, context.RequestAborted);
- await transcodingStream.FlushAsync(context.RequestAborted);
+ await JsonSerializer.SerializeAsync(transcodingStream, error, error.GetType(), jsonSerializerOptions, cancellationTokenProvider.Token);
+ await transcodingStream.FlushAsync(cancellationTokenProvider.Token);
}
- catch (OperationCanceledException) when (context.RequestAborted.IsCancellationRequested) { }
+ catch (OperationCanceledException) when (cancellationTokenProvider.Token.IsCancellationRequested) { }
catch (Exception ex)
{
exceptionDispatchInfo = ExceptionDispatchInfo.Capture(ex);
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo.Abp.AspNetCore.Mvc.Client.Common.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo.Abp.AspNetCore.Mvc.Client.Common.csproj
index e3b509110c..b6df7bac5b 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo.Abp.AspNetCore.Mvc.Client.Common.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo.Abp.AspNetCore.Mvc.Client.Common.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.AspNetCore.Mvc.Client.Common
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj
index 2151b04985..31309bbe31 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.Mvc.Client
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo.Abp.AspNetCore.Mvc.Contracts.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo.Abp.AspNetCore.Mvc.Contracts.csproj
index fa7082e9c1..8e960c8180 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo.Abp.AspNetCore.Mvc.Contracts.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo.Abp.AspNetCore.Mvc.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.AspNetCore.Mvc.Contracts
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj
index de2b2e5a81..d098c0e5e9 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus/Volo.Abp.AspNetCore.Mvc.Dapr.EventBus.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj
index a5d89d0ab4..05a5918a1c 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Dapr/Volo.Abp.AspNetCore.Mvc.Dapr.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj
index 7f8fab67a5..863024a9e9 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj
index 86405042b1..8a84188800 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions.csproj
index 60409e9c78..ae39f970e0 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions/Volo.Abp.AspNetCore.Mvc.UI.Bundling.Abstractions.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj
index fefd0dfaa6..fd3995f797 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo.Abp.AspNetCore.Mvc.UI.Bundling.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj
index a1c1dc8a82..16e988aebe 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj
index 4679eff65c..d60edceedd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj
index fb63da0a26..8fb1ba8503 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj
index d2c64435c5..97f88e607d 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj
index f1fad26806..79f13d7dec 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj
index 8393744971..10799dce48 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj
index a6e2edc2cf..1e27cbac3b 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs
index 4a6a04a554..9512a82698 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs
@@ -1,11 +1,13 @@
using System;
using System.Net.Http;
+using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Filters;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Threading;
using Volo.Abp.Uow;
namespace Volo.Abp.AspNetCore.Mvc.Uow;
@@ -37,6 +39,7 @@ public class AbpUowActionFilter : IAsyncActionFilter, IAbpFilter, ITransientDepe
var options = CreateOptions(context, unitOfWorkAttr);
var unitOfWorkManager = context.GetRequiredService();
+ var cancellationTokenProvider = context.GetRequiredService();
//Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware
if (unitOfWorkManager.TryBeginReserved(UnitOfWork.UnitOfWorkReservationName, options))
@@ -44,11 +47,11 @@ public class AbpUowActionFilter : IAsyncActionFilter, IAbpFilter, ITransientDepe
var result = await next();
if (Succeed(result))
{
- await SaveChangesAsync(context, unitOfWorkManager);
+ await SaveChangesAsync(context, unitOfWorkManager, cancellationTokenProvider.Token);
}
else
{
- await RollbackAsync(context, unitOfWorkManager);
+ await RollbackAsync(context, unitOfWorkManager, cancellationTokenProvider.Token);
}
return;
@@ -59,11 +62,11 @@ public class AbpUowActionFilter : IAsyncActionFilter, IAbpFilter, ITransientDepe
var result = await next();
if (Succeed(result))
{
- await uow.CompleteAsync(context.HttpContext.RequestAborted);
+ await uow.CompleteAsync(cancellationTokenProvider.Token);
}
else
{
- await uow.RollbackAsync(context.HttpContext.RequestAborted);
+ await uow.RollbackAsync(cancellationTokenProvider.Token);
}
}
}
@@ -85,27 +88,27 @@ public class AbpUowActionFilter : IAsyncActionFilter, IAbpFilter, ITransientDepe
return options;
}
- private async Task RollbackAsync(ActionExecutingContext context, IUnitOfWorkManager unitOfWorkManager)
+ private async Task RollbackAsync(ActionExecutingContext context, IUnitOfWorkManager unitOfWorkManager, CancellationToken cancellationToken)
{
var currentUow = unitOfWorkManager.Current;
if (currentUow != null)
{
- await currentUow.RollbackAsync(context.HttpContext.RequestAborted);
+ await currentUow.RollbackAsync(cancellationToken);
}
}
- private async Task SaveChangesAsync(ActionExecutingContext context, IUnitOfWorkManager unitOfWorkManager)
+ private async Task SaveChangesAsync(ActionExecutingContext context, IUnitOfWorkManager unitOfWorkManager, CancellationToken cancellationToken)
{
var currentUow = unitOfWorkManager.Current;
if (currentUow != null)
{
try
{
- await currentUow.SaveChangesAsync(context.HttpContext.RequestAborted);
+ await currentUow.SaveChangesAsync(cancellationToken);
}
catch (Exception e)
{
- await currentUow.RollbackAsync(context.HttpContext.RequestAborted);
+ await currentUow.RollbackAsync(cancellationToken);
throw;
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowPageFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowPageFilter.cs
index f4a7be3333..5c69c07797 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowPageFilter.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowPageFilter.cs
@@ -1,5 +1,6 @@
using System;
using System.Net.Http;
+using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.Filters;
@@ -7,6 +8,7 @@ using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Filters;
using Volo.Abp.AspNetCore.Uow;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Threading;
using Volo.Abp.Uow;
namespace Volo.Abp.AspNetCore.Mvc.Uow;
@@ -43,6 +45,7 @@ public class AbpUowPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDependen
var options = CreateOptions(context, unitOfWorkAttr);
var unitOfWorkManager = context.GetRequiredService();
+ var cancellationTokenProvider = context.GetRequiredService();
//Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware
if (unitOfWorkManager.TryBeginReserved(UnitOfWork.UnitOfWorkReservationName, options))
@@ -50,11 +53,11 @@ public class AbpUowPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDependen
var result = await next();
if (Succeed(result))
{
- await SaveChangesAsync(context, unitOfWorkManager);
+ await SaveChangesAsync(context, unitOfWorkManager, cancellationTokenProvider.Token);
}
else
{
- await RollbackAsync(context, unitOfWorkManager);
+ await RollbackAsync(context, unitOfWorkManager, cancellationTokenProvider.Token);
}
return;
@@ -65,11 +68,11 @@ public class AbpUowPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDependen
var result = await next();
if (Succeed(result))
{
- await uow.CompleteAsync(context.HttpContext.RequestAborted);
+ await uow.CompleteAsync(cancellationTokenProvider.Token);
}
else
{
- await uow.RollbackAsync(context.HttpContext.RequestAborted);
+ await uow.RollbackAsync(cancellationTokenProvider.Token);
}
}
}
@@ -91,27 +94,27 @@ public class AbpUowPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDependen
return options;
}
- private async Task RollbackAsync(PageHandlerExecutingContext context, IUnitOfWorkManager unitOfWorkManager)
+ private async Task RollbackAsync(PageHandlerExecutingContext context, IUnitOfWorkManager unitOfWorkManager, CancellationToken cancellationToken)
{
var currentUow = unitOfWorkManager.Current;
if (currentUow != null)
{
- await currentUow.RollbackAsync(context.HttpContext.RequestAborted);
+ await currentUow.RollbackAsync(cancellationToken);
}
}
- private async Task SaveChangesAsync(PageHandlerExecutingContext context, IUnitOfWorkManager unitOfWorkManager)
+ private async Task SaveChangesAsync(PageHandlerExecutingContext context, IUnitOfWorkManager unitOfWorkManager, CancellationToken cancellationToken)
{
var currentUow = unitOfWorkManager.Current;
if (currentUow != null)
{
try
{
- await currentUow.SaveChangesAsync(context.HttpContext.RequestAborted);
+ await currentUow.SaveChangesAsync(cancellationToken);
}
catch (Exception e)
{
- await currentUow.RollbackAsync(context.HttpContext.RequestAborted);
+ await currentUow.RollbackAsync(cancellationToken);
throw;
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj
index 609b8c06f3..94606f1834 100644
--- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.Serilog
diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj
index 19b2b748af..171bf052d0 100644
--- a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.SignalR
diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj
index d919581455..6c12c63e61 100644
--- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore.TestBase
diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs
index 403bbac7b1..3b5ccb38c9 100644
--- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebApplicationBuilderExtensions.cs
@@ -9,15 +9,16 @@ namespace Volo.Abp.AspNetCore.TestBase;
public static class WebApplicationBuilderExtensions
{
- public async static Task RunAbpModuleAsync(this WebApplicationBuilder builder, Action? optionsAction = null)
+ public async static Task RunAbpModuleAsync(this WebApplicationBuilder builder, Action? optionsAction = null, string? applicationName = null)
where TModule : IAbpModule
{
- var assemblyName = typeof(TModule).Assembly.GetName()?.Name;
- if (!assemblyName.IsNullOrWhiteSpace())
+ applicationName = applicationName ?? typeof(TModule).Assembly.GetName()?.Name;
+ if (!applicationName.IsNullOrWhiteSpace())
{
// Set the application name as the assembly name of the module will automatically add assembly to the ApplicationParts of MVC application.
- builder.Environment.ApplicationName = assemblyName!;
+ builder.Environment.ApplicationName = applicationName;
}
+
builder.Host.UseAutofac();
await builder.AddApplicationAsync(optionsAction);
var app = builder.Build();
diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebProjectPatchHelper.cs b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebProjectPatchHelper.cs
new file mode 100644
index 0000000000..96d8d2383c
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo/Abp/AspNetCore/TestBase/WebProjectPatchHelper.cs
@@ -0,0 +1,28 @@
+using System.IO;
+
+namespace Volo.Abp.AspNetCore.TestBase;
+
+public static class GetWebProjectContentRootPathHelper
+{
+ public static string Get(string webProjectName)
+ {
+ var currentDirectory = new DirectoryInfo(Directory.GetCurrentDirectory());
+
+ while (currentDirectory != null && Directory.GetParent(currentDirectory.FullName) != null)
+ {
+ currentDirectory = Directory.GetParent(currentDirectory.FullName);
+ if (currentDirectory == null)
+ {
+ continue;
+ }
+
+ var files = currentDirectory.GetFiles(webProjectName, SearchOption.AllDirectories);
+ if (files.Length > 0)
+ {
+ return files[0].DirectoryName!;
+ }
+ }
+
+ throw new AbpException($"Web project({webProjectName}) not found!");
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
index 730fe98533..bd653faf55 100644
--- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
@@ -1,9 +1,15 @@
using System;
+using System.IO;
using System.Threading.Tasks;
using JetBrains.Annotations;
+using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.RequestLocalization;
+using Microsoft.AspNetCore.Routing;
+using Microsoft.AspNetCore.StaticAssets;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Options;
using Volo.Abp;
using Volo.Abp.AspNetCore.Auditing;
using Volo.Abp.AspNetCore.ExceptionHandling;
@@ -11,8 +17,10 @@ using Volo.Abp.AspNetCore.Security;
using Volo.Abp.AspNetCore.Security.Claims;
using Volo.Abp.AspNetCore.Tracing;
using Volo.Abp.AspNetCore.Uow;
+using Volo.Abp.AspNetCore.VirtualFileSystem;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Threading;
+using Volo.Abp.VirtualFileSystem;
namespace Microsoft.AspNetCore.Builder;
@@ -117,4 +125,75 @@ public static class AbpApplicationBuilderExtensions
{
return app.UseMiddleware();
}
+
+ ///
+ /// MapAbpStaticAssets is used to serve the files from the abp virtual file system embedded resources(js/css) and call the MapStaticAssets.
+ ///
+ public static StaticAssetsEndpointConventionBuilder MapAbpStaticAssets(this WebApplication app, string? staticAssetsManifestPath = null)
+ {
+ return app.As().MapAbpStaticAssets(staticAssetsManifestPath);
+ }
+
+ ///
+ /// MapAbpStaticAssets is used to serve the files from the abp virtual file system embedded resources(js/css) and call the MapStaticAssets.
+ ///
+ public static StaticAssetsEndpointConventionBuilder MapAbpStaticAssets(this IApplicationBuilder app, string? staticAssetsManifestPath = null)
+ {
+ if (app is not IEndpointRouteBuilder endpoints)
+ {
+ throw new AbpException("The app(IApplicationBuilder) is not an IEndpointRouteBuilder.");
+ }
+
+ app.UseVirtualStaticFiles();
+
+ var options = app.ApplicationServices.GetRequiredService>().Value;
+ foreach (var folder in options.AllowedExtraWebContentFolders)
+ {
+ app.UseVirtualStaticFiles(folder);
+ }
+
+ return endpoints.MapStaticAssets(staticAssetsManifestPath);
+ }
+
+ ///
+ /// This static file provider is used to serve the files from the abp virtual file system embedded resources(js/css).
+ /// It will not serve the files from the application's wwwroot folder.
+ ///
+ public static IApplicationBuilder UseVirtualStaticFiles(this IApplicationBuilder app)
+ {
+ app.UseStaticFiles(new StaticFileOptions()
+ {
+ ContentTypeProvider = app.ApplicationServices.GetRequiredService(),
+ FileProvider = new WebContentFileProvider(
+ app.ApplicationServices.GetRequiredService(),
+ new EmptyHostingEnvironment(),
+ app.ApplicationServices.GetRequiredService>()
+ )
+ });
+
+ return app;
+ }
+
+ ///
+ /// This static file provider is used to serve the files from the folder.
+ ///
+ public static IApplicationBuilder UseVirtualStaticFiles(this IApplicationBuilder app, string folder)
+ {
+ folder = folder.TrimStart('/').TrimEnd('/');
+
+ var root = Path.Combine(app.ApplicationServices.GetRequiredService().ContentRootPath, folder);
+ if (!Directory.Exists(root))
+ {
+ return app;
+ }
+
+ app.UseStaticFiles(new StaticFileOptions
+ {
+ ContentTypeProvider = app.ApplicationServices.GetRequiredService(),
+ FileProvider = new PhysicalFileProvider(root),
+ RequestPath = $"/{folder}"
+ });
+
+ return app;
+ }
}
diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/CookieAuthenticationOptionsExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/CookieAuthenticationOptionsExtensions.cs
index 15e353431e..74def27c8e 100644
--- a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/CookieAuthenticationOptionsExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/CookieAuthenticationOptionsExtensions.cs
@@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
+using Volo.Abp.Threading;
namespace Microsoft.Extensions.DependencyInjection;
@@ -84,9 +85,10 @@ public static class CookieAuthenticationOptionsExtensions
private async static Task GetOpenIdConnectOptions(CookieValidatePrincipalContext principalContext, string oidcAuthenticationScheme)
{
var openIdConnectOptions = principalContext.HttpContext.RequestServices.GetRequiredService>().Get(oidcAuthenticationScheme);
+ var cancellationTokenProvider = principalContext.HttpContext.RequestServices.GetRequiredService();
if (openIdConnectOptions.Configuration == null && openIdConnectOptions.ConfigurationManager != null)
{
- openIdConnectOptions.Configuration = await openIdConnectOptions.ConfigurationManager.GetConfigurationAsync(principalContext.HttpContext.RequestAborted);
+ openIdConnectOptions.Configuration = await openIdConnectOptions.ConfigurationManager.GetConfigurationAsync(cancellationTokenProvider.Token);
}
return openIdConnectOptions;
diff --git a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj
index c6326e3e95..d88febbfe9 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj
+++ b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AspNetCore
diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs
index a3c98978f0..74833bf748 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs
@@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Middleware;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Threading;
using Volo.Abp.Uow;
namespace Volo.Abp.AspNetCore.Uow;
@@ -14,13 +15,16 @@ public class AbpUnitOfWorkMiddleware : AbpMiddlewareBase, ITransientDependency
{
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly AbpAspNetCoreUnitOfWorkOptions _options;
+ private readonly ICancellationTokenProvider _cancellationTokenProvider;
public AbpUnitOfWorkMiddleware(
IUnitOfWorkManager unitOfWorkManager,
- IOptions options)
+ IOptions options,
+ ICancellationTokenProvider cancellationTokenProvider)
{
_unitOfWorkManager = unitOfWorkManager;
_options = options.Value;
+ _cancellationTokenProvider = cancellationTokenProvider;
}
public async override Task InvokeAsync(HttpContext context, RequestDelegate next)
@@ -34,7 +38,7 @@ public class AbpUnitOfWorkMiddleware : AbpMiddlewareBase, ITransientDependency
using (var uow = _unitOfWorkManager.Reserve(UnitOfWork.UnitOfWorkReservationName))
{
await next(context);
- await uow.CompleteAsync(context.RequestAborted);
+ await uow.CompleteAsync(_cancellationTokenProvider.Token);
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs
index 9814dd8c97..313ded53ac 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs
@@ -85,23 +85,22 @@ public class WebContentFileProvider : IWebContentFileProvider, ISingletonDepende
return new CompositeChangeToken(
new[]
{
- _fileProvider.Watch(_rootPath + filter),
- _fileProvider.Watch(filter)
+ _fileProvider.Watch(_rootPath + filter),
+ _fileProvider.Watch(filter)
}
);
}
protected virtual IFileProvider CreateFileProvider()
{
- var fileProviders = new List
- {
- new PhysicalFileProvider(_hostingEnvironment.ContentRootPath),
- _virtualFileProvider
- };
+ var fileProviders = new List();
+ if (!_hostingEnvironment.ContentRootPath.IsNullOrEmpty())
+ {
+ fileProviders.Add(new PhysicalFileProvider(_hostingEnvironment.ContentRootPath));
+ }
- return new CompositeFileProvider(
- fileProviders
- );
+ fileProviders.Add(_virtualFileProvider);
+ return new CompositeFileProvider(fileProviders);
}
protected virtual bool ExtraAllowedFolder(string path)
diff --git a/framework/src/Volo.Abp.Auditing.Contracts/Volo.Abp.Auditing.Contracts.csproj b/framework/src/Volo.Abp.Auditing.Contracts/Volo.Abp.Auditing.Contracts.csproj
index b99c502a61..f15bac5a92 100644
--- a/framework/src/Volo.Abp.Auditing.Contracts/Volo.Abp.Auditing.Contracts.csproj
+++ b/framework/src/Volo.Abp.Auditing.Contracts/Volo.Abp.Auditing.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Auditing.Contracts
diff --git a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj
index fc2a565b19..5bfbf26366 100644
--- a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj
+++ b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Auditing
diff --git a/framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj b/framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj
index 14d337d15a..3a201ee7ae 100644
--- a/framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj
+++ b/framework/src/Volo.Abp.Authorization.Abstractions/Volo.Abp.Authorization.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Authorization.Abstractions
diff --git a/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj b/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj
index 492d1bc4ef..dfaea2aadb 100644
--- a/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj
+++ b/framework/src/Volo.Abp.Authorization/Volo.Abp.Authorization.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Authorization
diff --git a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj
index f56a92a11e..8d12eca643 100644
--- a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj
+++ b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.AutoMapper
diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/Volo.Abp.Autofac.WebAssembly.csproj b/framework/src/Volo.Abp.Autofac.WebAssembly/Volo.Abp.Autofac.WebAssembly.csproj
index 1f00652a55..f3b7261a4c 100644
--- a/framework/src/Volo.Abp.Autofac.WebAssembly/Volo.Abp.Autofac.WebAssembly.csproj
+++ b/framework/src/Volo.Abp.Autofac.WebAssembly/Volo.Abp.Autofac.WebAssembly.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj
index 60a7418bb5..417a7b4f2f 100644
--- a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj
+++ b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Autofac
diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj b/framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj
index 151b54c7d6..b0b668a144 100644
--- a/framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj
+++ b/framework/src/Volo.Abp.AzureServiceBus/Volo.Abp.AzureServiceBus.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.AzureServiceBus
diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo.Abp.BackgroundJobs.Abstractions.csproj b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo.Abp.BackgroundJobs.Abstractions.csproj
index 328023311c..f013740401 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo.Abp.BackgroundJobs.Abstractions.csproj
+++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo.Abp.BackgroundJobs.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BackgroundJobs.Abstractions
diff --git a/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo.Abp.BackgroundJobs.HangFire.csproj b/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo.Abp.BackgroundJobs.HangFire.csproj
index 2ef1330823..2e88148bb5 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo.Abp.BackgroundJobs.HangFire.csproj
+++ b/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo.Abp.BackgroundJobs.HangFire.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BackgroundJobs.HangFire
diff --git a/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo.Abp.BackgroundJobs.Quartz.csproj b/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo.Abp.BackgroundJobs.Quartz.csproj
index 4860ca398b..52cbe0b9be 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo.Abp.BackgroundJobs.Quartz.csproj
+++ b/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo.Abp.BackgroundJobs.Quartz.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BackgroundJobs.Quartz
diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo.Abp.BackgroundJobs.RabbitMQ.csproj b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo.Abp.BackgroundJobs.RabbitMQ.csproj
index ac0473470a..947cadec96 100644
--- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo.Abp.BackgroundJobs.RabbitMQ.csproj
+++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo.Abp.BackgroundJobs.RabbitMQ.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BackgroundJobs.RabbitMQ
diff --git a/framework/src/Volo.Abp.BackgroundJobs/Volo.Abp.BackgroundJobs.csproj b/framework/src/Volo.Abp.BackgroundJobs/Volo.Abp.BackgroundJobs.csproj
index b6a0ba00d1..acc0de1097 100644
--- a/framework/src/Volo.Abp.BackgroundJobs/Volo.Abp.BackgroundJobs.csproj
+++ b/framework/src/Volo.Abp.BackgroundJobs/Volo.Abp.BackgroundJobs.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BackgroundJobs
diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo.Abp.BackgroundWorkers.Hangfire.csproj b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo.Abp.BackgroundWorkers.Hangfire.csproj
index 752a3b35d3..a177b5c2de 100644
--- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo.Abp.BackgroundWorkers.Hangfire.csproj
+++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo.Abp.BackgroundWorkers.Hangfire.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BackgroundWorkers.Hangfire
diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo.Abp.BackgroundWorkers.Quartz.csproj b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo.Abp.BackgroundWorkers.Quartz.csproj
index a066795c3e..4a6df3d769 100644
--- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo.Abp.BackgroundWorkers.Quartz.csproj
+++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo.Abp.BackgroundWorkers.Quartz.csproj
@@ -5,7 +5,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BackgroundWorkers.Quartz
diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo.Abp.BackgroundWorkers.csproj b/framework/src/Volo.Abp.BackgroundWorkers/Volo.Abp.BackgroundWorkers.csproj
index 6c3078ccf7..f55568c37b 100644
--- a/framework/src/Volo.Abp.BackgroundWorkers/Volo.Abp.BackgroundWorkers.csproj
+++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo.Abp.BackgroundWorkers.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BackgroundWorkers
diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
index 1018eb3efa..7544173944 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
+++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
@@ -319,6 +319,7 @@ public abstract class AbpCrudPageBase<
{
CurrentSorting = e.Columns
.Where(c => c.SortDirection != SortDirection.Default)
+ .OrderBy(c => c.SortIndex)
.Select(c => c.SortField + (c.SortDirection == SortDirection.Descending ? " DESC" : ""))
.JoinAsString(",");
CurrentPage = e.Page;
diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
index ab0c8bc440..ab6d1fb80f 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
+++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj
index 63490ca237..4c5fbf1fcc 100644
--- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj
+++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo.Abp.BlobStoring.Aliyun.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BlobStoring.Aliyun
diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj b/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj
index fb260147e1..4eebeba0ff 100644
--- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj
+++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo.Abp.BlobStoring.Aws.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
false
diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj b/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj
index 56bc02e89f..509d3d26bf 100644
--- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj
+++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo.Abp.BlobStoring.Azure.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BlobStoring.Azure
diff --git a/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj b/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj
index 0b73a6b802..0b1618bd44 100644
--- a/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj
+++ b/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo.Abp.BlobStoring.FileSystem.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BlobStoring.FileSystem
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj b/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj
index 073c8c1891..a452f2a129 100644
--- a/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BlobStoring.Google
diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj b/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj
index 07d86e4a89..8a2dff731a 100644
--- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj
+++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.BlobStoring.Minio
diff --git a/framework/src/Volo.Abp.BlobStoring/Volo.Abp.BlobStoring.csproj b/framework/src/Volo.Abp.BlobStoring/Volo.Abp.BlobStoring.csproj
index e2450b56b7..c9774f4f81 100644
--- a/framework/src/Volo.Abp.BlobStoring/Volo.Abp.BlobStoring.csproj
+++ b/framework/src/Volo.Abp.BlobStoring/Volo.Abp.BlobStoring.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.BlobStoring
diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj
index 2e7683cee9..3655edbc7d 100644
--- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj
+++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo.Abp.Caching.StackExchangeRedis.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Caching.StackExchangeRedis
diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs
index c5ae0b5393..900f252a77 100644
--- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs
+++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs
@@ -1,4 +1,5 @@
using System;
+using System.Buffers;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
@@ -16,21 +17,21 @@ namespace Volo.Abp.Caching.StackExchangeRedis;
[DisableConventionalRegistration]
public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems
{
- protected static readonly string AbsoluteExpirationKey;
- protected static readonly string SlidingExpirationKey;
- protected static readonly string DataKey;
- protected static readonly long NotPresent;
- protected static readonly RedisValue[] HashMembersAbsoluteExpirationSlidingExpirationData;
- protected static readonly RedisValue[] HashMembersAbsoluteExpirationSlidingExpiration;
-
- private readonly static FieldInfo SetScriptField;
- private readonly static FieldInfo RedisDatabaseField;
- private readonly static MethodInfo ConnectMethod;
- private readonly static MethodInfo ConnectAsyncMethod;
- private readonly static MethodInfo MapMetadataMethod;
- private readonly static MethodInfo GetAbsoluteExpirationMethod;
- private readonly static MethodInfo GetExpirationInSecondsMethod;
- private readonly static MethodInfo OnRedisErrorMethod;
+ protected readonly static string AbsoluteExpirationKey;
+ protected readonly static string SlidingExpirationKey;
+ protected readonly static string DataKey;
+ protected readonly static long NotPresent;
+ protected readonly static RedisValue[] HashMembersAbsoluteExpirationSlidingExpirationData;
+ protected readonly static RedisValue[] HashMembersAbsoluteExpirationSlidingExpiration;
+
+ protected readonly static FieldInfo RedisDatabaseField;
+ protected readonly static MethodInfo ConnectMethod;
+ protected readonly static MethodInfo ConnectAsyncMethod;
+ protected readonly static MethodInfo MapMetadataMethod;
+ protected readonly static MethodInfo GetAbsoluteExpirationMethod;
+ protected readonly static MethodInfo GetExpirationInSecondsMethod;
+ protected readonly static MethodInfo OnRedisErrorMethod;
+ protected readonly static MethodInfo RecycleMethodInfo;
protected RedisKey InstancePrefix { get; }
@@ -40,8 +41,6 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems
RedisDatabaseField = Check.NotNull(type.GetField("_cache", BindingFlags.Instance | BindingFlags.NonPublic), nameof(RedisDatabaseField));
- SetScriptField = Check.NotNull(type.GetField("_setScript", BindingFlags.Instance | BindingFlags.NonPublic), nameof(SetScriptField));
-
ConnectMethod = Check.NotNull(type.GetMethod("Connect", BindingFlags.Instance | BindingFlags.NonPublic), nameof(ConnectMethod));
ConnectAsyncMethod = Check.NotNull(type.GetMethod("ConnectAsync", BindingFlags.Instance | BindingFlags.NonPublic), nameof(ConnectAsyncMethod));
@@ -51,9 +50,11 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems
GetAbsoluteExpirationMethod = Check.NotNull(type.GetMethod("GetAbsoluteExpiration", BindingFlags.Static | BindingFlags.NonPublic), nameof(GetAbsoluteExpirationMethod));
GetExpirationInSecondsMethod = Check.NotNull(type.GetMethod("GetExpirationInSeconds", BindingFlags.Static | BindingFlags.NonPublic), nameof(GetExpirationInSecondsMethod));
-
+
OnRedisErrorMethod = Check.NotNull(type.GetMethod("OnRedisError", BindingFlags.Instance | BindingFlags.NonPublic), nameof(OnRedisErrorMethod));
+ RecycleMethodInfo = Check.NotNull(type.GetMethod("Recycle", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static), nameof(RecycleMethodInfo));
+
AbsoluteExpirationKey = type.GetField("AbsoluteExpirationKey", BindingFlags.Static | BindingFlags.NonPublic)!.GetValue(null)!.ToString()!;
SlidingExpirationKey = type.GetField("SlidingExpirationKey", BindingFlags.Static | BindingFlags.NonPublic)!.GetValue(null)!.ToString()!;
@@ -61,9 +62,9 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems
DataKey = type.GetField("DataKey", BindingFlags.Static | BindingFlags.NonPublic)!.GetValue(null)!.ToString()!;
NotPresent = type.GetField("NotPresent", BindingFlags.Static | BindingFlags.NonPublic)!.GetValue(null)!.To();
-
+
HashMembersAbsoluteExpirationSlidingExpirationData = [AbsoluteExpirationKey, SlidingExpirationKey, DataKey];
-
+
HashMembersAbsoluteExpirationSlidingExpiration = [AbsoluteExpirationKey, SlidingExpirationKey];
}
@@ -78,7 +79,7 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems
}
protected virtual IDatabase Connect()
- {
+ {
return (IDatabase)ConnectMethod.Invoke(this, Array.Empty
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj
index bb46006ac9..bfe9bea75a 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj
+++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.EntityFrameworkCore.Oracle.Devart
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj
index 93753e8586..2948ef0cfb 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj
+++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle/Volo.Abp.EntityFrameworkCore.Oracle.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.EntityFrameworkCore.Oracle
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj
index 4ddc65c713..382ef142fa 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj
+++ b/framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql/Volo.Abp.EntityFrameworkCore.PostgreSql.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.EntityFrameworkCore.PostgreSql
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj
index cdd1836b67..23a26e9357 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj
+++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.EntityFrameworkCore.SqlServer
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj
index ad933fc388..ac38af2d18 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj
+++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.EntityFrameworkCore.Sqlite
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreModelBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreModelBuilderExtensions.cs
index 19ad9e0267..6cb3f8b508 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreModelBuilderExtensions.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Microsoft/Extensions/DependencyInjection/AbpEfCoreModelBuilderExtensions.cs
@@ -26,13 +26,13 @@ public static class AbpEfCoreModelBuilderExtensions
return new SqlBinaryExpression(
ExpressionType.Equal,
isDeleted,
- new SqlConstantExpression(Expression.Constant(false), boolParam.TypeMapping),
+ new SqlConstantExpression(false, typeof(bool), boolParam.TypeMapping),
boolParam.Type,
boolParam.TypeMapping);
}
// empty where sql
- return new SqlConstantExpression(Expression.Constant(true), boolParam.TypeMapping);
+ return new SqlConstantExpression(true, typeof(bool), boolParam.TypeMapping);
});
return modelBuilder;
@@ -60,7 +60,7 @@ public static class AbpEfCoreModelBuilderExtensions
}
// empty where sql
- return new SqlConstantExpression(Expression.Constant(true), boolParam.TypeMapping);
+ return new SqlConstantExpression(true, typeof(bool), boolParam.TypeMapping);
});
return modelBuilder;
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj
index e1d9e41fa2..1777dfe668 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.EntityFrameworkCore
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
index c471d89acf..abcdb97a5a 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
@@ -36,6 +36,7 @@ using Volo.Abp.ObjectExtending;
using Volo.Abp.Reflection;
using Volo.Abp.Timing;
using Volo.Abp.Uow;
+using Microsoft.EntityFrameworkCore.Diagnostics;
namespace Volo.Abp.EntityFrameworkCore;
@@ -111,6 +112,12 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
DbContextOptions = options;
}
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ optionsBuilder.ConfigureWarnings(c => c.Ignore(RelationalEventId.PendingModelChangesWarning));
+ base.OnConfiguring(optionsBuilder);
+ }
+
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
@@ -256,7 +263,10 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
{
EntityHistoryHelper.UpdateChangeList(entityChangeList);
auditLog!.EntityChanges.AddRange(entityChangeList);
- Logger.LogDebug($"Added {entityChangeList.Count} entity changes to the current audit log");
+ if (entityChangeList.Count > 0)
+ {
+ Logger.LogDebug($"Added {entityChangeList.Count} entity changes to the current audit log");
+ }
}
return result;
@@ -620,7 +630,13 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
originalExtraProperties = entry.OriginalValues.GetValue(nameof(IHasExtraProperties.ExtraProperties));
}
- entry.Reload();
+ //TODO: Reload will throw an exception. Check it when new EF Core versions released.
+ //entry.Reload();
+
+ var storeValues = entry.OriginalValues;
+ entry.CurrentValues.SetValues(storeValues);
+ entry.OriginalValues.SetValues(storeValues);
+ entry.State = EntityState.Unchanged;
if (entry.Entity is IHasExtraProperties)
{
@@ -769,6 +785,9 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
return;
}
+ AbpDateTimeValueConverter.Clock = Clock;
+ AbpNullableDateTimeValueConverter.Clock = Clock;
+
foreach (var property in mutableEntityType.GetProperties().
Where(property => property.PropertyInfo != null &&
(property.PropertyInfo.PropertyType == typeof(DateTime) || property.PropertyInfo.PropertyType == typeof(DateTime?)) &&
@@ -779,8 +798,8 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
.Entity()
.Property(property.Name)
.HasConversion(property.ClrType == typeof(DateTime)
- ? new AbpDateTimeValueConverter(Clock)
- : new AbpNullableDateTimeValueConverter(Clock));
+ ? new AbpDateTimeValueConverter()
+ : new AbpNullableDateTimeValueConverter());
}
}
}
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs
index 5d002e87fa..cfaee16e6a 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.Auditing;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
@@ -60,9 +61,11 @@ public static class AbpEntityTypeBuilderExtensions
return;
}
+ var type = typeof(ExtraPropertiesValueConverter<>).MakeGenericType(b.Metadata.ClrType);
+ var extraPropertiesValueConverter = Activator.CreateInstance(type)!.As>();
b.Property(nameof(IHasExtraProperties.ExtraProperties))
.HasColumnName(nameof(IHasExtraProperties.ExtraProperties))
- .HasConversion(new ExtraPropertiesValueConverter(b.Metadata.ClrType))
+ .HasConversion(extraPropertiesValueConverter)
.Metadata.SetValueComparer(new ExtraPropertyDictionaryValueComparer());
b.TryConfigureObjectExtensions();
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs
index 702890a0a7..174967cd05 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpDateTimeValueConverter.cs
@@ -1,5 +1,4 @@
using System;
-using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.Timing;
@@ -7,20 +6,26 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters;
public class AbpDateTimeValueConverter : ValueConverter
{
- public AbpDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null)
+ public static IClock? Clock { get; set; }
+
+ public AbpDateTimeValueConverter(ConverterMappingHints? mappingHints = null)
: base(
- x => clock.Normalize(x),
- x => clock.Normalize(x), mappingHints)
+ x => Clock!.Normalize(x),
+ x => Clock!.Normalize(x),
+ mappingHints)
{
}
}
public class AbpNullableDateTimeValueConverter : ValueConverter
{
- public AbpNullableDateTimeValueConverter(IClock clock, ConverterMappingHints? mappingHints = null)
+ public static IClock? Clock { get; set; }
+
+ public AbpNullableDateTimeValueConverter(ConverterMappingHints? mappingHints = null)
: base(
- x => x.HasValue ? clock.Normalize(x.Value) : x,
- x => x.HasValue ? clock.Normalize(x.Value) : x, mappingHints)
+ x => x.HasValue ? Clock!.Normalize(x.Value) : x,
+ x => x.HasValue ? Clock!.Normalize(x.Value) : x,
+ mappingHints)
{
}
}
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs
index 980d926c3b..a24284356c 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs
@@ -8,22 +8,23 @@ using Volo.Abp.ObjectExtending;
namespace Volo.Abp.EntityFrameworkCore.ValueConverters;
-public class ExtraPropertiesValueConverter : ValueConverter
+public class ExtraPropertiesValueConverter : ValueConverter
{
- public ExtraPropertiesValueConverter(Type entityType)
+ public ExtraPropertiesValueConverter()
: base(
- d => SerializeObject(d, entityType),
- s => DeserializeObject(s, entityType))
+ d => SerializeObject(d),
+ s => DeserializeObject(s))
{
}
public readonly static JsonSerializerOptions SerializeOptions = new JsonSerializerOptions();
- private static string SerializeObject(ExtraPropertyDictionary extraProperties, Type? entityType)
+ private static string SerializeObject(ExtraPropertyDictionary extraProperties)
{
var copyDictionary = new Dictionary(extraProperties);
+ var entityType = typeof(TEntityType);
if (entityType != null)
{
var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType);
@@ -50,7 +51,7 @@ public class ExtraPropertiesValueConverter : ValueConverter(extraPropertiesAsJson, DeserializeOptions) ??
new ExtraPropertyDictionary();
+ var entityType = typeof(TEntityType);
if (entityType != null)
{
var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType);
diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj b/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj
index 829e010b65..a51f699909 100644
--- a/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj
+++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo.Abp.EventBus.Azure.csproj b/framework/src/Volo.Abp.EventBus.Azure/Volo.Abp.EventBus.Azure.csproj
index fc125a305b..9cb3f6698f 100644
--- a/framework/src/Volo.Abp.EventBus.Azure/Volo.Abp.EventBus.Azure.csproj
+++ b/framework/src/Volo.Abp.EventBus.Azure/Volo.Abp.EventBus.Azure.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.EventBus.Azure
diff --git a/framework/src/Volo.Abp.EventBus.Dapr/Volo.Abp.EventBus.Dapr.csproj b/framework/src/Volo.Abp.EventBus.Dapr/Volo.Abp.EventBus.Dapr.csproj
index b194ef27da..34fe5474c5 100644
--- a/framework/src/Volo.Abp.EventBus.Dapr/Volo.Abp.EventBus.Dapr.csproj
+++ b/framework/src/Volo.Abp.EventBus.Dapr/Volo.Abp.EventBus.Dapr.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo.Abp.EventBus.Kafka.csproj b/framework/src/Volo.Abp.EventBus.Kafka/Volo.Abp.EventBus.Kafka.csproj
index d0afbd8565..b833e00d2c 100644
--- a/framework/src/Volo.Abp.EventBus.Kafka/Volo.Abp.EventBus.Kafka.csproj
+++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo.Abp.EventBus.Kafka.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj
index 490d9ff532..73d9d942a9 100644
--- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj
+++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo.Abp.EventBus.RabbitMQ.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.EventBus.RabbitMQ
diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj b/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj
index e724024b8f..3b6660447f 100644
--- a/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj
+++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo.Abp.EventBus.Rebus.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.EventBus.Rebus
diff --git a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj
index b6d38379f8..2361937a7b 100644
--- a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj
+++ b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.EventBus
diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj b/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj
index 87486ddb8c..d62d661ff0 100644
--- a/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj
+++ b/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
true
diff --git a/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj b/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj
index 47a34c2ed5..efd45ca097 100644
--- a/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj
+++ b/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Features
diff --git a/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj b/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj
index f7e44a6608..dcb23c008a 100644
--- a/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj
+++ b/framework/src/Volo.Abp.FluentValidation/Volo.Abp.FluentValidation.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.FluentValidation
diff --git a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo.Abp.Gdpr.Abstractions.csproj b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo.Abp.Gdpr.Abstractions.csproj
index 5f497283f6..a59643afaa 100644
--- a/framework/src/Volo.Abp.Gdpr.Abstractions/Volo.Abp.Gdpr.Abstractions.csproj
+++ b/framework/src/Volo.Abp.Gdpr.Abstractions/Volo.Abp.Gdpr.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo.Abp.GlobalFeatures.csproj b/framework/src/Volo.Abp.GlobalFeatures/Volo.Abp.GlobalFeatures.csproj
index f12a7b4dda..1c5441c8ed 100644
--- a/framework/src/Volo.Abp.GlobalFeatures/Volo.Abp.GlobalFeatures.csproj
+++ b/framework/src/Volo.Abp.GlobalFeatures/Volo.Abp.GlobalFeatures.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.GlobalFeatures
diff --git a/framework/src/Volo.Abp.Guids/Volo.Abp.Guids.csproj b/framework/src/Volo.Abp.Guids/Volo.Abp.Guids.csproj
index 59069ff23d..ef673d2ffd 100644
--- a/framework/src/Volo.Abp.Guids/Volo.Abp.Guids.csproj
+++ b/framework/src/Volo.Abp.Guids/Volo.Abp.Guids.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Guids
diff --git a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj
index 0018ea272d..b939aae76b 100644
--- a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj
+++ b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.HangFire
diff --git a/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj b/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj
index bd03cbdaa9..a5e3b6e184 100644
--- a/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj
+++ b/framework/src/Volo.Abp.Http.Abstractions/Volo.Abp.Http.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Http.Abstractions
diff --git a/framework/src/Volo.Abp.Http.Client.Dapr/Volo.Abp.Http.Client.Dapr.csproj b/framework/src/Volo.Abp.Http.Client.Dapr/Volo.Abp.Http.Client.Dapr.csproj
index dd0d1ad085..6f0154d2d1 100644
--- a/framework/src/Volo.Abp.Http.Client.Dapr/Volo.Abp.Http.Client.Dapr.csproj
+++ b/framework/src/Volo.Abp.Http.Client.Dapr/Volo.Abp.Http.Client.Dapr.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo.Abp.Http.Client.IdentityModel.MauiBlazor.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo.Abp.Http.Client.IdentityModel.MauiBlazor.csproj
index d5b6561748..716ce034d0 100644
--- a/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo.Abp.Http.Client.IdentityModel.MauiBlazor.csproj
+++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.MauiBlazor/Volo.Abp.Http.Client.IdentityModel.MauiBlazor.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.Http.Client.IdentityModel.MauiBlazor
diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj
index d351159d11..1f2dc0661e 100644
--- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj
+++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.Http.Client.IdentityModel.Web
diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj
index 986db5eee4..4ae298e948 100644
--- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj
+++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.Http.Client.IdentityModel.WebAssembly
diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj
index 4cab945b6f..43b65cfa58 100644
--- a/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj
+++ b/framework/src/Volo.Abp.Http.Client.IdentityModel/Volo.Abp.Http.Client.IdentityModel.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Http.Client.IdentityModel
diff --git a/framework/src/Volo.Abp.Http.Client.Web/Volo.Abp.Http.Client.Web.csproj b/framework/src/Volo.Abp.Http.Client.Web/Volo.Abp.Http.Client.Web.csproj
index e7b0829e4c..63a9f1d607 100644
--- a/framework/src/Volo.Abp.Http.Client.Web/Volo.Abp.Http.Client.Web.csproj
+++ b/framework/src/Volo.Abp.Http.Client.Web/Volo.Abp.Http.Client.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.Http.Client.Web
diff --git a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj
index a657a49b05..d53187b622 100644
--- a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj
+++ b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Http.Client
diff --git a/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj b/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj
index e5fd6e75ed..3514dfa55e 100644
--- a/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj
+++ b/framework/src/Volo.Abp.Http/Volo.Abp.Http.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Http
diff --git a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj
index f958f2d5af..8915614bfe 100644
--- a/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj
+++ b/framework/src/Volo.Abp.IdentityModel/Volo.Abp.IdentityModel.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.IdentityModel
diff --git a/framework/src/Volo.Abp.Imaging.Abstractions/Volo.Abp.Imaging.Abstractions.csproj b/framework/src/Volo.Abp.Imaging.Abstractions/Volo.Abp.Imaging.Abstractions.csproj
index d82fe466a1..3a2c1f6532 100644
--- a/framework/src/Volo.Abp.Imaging.Abstractions/Volo.Abp.Imaging.Abstractions.csproj
+++ b/framework/src/Volo.Abp.Imaging.Abstractions/Volo.Abp.Imaging.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Imaging.Abstractions
diff --git a/framework/src/Volo.Abp.Imaging.AspNetCore/Volo.Abp.Imaging.AspNetCore.csproj b/framework/src/Volo.Abp.Imaging.AspNetCore/Volo.Abp.Imaging.AspNetCore.csproj
index e5b9b88fb9..802585d44a 100644
--- a/framework/src/Volo.Abp.Imaging.AspNetCore/Volo.Abp.Imaging.AspNetCore.csproj
+++ b/framework/src/Volo.Abp.Imaging.AspNetCore/Volo.Abp.Imaging.AspNetCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.Imaging.AspNetCore
diff --git a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj
index 0987bdd2d3..1ad12f02ea 100644
--- a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj
+++ b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo.Abp.Imaging.ImageSharp.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.Imaging.ImageSharp
diff --git a/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj b/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj
index d3a36d1ba8..63dfd0bcce 100644
--- a/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj
+++ b/framework/src/Volo.Abp.Imaging.MagickNet/Volo.Abp.Imaging.MagickNet.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Imaging.MagickNet
diff --git a/framework/src/Volo.Abp.Imaging.SkiaSharp/Volo.Abp.Imaging.SkiaSharp.csproj b/framework/src/Volo.Abp.Imaging.SkiaSharp/Volo.Abp.Imaging.SkiaSharp.csproj
index 857cb0f92f..bca91fe1e5 100644
--- a/framework/src/Volo.Abp.Imaging.SkiaSharp/Volo.Abp.Imaging.SkiaSharp.csproj
+++ b/framework/src/Volo.Abp.Imaging.SkiaSharp/Volo.Abp.Imaging.SkiaSharp.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Imaging.SkiaSharp
diff --git a/framework/src/Volo.Abp.Json.Abstractions/Volo.Abp.Json.Abstractions.csproj b/framework/src/Volo.Abp.Json.Abstractions/Volo.Abp.Json.Abstractions.csproj
index c1519b6756..2e1b4ebd7e 100644
--- a/framework/src/Volo.Abp.Json.Abstractions/Volo.Abp.Json.Abstractions.csproj
+++ b/framework/src/Volo.Abp.Json.Abstractions/Volo.Abp.Json.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Json.Abstractions
diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj b/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj
index 14891c1e8a..2d9cbf22aa 100644
--- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj
+++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Json.Newtonsoft
diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj b/framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj
index e7adbb75de..15a6e37336 100644
--- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj
+++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo.Abp.Json.SystemTextJson.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Json.SystemTextJson
diff --git a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj
index 16b634861f..7d19142354 100644
--- a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj
+++ b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Json
diff --git a/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj b/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj
index e8d450d168..80cfb6f87b 100644
--- a/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj
+++ b/framework/src/Volo.Abp.Kafka/Volo.Abp.Kafka.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.Ldap.Abstractions/Volo.Abp.Ldap.Abstractions.csproj b/framework/src/Volo.Abp.Ldap.Abstractions/Volo.Abp.Ldap.Abstractions.csproj
index 63730ef420..11aed678d2 100644
--- a/framework/src/Volo.Abp.Ldap.Abstractions/Volo.Abp.Ldap.Abstractions.csproj
+++ b/framework/src/Volo.Abp.Ldap.Abstractions/Volo.Abp.Ldap.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Ldap.Abstractions
diff --git a/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj b/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj
index ef49b53ba5..6bed4b75a2 100644
--- a/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj
+++ b/framework/src/Volo.Abp.Ldap/Volo.Abp.Ldap.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Ldap
diff --git a/framework/src/Volo.Abp.Localization.Abstractions/Volo.Abp.Localization.Abstractions.csproj b/framework/src/Volo.Abp.Localization.Abstractions/Volo.Abp.Localization.Abstractions.csproj
index 276b7d7942..4a6342248c 100644
--- a/framework/src/Volo.Abp.Localization.Abstractions/Volo.Abp.Localization.Abstractions.csproj
+++ b/framework/src/Volo.Abp.Localization.Abstractions/Volo.Abp.Localization.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Localization.Abstractions
diff --git a/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj b/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj
index 1c7b50b18e..59f7772dc6 100644
--- a/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj
+++ b/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Localization
diff --git a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj
index c2d2cc0487..8d760a7e05 100644
--- a/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj
+++ b/framework/src/Volo.Abp.MailKit/Volo.Abp.MailKit.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.MailKit
diff --git a/framework/src/Volo.Abp.Maui.Client/Volo.Abp.Maui.Client.csproj b/framework/src/Volo.Abp.Maui.Client/Volo.Abp.Maui.Client.csproj
index 5d6e0042ed..6906836c0a 100644
--- a/framework/src/Volo.Abp.Maui.Client/Volo.Abp.Maui.Client.csproj
+++ b/framework/src/Volo.Abp.Maui.Client/Volo.Abp.Maui.Client.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.Maui.Client
diff --git a/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj b/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj
index 53b689bc8e..c720c3267b 100644
--- a/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj
+++ b/framework/src/Volo.Abp.MemoryDb/Volo.Abp.MemoryDb.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.MemoryDb
diff --git a/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj b/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj
index 8d9adfa7f2..989c887c66 100644
--- a/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj
+++ b/framework/src/Volo.Abp.Minify/Volo.Abp.Minify.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Minify
diff --git a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj
index 789defab44..de1d337497 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj
+++ b/framework/src/Volo.Abp.MongoDB/Volo.Abp.MongoDB.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.MongoDB
diff --git a/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj b/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj
index 37131e54a4..7d292b0766 100644
--- a/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj
+++ b/framework/src/Volo.Abp.MultiLingualObjects/Volo.Abp.MultiLingualObjects.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.MultiLingualObject
diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj
index e98b18416a..a7cb84118f 100644
--- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj
+++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.MultiTenancy.Abstractions
diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj b/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj
index 9e3aa4f4bb..c524649069 100644
--- a/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj
+++ b/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.MultiTenancy
diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo.Abp.ObjectExtending.csproj b/framework/src/Volo.Abp.ObjectExtending/Volo.Abp.ObjectExtending.csproj
index 76dc1c7c64..2c930c7dd2 100644
--- a/framework/src/Volo.Abp.ObjectExtending/Volo.Abp.ObjectExtending.csproj
+++ b/framework/src/Volo.Abp.ObjectExtending/Volo.Abp.ObjectExtending.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.ObjectExtending
diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo.Abp.ObjectMapping.csproj b/framework/src/Volo.Abp.ObjectMapping/Volo.Abp.ObjectMapping.csproj
index d743167ce0..2f8ac48b78 100644
--- a/framework/src/Volo.Abp.ObjectMapping/Volo.Abp.ObjectMapping.csproj
+++ b/framework/src/Volo.Abp.ObjectMapping/Volo.Abp.ObjectMapping.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.ObjectMapping
diff --git a/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj b/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj
index 93f7b530f9..2379e969be 100644
--- a/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj
+++ b/framework/src/Volo.Abp.Quartz/Volo.Abp.Quartz.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Quartz
diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj b/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj
index 751c73f4cc..e77889d5d9 100644
--- a/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj
+++ b/framework/src/Volo.Abp.RabbitMQ/Volo.Abp.RabbitMQ.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.RabbitMQ
diff --git a/framework/src/Volo.Abp.RemoteServices/Volo.Abp.RemoteServices.csproj b/framework/src/Volo.Abp.RemoteServices/Volo.Abp.RemoteServices.csproj
index 7b5fdf2289..4d2588c1e4 100644
--- a/framework/src/Volo.Abp.RemoteServices/Volo.Abp.RemoteServices.csproj
+++ b/framework/src/Volo.Abp.RemoteServices/Volo.Abp.RemoteServices.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.RemoteServices
diff --git a/framework/src/Volo.Abp.Security/Volo.Abp.Security.csproj b/framework/src/Volo.Abp.Security/Volo.Abp.Security.csproj
index b7c9945ac3..5ccaf9883f 100644
--- a/framework/src/Volo.Abp.Security/Volo.Abp.Security.csproj
+++ b/framework/src/Volo.Abp.Security/Volo.Abp.Security.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Security
diff --git a/framework/src/Volo.Abp.Serialization/Volo.Abp.Serialization.csproj b/framework/src/Volo.Abp.Serialization/Volo.Abp.Serialization.csproj
index 01499d5a55..685abd437e 100644
--- a/framework/src/Volo.Abp.Serialization/Volo.Abp.Serialization.csproj
+++ b/framework/src/Volo.Abp.Serialization/Volo.Abp.Serialization.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Serialization
diff --git a/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj b/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj
index 8f72b06ec8..aedbde1fd4 100644
--- a/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj
+++ b/framework/src/Volo.Abp.Settings/Volo.Abp.Settings.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Settings
diff --git a/framework/src/Volo.Abp.Sms.Aliyun/Volo.Abp.Sms.Aliyun.csproj b/framework/src/Volo.Abp.Sms.Aliyun/Volo.Abp.Sms.Aliyun.csproj
index 2f3677d5ea..8bacff7744 100644
--- a/framework/src/Volo.Abp.Sms.Aliyun/Volo.Abp.Sms.Aliyun.csproj
+++ b/framework/src/Volo.Abp.Sms.Aliyun/Volo.Abp.Sms.Aliyun.csproj
@@ -3,7 +3,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Sms.Aliyun
diff --git a/framework/src/Volo.Abp.Sms/Volo.Abp.Sms.csproj b/framework/src/Volo.Abp.Sms/Volo.Abp.Sms.csproj
index 1f319473c4..68eba5f5a6 100644
--- a/framework/src/Volo.Abp.Sms/Volo.Abp.Sms.csproj
+++ b/framework/src/Volo.Abp.Sms/Volo.Abp.Sms.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Sms
diff --git a/framework/src/Volo.Abp.Specifications/Volo.Abp.Specifications.csproj b/framework/src/Volo.Abp.Specifications/Volo.Abp.Specifications.csproj
index 316b297e88..c88d3905a9 100644
--- a/framework/src/Volo.Abp.Specifications/Volo.Abp.Specifications.csproj
+++ b/framework/src/Volo.Abp.Specifications/Volo.Abp.Specifications.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Specifications
diff --git a/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj b/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj
index 576ea6c81e..58c2dc3693 100644
--- a/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj
+++ b/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
enable
Nullable
Volo.Abp.Swashbuckle
diff --git a/framework/src/Volo.Abp.TestBase/Volo.Abp.TestBase.csproj b/framework/src/Volo.Abp.TestBase/Volo.Abp.TestBase.csproj
index 847b82921c..9fb0cffb34 100644
--- a/framework/src/Volo.Abp.TestBase/Volo.Abp.TestBase.csproj
+++ b/framework/src/Volo.Abp.TestBase/Volo.Abp.TestBase.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.TestBase
diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj b/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj
index ac6e1d9f06..bb6d88e762 100644
--- a/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj
+++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo.Abp.TextTemplating.Core.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj b/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj
index b5b9f8bb33..bf89fd999b 100644
--- a/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj
+++ b/framework/src/Volo.Abp.TextTemplating.Razor/Volo.Abp.TextTemplating.Razor.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj
index aa91226b3d..889affb425 100644
--- a/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj
+++ b/framework/src/Volo.Abp.TextTemplating.Scriban/Volo.Abp.TextTemplating.Scriban.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj
index 85dbd6909e..e030225b87 100644
--- a/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj
+++ b/framework/src/Volo.Abp.TextTemplating/Volo.Abp.TextTemplating.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
diff --git a/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj b/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj
index 27703bbeaa..1295c3f143 100644
--- a/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj
+++ b/framework/src/Volo.Abp.Threading/Volo.Abp.Threading.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Threading
diff --git a/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj b/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj
index 65b175691e..5cc49b9db1 100644
--- a/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj
+++ b/framework/src/Volo.Abp.Timing/Volo.Abp.Timing.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Timing
diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj b/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj
index a40c3f0ebf..b95dd71be1 100644
--- a/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj
+++ b/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.UI.Navigation
diff --git a/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj b/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj
index bfef4ded3a..0ed37529e5 100644
--- a/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj
+++ b/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.UI
diff --git a/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj b/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj
index cfb32e83d2..946584c73f 100644
--- a/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj
+++ b/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Uow
diff --git a/framework/src/Volo.Abp.Validation.Abstractions/Volo.Abp.Validation.Abstractions.csproj b/framework/src/Volo.Abp.Validation.Abstractions/Volo.Abp.Validation.Abstractions.csproj
index 7319b00bd0..808701de61 100644
--- a/framework/src/Volo.Abp.Validation.Abstractions/Volo.Abp.Validation.Abstractions.csproj
+++ b/framework/src/Volo.Abp.Validation.Abstractions/Volo.Abp.Validation.Abstractions.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Validation.Abstractions
diff --git a/framework/src/Volo.Abp.Validation/Volo.Abp.Validation.csproj b/framework/src/Volo.Abp.Validation/Volo.Abp.Validation.csproj
index 0a0ca3bd0f..a2c6b1acc7 100644
--- a/framework/src/Volo.Abp.Validation/Volo.Abp.Validation.csproj
+++ b/framework/src/Volo.Abp.Validation/Volo.Abp.Validation.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.Validation
diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json
index 82a7cfca5d..0888457731 100644
--- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json
+++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json
@@ -7,7 +7,7 @@
"The {0} field is not a valid e-mail address.": "El campo {0} no es una dirección de e-mail valida.",
"The {0} field only accepts files with the following extensions: {1}": "El campo {0} sólo acepta ficheros con la siguientes extensiones: {1}",
"The field {0} must be a string or array type with a maximum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud máxima de '{1}'.",
- "The field {0} must be a string or array type with a minimum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud máxima de '{1}'.",
+ "The field {0} must be a string or array type with a minimum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud mínima de '{1}'.",
"The {0} field is not a valid phone number.": "El campo {0} no tiene un número de teléfono valido.",
"The field {0} must be between {1} and {2}.": "El campo {0} debe estar entre {1} y {2}.",
"The field {0} must match the regular expression '{1}'.": "El campo {0} no coincide con el formato solicitado.",
diff --git a/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj b/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj
index 7f681519a6..caf4c9818b 100644
--- a/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj
+++ b/framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
enable
Nullable
Volo.Abp.VirtualFileSystem
diff --git a/framework/src/Volo.Abp/Volo.Abp.csproj b/framework/src/Volo.Abp/Volo.Abp.csproj
index 9057e7ea2d..34e624cc84 100644
--- a/framework/src/Volo.Abp/Volo.Abp.csproj
+++ b/framework/src/Volo.Abp/Volo.Abp.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Abp
Volo.Abp
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/framework/test/AbpTestBase/AbpTestBase.csproj b/framework/test/AbpTestBase/AbpTestBase.csproj
index cdad2ad3de..04a5bd0fa7 100644
--- a/framework/test/AbpTestBase/AbpTestBase.csproj
+++ b/framework/test/AbpTestBase/AbpTestBase.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
AbpTestBase
AbpTestBase
diff --git a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj
index 63c108f516..17914d88cd 100644
--- a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj
+++ b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj
index 9d0449e93e..f92b3e95d2 100644
--- a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
latest
Volo.Abp.AspNetCore.Authentication.OAuth.Tests
Volo.Abp.AspNetCore.Authentication.OAuth.Tests
diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj
index a35f5526c8..2a946e7d3c 100644
--- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.AspNetCore.MultiTenancy.Tests
Volo.Abp.AspNetCore.MultiTenancy.Tests
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.PlugIn/Volo.Abp.AspNetCore.Mvc.PlugIn.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.PlugIn/Volo.Abp.AspNetCore.Mvc.PlugIn.csproj
index f6e5b0888f..6545e9be27 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.PlugIn/Volo.Abp.AspNetCore.Mvc.PlugIn.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.PlugIn/Volo.Abp.AspNetCore.Mvc.PlugIn.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Library
true
true
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj
index bca9cd4966..ad21822aad 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Volo.Abp.AspNetCore.Mvc.Tests
Volo.Abp.AspNetCore.Mvc.Tests
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs
index 5b07cac7fd..02f5e9d885 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Program.cs
@@ -26,9 +26,9 @@ await builder.RunAbpModuleAsync(options =>
if (parentDirectory.Name == "test")
{
#if DEBUG
- plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Debug", "net8.0");
+ plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Debug", "net9.0");
#else
- plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Release", "net8.0");
+ plugDllInPath = Path.Combine(parentDirectory.FullName, "Volo.Abp.AspNetCore.Mvc.PlugIn", "bin", "Release", "net9.0");
#endif
break;
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj
index 2f25176452..7a4ff140b6 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Volo.Abp.AspNetCore.Mvc.UI.Tests
Volo.Abp.AspNetCore.Mvc.UI.Tests
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.csproj
index c9c968e75b..c2841b0b26 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj
index e16ae0a6ab..151db7f591 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Volo.Abp.AspNetCore.Mvc.Versioning.Tests
Volo.Abp.AspNetCore.Mvc.Versioning.Tests
diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj
index e294d34934..a4b5900e86 100644
--- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.AspNetCore.Serilog.Tests
Volo.Abp.AspNetCore.Serilog.Tests
diff --git a/framework/test/Volo.Abp.AspNetCore.SignalR.Tests/Volo.Abp.AspNetCore.SignalR.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.SignalR.Tests/Volo.Abp.AspNetCore.SignalR.Tests.csproj
index 8a1bcfcb9e..7e0a4b4a8e 100644
--- a/framework/test/Volo.Abp.AspNetCore.SignalR.Tests/Volo.Abp.AspNetCore.SignalR.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.SignalR.Tests/Volo.Abp.AspNetCore.SignalR.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj
index dbef0b6f14..85cfcbcff5 100644
--- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj
+++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.AspNetCore.Tests
Volo.Abp.AspNetCore.Tests
true
diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj b/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj
index 5ff57d9dee..802598c0cf 100644
--- a/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj
+++ b/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.Auditing.Tests
Volo.Abp.Auditing.Tests
true
diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj b/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj
index 7be6b11e40..5490ddee45 100644
--- a/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj
+++ b/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.Authorization.Tests
Volo.Abp.Authorization.Tests
true
diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj b/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj
index 2d56e8d72e..8dc0fda9df 100644
--- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj
+++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.AutoMapper.Tests
Volo.Abp.AutoMapper.Tests
diff --git a/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj b/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj
index 680f2bec99..1770ef9c9f 100644
--- a/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj
+++ b/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.Autofac.Tests
Volo.Abp.Autofac.Tests
true
diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj
index c3757cf194..718032877b 100644
--- a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj
+++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.BackgroundJobs.Tests
Volo.Abp.BackgroundJobs.Tests
diff --git a/framework/test/Volo.Abp.BlobStoring.Aliyun.Tests/Volo.Abp.BlobStoring.Aliyun.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Aliyun.Tests/Volo.Abp.BlobStoring.Aliyun.Tests.csproj
index ed8d5d3ae2..1cbe9ecce0 100644
--- a/framework/test/Volo.Abp.BlobStoring.Aliyun.Tests/Volo.Abp.BlobStoring.Aliyun.Tests.csproj
+++ b/framework/test/Volo.Abp.BlobStoring.Aliyun.Tests/Volo.Abp.BlobStoring.Aliyun.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
9f0d2c00-80c1-435b-bfab-2c39c8249091
diff --git a/framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj
index 232c2d8be3..5075e404ef 100644
--- a/framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj
+++ b/framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
9f0d2c00-80c1-435b-bfab-2c39c8249091
diff --git a/framework/test/Volo.Abp.BlobStoring.Azure.Tests/Volo.Abp.BlobStoring.Azure.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Azure.Tests/Volo.Abp.BlobStoring.Azure.Tests.csproj
index cff3db9f5e..dd9766531f 100644
--- a/framework/test/Volo.Abp.BlobStoring.Azure.Tests/Volo.Abp.BlobStoring.Azure.Tests.csproj
+++ b/framework/test/Volo.Abp.BlobStoring.Azure.Tests/Volo.Abp.BlobStoring.Azure.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
9f0d2c00-80c1-435b-bfab-2c39c8249091
diff --git a/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj
index 82d972f9d5..50af1926bc 100644
--- a/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj
+++ b/framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj
index a36e26fade..457ef379c0 100644
--- a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj
+++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
9f0d2c00-80c1-435b-bfab-2c39c8249091
diff --git a/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo.Abp.BlobStoring.Minio.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo.Abp.BlobStoring.Minio.Tests.csproj
index 9f14818831..2685fc02d2 100644
--- a/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo.Abp.BlobStoring.Minio.Tests.csproj
+++ b/framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo.Abp.BlobStoring.Minio.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
9f0d2c00-80c1-435b-bfab-2c39c8249091
diff --git a/framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj
index f1fd5bdd99..f452f34036 100644
--- a/framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj
+++ b/framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Caching.StackExchangeRedis.Tests/Volo.Abp.Caching.StackExchangeRedis.Tests.csproj b/framework/test/Volo.Abp.Caching.StackExchangeRedis.Tests/Volo.Abp.Caching.StackExchangeRedis.Tests.csproj
index 69387ccf92..b4a6062e45 100644
--- a/framework/test/Volo.Abp.Caching.StackExchangeRedis.Tests/Volo.Abp.Caching.StackExchangeRedis.Tests.csproj
+++ b/framework/test/Volo.Abp.Caching.StackExchangeRedis.Tests/Volo.Abp.Caching.StackExchangeRedis.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj b/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj
index 0defb82f07..f249887f5e 100644
--- a/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj
+++ b/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Volo.Abp.Caching.Tests
Volo.Abp.Caching.Tests
diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/AbpCachingTestModule.cs b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/AbpCachingTestModule.cs
index b45cded03c..21f39bdc77 100644
--- a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/AbpCachingTestModule.cs
+++ b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/AbpCachingTestModule.cs
@@ -1,7 +1,9 @@
using Microsoft.Extensions.Caching.Distributed;
using System;
+using Microsoft.Extensions.Caching.Hybrid;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
+using Volo.Abp.Caching.Hybrid;
using Volo.Abp.Modularity;
namespace Volo.Abp.Caching;
@@ -29,6 +31,29 @@ public class AbpCachingTestModule : AbpModule
option.GlobalCacheEntryOptions.SetSlidingExpiration(TimeSpan.FromMinutes(20));
});
+ Configure(option =>
+ {
+ option.CacheConfigurators.Add(cacheName =>
+ {
+ if (cacheName == CacheNameAttribute.GetCacheName(typeof(Sail.Testing.Caching.PersonCacheItem)))
+ {
+ return new HybridCacheEntryOptions()
+ {
+ Expiration = TimeSpan.FromMinutes(10),
+ LocalCacheExpiration = TimeSpan.FromMinutes(5)
+ };
+ }
+
+ return null;
+ });
+
+ option.GlobalHybridCacheEntryOptions = new HybridCacheEntryOptions()
+ {
+ Expiration = TimeSpan.FromMinutes(20),
+ LocalCacheExpiration = TimeSpan.FromMinutes(10)
+ };
+ });
+
context.Services.Replace(ServiceDescriptor.Singleton());
}
}
diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/HybridCache_Tests.cs b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/HybridCache_Tests.cs
new file mode 100644
index 0000000000..04d66903f7
--- /dev/null
+++ b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/HybridCache_Tests.cs
@@ -0,0 +1,519 @@
+using System;
+using System.Threading.Tasks;
+using Shouldly;
+using Volo.Abp.Caching.Hybrid;
+using Volo.Abp.Testing;
+using Volo.Abp.Uow;
+using Xunit;
+
+namespace Volo.Abp.Caching;
+
+public class HybridCache_Tests : AbpIntegratedTest
+{
+ [Fact]
+ public async Task Should_GetOrCreate_Set_And_Remove_Cache_Items()
+ {
+ var personCache = GetRequiredService>();
+
+ var cacheKey = Guid.NewGuid().ToString();
+
+ //GetOrCreateAsync
+ var cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem("john nash")));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe("john nash");
+
+ //SetAsync
+ await personCache.SetAsync(cacheKey, new PersonCacheItem("baris"));
+
+ //GetOrCreateAsync
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem("john nash")));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe("baris");
+
+ //RemoveAsync
+ await personCache.RemoveAsync(cacheKey);
+
+ //GetOrCreateAsync
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem("lucas")));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe("lucas");
+ }
+
+ [Fact]
+ public async Task GetOrCreateAsync()
+ {
+ var personCache = GetRequiredService>();
+
+ var cacheKey = Guid.NewGuid().ToString();
+ const string personName = "john nash";
+
+ //Will execute the factory method to create the cache item
+
+ bool factoryExecuted = false;
+
+ var cacheItem = await personCache.GetOrCreateAsync(cacheKey,
+ () =>
+ {
+ factoryExecuted = true;
+ return Task.FromResult(new PersonCacheItem(personName));
+ });
+
+ factoryExecuted.ShouldBeTrue();
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName);
+
+ //This time, it will not execute the factory
+
+ factoryExecuted = false;
+
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey,
+ () =>
+ {
+ factoryExecuted = true;
+ return Task.FromResult(new PersonCacheItem(personName));
+ });
+
+ factoryExecuted.ShouldBeFalse();
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName);
+ }
+
+ [Fact]
+ public async Task SameClassName_But_DiffNamespace_Should_Not_Use_Same_Cache()
+ {
+ var personCache = GetRequiredService>();
+ var otherPersonCache = GetRequiredService>();
+
+ var cacheKey = Guid.NewGuid().ToString();
+ const string personName = "john nash";
+
+ var cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName);
+ var cacheItem1 = await otherPersonCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new Sail.Testing.Caching.PersonCacheItem(personName)));
+ cacheItem1.ShouldNotBeNull();
+ cacheItem1.Name.ShouldBe(personName);
+
+ await personCache.RemoveAsync(cacheKey);
+
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem(personName + "1")));
+ cacheItem1 = await otherPersonCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new Sail.Testing.Caching.PersonCacheItem(personName + "1")));
+
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName + "1");
+
+ cacheItem1.ShouldNotBeNull();
+ cacheItem1.Name.ShouldBe(personName);
+ }
+
+ [Fact]
+ public async Task Should_Set_Get_And_Remove_Cache_Items_With_Integer_Type_CacheKey()
+ {
+ var personCache = GetRequiredService>();
+
+ var cacheKey = 42;
+ const string personName = "john nash";
+
+ //GetOrCreateAsync
+ var cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName);
+
+ //SetAsync
+ await personCache.SetAsync(cacheKey, new PersonCacheItem("baris"));
+
+ //GetOrCreateAsync
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe("baris");
+
+ //RemoveAsync
+ await personCache.RemoveAsync(cacheKey);
+
+ //GetOrCreateAsync
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem("lucas")));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe("lucas");
+ }
+
+ [Fact]
+ public async Task GetOrAddAsync_With_Integer_Type_CacheKey()
+ {
+ var personCache = GetRequiredService>();
+
+ var cacheKey = 42;
+ const string personName = "john nash";
+
+ //Will execute the factory method to create the cache item
+
+ bool factoryExecuted = false;
+
+ var cacheItem = await personCache.GetOrCreateAsync(cacheKey,
+ () =>
+ {
+ factoryExecuted = true;
+ return Task.FromResult(new PersonCacheItem(personName));
+ });
+
+ factoryExecuted.ShouldBeTrue();
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName);
+
+ //This time, it will not execute the factory
+
+ factoryExecuted = false;
+
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey,
+ () =>
+ {
+ factoryExecuted = true;
+ return Task.FromResult(new PersonCacheItem(personName));
+ });
+
+ factoryExecuted.ShouldBeFalse();
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName);
+ }
+
+ [Fact]
+ public async Task SameClassName_But_DiffNamespace_Should_Not_Use_Same_Cache_With_Integer_CacheKey()
+ {
+ var personCache = GetRequiredService>();
+ var otherPersonCache = GetRequiredService>();
+
+ var cacheKey = 42;
+ const string personName = "john nash";
+
+ var cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName);
+ var cacheItem1 = await otherPersonCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new Sail.Testing.Caching.PersonCacheItem(personName)));
+ cacheItem1.ShouldNotBeNull();
+ cacheItem1.Name.ShouldBe(personName);
+
+ await personCache.RemoveAsync(cacheKey);
+
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem(personName + "1")));
+ cacheItem1 = await otherPersonCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new Sail.Testing.Caching.PersonCacheItem(personName + "1")));
+
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName + "1");
+
+ cacheItem1.ShouldNotBeNull();
+ cacheItem1.Name.ShouldBe(personName);
+ }
+
+ [Fact]
+ public async Task Should_Set_Get_And_Remove_Cache_Items_With_Object_Type_CacheKey()
+ {
+ var personCache = GetRequiredService>();
+
+ var cacheKey = new ComplexObjectAsCacheKey { Name = "DummyData", Age = 42 };
+ const string personName = "john nash";
+
+ //GetOrCreateAsync
+ var cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe(personName);
+
+ //SetAsync
+ await personCache.SetAsync(cacheKey, new PersonCacheItem("baris"));
+
+ //GetOrCreateAsync
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe("baris");
+
+ //RemoveAsync
+ await personCache.RemoveAsync(cacheKey);
+
+ //GetOrCreateAsync
+ cacheItem = await personCache.GetOrCreateAsync(cacheKey, () => Task.FromResult(new PersonCacheItem("lucas")));
+ cacheItem.ShouldNotBeNull();
+ cacheItem.Name.ShouldBe("lucas");
+ }
+
+ [Fact]
+ public async Task Should_Set_Get_And_Remove_Cache_Items_For_Same_Object_Type_With_Different_CacheKeys()
+ {
+ var personCache = GetRequiredService>();
+
+ var cache1Key = new ComplexObjectAsCacheKey { Name = "John", Age = 42 };
+ var cache2Key = new ComplexObjectAsCacheKey { Name = "Jenny", Age = 24 };
+ const string personName = "john nash";
+
+ //GetOrCreateAsync
+ var cacheItem1 = await personCache.GetOrCreateAsync(cache1Key, () => Task.FromResult(new PersonCacheItem(personName)));
+ var cacheItem2 = await personCache.GetOrCreateAsync(cache2Key, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem1.ShouldNotBeNull();
+ cacheItem1.Name.ShouldBe(personName);
+ cacheItem2.ShouldNotBeNull();
+ cacheItem2.Name.ShouldBe(personName);
+
+ //SetAsync
+ cacheItem1 = new PersonCacheItem("baris");
+ cacheItem2 = new PersonCacheItem("jack");
+ await personCache.SetAsync(cache1Key, cacheItem1);
+ await personCache.SetAsync(cache2Key, cacheItem2);
+
+ //GetOrCreateAsync
+ cacheItem1 = await personCache.GetOrCreateAsync(cache1Key, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem2 = await personCache.GetOrCreateAsync(cache2Key, () => Task.FromResult(new PersonCacheItem(personName)));
+ cacheItem1.ShouldNotBeNull();
+ cacheItem1.Name.ShouldBe("baris");
+ cacheItem2.ShouldNotBeNull();
+ cacheItem2.Name.ShouldBe("jack");
+
+ //Remove
+ await personCache.RemoveAsync(cache1Key);
+ await personCache.RemoveAsync(cache2Key);
+
+ //Get (not exists since removed)
+ cacheItem1 = await personCache.GetOrCreateAsync(cache1Key, () => Task.FromResult(new PersonCacheItem("lucas")));
+ cacheItem2 = await personCache.GetOrCreateAsync(cache2Key, () => Task.FromResult(new PersonCacheItem("peter")));
+ cacheItem1.ShouldNotBeNull();
+ cacheItem1.Name.ShouldBe("lucas");
+ cacheItem2.ShouldNotBeNull();
+ cacheItem2.Name.ShouldBe("peter");
+ }
+
+ [Fact]
+ public async Task Cache_Should_Only_Available_In_Uow_For_GetOrCreateAsync()
+ {
+ const string key = "testkey";
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ await personCache.SetAsync(key, new PersonCacheItem("lucas"), considerUow: true);
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john2")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("lucas");
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john3")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john3");
+
+ uow.OnCompleted(async () =>
+ {
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john4")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("lucas");
+ });
+
+ await uow.CompleteAsync();
+ }
+ }
+
+ [Fact]
+ public async Task Cache_Should_Rollback_With_Uow_For_GetOrCreateAsync()
+ {
+ const string key = "testkey";
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john2")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ await personCache.SetAsync(key, new PersonCacheItem("john3"), considerUow: true);
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john4")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john3");
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john5")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+ }
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john6")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+ }
+
+ [Fact]
+ public async Task Cache_Should_Only_Available_In_Uow_For_SetAsync()
+ {
+ const string key = "testkey";
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ var personCache = GetRequiredService>();
+
+ await personCache.SetAsync(key, new PersonCacheItem("john"), considerUow: true);
+
+ var cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john2")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john3")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john3");
+
+ uow.OnCompleted(async () =>
+ {
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john4")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+ });
+
+ await uow.CompleteAsync();
+ }
+ }
+
+ [Fact]
+ public async Task Cache_Should_Rollback_With_Uow_For_SetAsync()
+ {
+ const string key = "testkey";
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ await personCache.SetAsync(key, new PersonCacheItem("john2"), considerUow: true);
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john3")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john2");
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john4")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+ }
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john5")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+ }
+
+ [Fact]
+ public async Task Cache_Should_Only_Available_In_Uow_For_RemoveAsync()
+ {
+ const string key = "testkey";
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ var personCache = GetRequiredService>();
+
+ await personCache.SetAsync(key, new PersonCacheItem("john"), considerUow: true);
+
+ var cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john2")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ await personCache.RemoveAsync(key, considerUow: true);
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john3")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john3");
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john4")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john4");
+
+ uow.OnCompleted(async () =>
+ {
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john5")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john3");
+ });
+
+ await uow.CompleteAsync();
+ }
+ }
+
+ public async Task Cache_Should_Rollback_With_Uow_For_RemoveAsync()
+ {
+ const string key = "testkey";
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ await personCache.SetAsync(key, new PersonCacheItem("john2"), considerUow: true);
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john2");
+
+ await personCache.RemoveAsync(key, considerUow: true);
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john3")), considerUow: true);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john3")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+ }
+
+ cacheValue = await personCache.GetOrCreateAsync(key, () => Task.FromResult(new PersonCacheItem("john")), considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+ }
+
+ [Fact]
+ public async Task Should_Remove_Multiple_Items_Async()
+ {
+ var testkey = "testkey";
+ var testkey2 = "testkey2";
+ var testkey3 = new[] { testkey, testkey2 };
+
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetOrCreateAsync(testkey, () => Task.FromResult(new PersonCacheItem("john")));
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john");
+
+ cacheValue = await personCache.GetOrCreateAsync(testkey2, () => Task.FromResult(new PersonCacheItem("jack")));
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("jack");
+
+ await personCache.RemoveManyAsync(testkey3);
+
+ cacheValue = await personCache.GetOrCreateAsync(testkey, () => Task.FromResult(new PersonCacheItem("john2")));
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("john2");
+
+ cacheValue = await personCache.GetOrCreateAsync(testkey2, () => Task.FromResult(new PersonCacheItem("jack2")));
+ cacheValue.ShouldNotBeNull();
+ cacheValue.Name.ShouldBe("jack2");
+ }
+
+ [Fact]
+ public async Task Should_Get_Same_Cache_Set_When_Resolve_With_Or_Without_Key()
+ {
+ var cache1 = GetRequiredService>();
+ var cache2 = GetRequiredService>();
+
+ cache1.InternalCache.ShouldBe(cache2);
+
+ await cache1.SetAsync("john", new PersonCacheItem("john"));
+
+ var item1 = await cache1.GetOrCreateAsync("john", () => Task.FromResult(new PersonCacheItem("john2")));
+ item1.ShouldNotBeNull();
+ item1.Name.ShouldBe("john");
+
+ var item2 = await cache1.GetOrCreateAsync("john", () => Task.FromResult(new PersonCacheItem("john3")));
+ item2.ShouldNotBeNull();
+ item2.Name.ShouldBe("john");
+ }
+}
diff --git a/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj b/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj
index a7379d185e..0e657614ed 100644
--- a/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj
+++ b/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj b/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj
index 7751376511..d5dea43adf 100644
--- a/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj
+++ b/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj b/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj
index dfc0fd3da0..81061016a8 100644
--- a/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj
+++ b/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj b/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj
index c04f5dc194..039a8b870b 100644
--- a/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj
+++ b/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj b/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj
index f1a2551864..63bceec44a 100644
--- a/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj
+++ b/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj b/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj
index bbfbb21265..d0d73c0212 100644
--- a/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj
+++ b/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.DistributedLocking.Abstractions.Tests/Volo.Abp.DistributedLocking.Abstractions.Tests.csproj b/framework/test/Volo.Abp.DistributedLocking.Abstractions.Tests/Volo.Abp.DistributedLocking.Abstractions.Tests.csproj
index de36c22cf5..59d87e6315 100644
--- a/framework/test/Volo.Abp.DistributedLocking.Abstractions.Tests/Volo.Abp.DistributedLocking.Abstractions.Tests.csproj
+++ b/framework/test/Volo.Abp.DistributedLocking.Abstractions.Tests/Volo.Abp.DistributedLocking.Abstractions.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
true
diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj b/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj
index 71b4d48c66..e94aae9cd5 100644
--- a/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj
+++ b/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo.Abp.EntityFrameworkCore.Tests.SecondContext.csproj b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo.Abp.EntityFrameworkCore.Tests.SecondContext.csproj
index e9c28a4d3d..c9fdfffc12 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo.Abp.EntityFrameworkCore.Tests.SecondContext.csproj
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo.Abp.EntityFrameworkCore.Tests.SecondContext.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
true
true
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj
index 6642e42caf..8e819bbd1c 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs
index a13aea2945..e75af9a556 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs
@@ -80,7 +80,6 @@ public class AbpEntityFrameworkCoreTestModule : AbpModule
public override void OnPreApplicationInitialization(ApplicationInitializationContext context)
{
context.ServiceProvider.GetRequiredService().Database.Migrate();
-
using (var scope = context.ServiceProvider.CreateScope())
{
var categoryRepository = scope.ServiceProvider.GetRequiredService>();
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs
index 24b8081d8e..9cb1c003ba 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/ValueConverters/EFCore_DateTimeKindTests.cs
@@ -11,7 +11,7 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters;
public abstract class EFCore_DateTimeKindTests : DateTimeKind_Tests
{
- [Fact]
+ [Fact(Skip = "https://github.com/dotnet/efcore/issues/34760")]
public async Task DateTime_Kind_Should_Be_Normalized_In_View_Query_Test()
{
var personName = "bob lee";
@@ -37,6 +37,7 @@ public abstract class EFCore_DateTimeKindTests : DateTimeKind_Tests
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.ExceptionHandling.Tests/Volo.Abp.ExceptionHandling.Tests.csproj b/framework/test/Volo.Abp.ExceptionHandling.Tests/Volo.Abp.ExceptionHandling.Tests.csproj
index 0c56c7190c..7e05f96701 100644
--- a/framework/test/Volo.Abp.ExceptionHandling.Tests/Volo.Abp.ExceptionHandling.Tests.csproj
+++ b/framework/test/Volo.Abp.ExceptionHandling.Tests/Volo.Abp.ExceptionHandling.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj b/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj
index 80b750f618..55b773bc91 100644
--- a/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj
+++ b/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj b/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj
index 62603ef3a6..75e1ddc169 100644
--- a/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj
+++ b/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.GlobalFeatures.Tests/Volo.Abp.GlobalFeatures.Tests.csproj b/framework/test/Volo.Abp.GlobalFeatures.Tests/Volo.Abp.GlobalFeatures.Tests.csproj
index 23e6ebfa3d..43f9fd638f 100644
--- a/framework/test/Volo.Abp.GlobalFeatures.Tests/Volo.Abp.GlobalFeatures.Tests.csproj
+++ b/framework/test/Volo.Abp.GlobalFeatures.Tests/Volo.Abp.GlobalFeatures.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Http.Client.IdentityModel.Web.Tests/Volo.Abp.Http.Client.IdentityModel.Web.Tests.csproj b/framework/test/Volo.Abp.Http.Client.IdentityModel.Web.Tests/Volo.Abp.Http.Client.IdentityModel.Web.Tests.csproj
index 2046533f87..ffa03ba7a6 100644
--- a/framework/test/Volo.Abp.Http.Client.IdentityModel.Web.Tests/Volo.Abp.Http.Client.IdentityModel.Web.Tests.csproj
+++ b/framework/test/Volo.Abp.Http.Client.IdentityModel.Web.Tests/Volo.Abp.Http.Client.IdentityModel.Web.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj b/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj
index 4afd08a8c8..0c0c086083 100644
--- a/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj
+++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Http.Tests/Volo.Abp.Http.Tests.csproj b/framework/test/Volo.Abp.Http.Tests/Volo.Abp.Http.Tests.csproj
index f697edc3f5..9ccebb3dbc 100644
--- a/framework/test/Volo.Abp.Http.Tests/Volo.Abp.Http.Tests.csproj
+++ b/framework/test/Volo.Abp.Http.Tests/Volo.Abp.Http.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.IdentityModel.Tests/Volo.Abp.IdentityModel.Tests.csproj b/framework/test/Volo.Abp.IdentityModel.Tests/Volo.Abp.IdentityModel.Tests.csproj
index ad31038b1d..ddf17d5b46 100644
--- a/framework/test/Volo.Abp.IdentityModel.Tests/Volo.Abp.IdentityModel.Tests.csproj
+++ b/framework/test/Volo.Abp.IdentityModel.Tests/Volo.Abp.IdentityModel.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo.Abp.Imaging.Abstractions.Tests.csproj b/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo.Abp.Imaging.Abstractions.Tests.csproj
index a0445e1c72..302dcbdfaa 100644
--- a/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo.Abp.Imaging.Abstractions.Tests.csproj
+++ b/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo.Abp.Imaging.Abstractions.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Imaging.AspNetCore.Tests/Volo.Abp.Imaging.AspNetCore.Tests.csproj b/framework/test/Volo.Abp.Imaging.AspNetCore.Tests/Volo.Abp.Imaging.AspNetCore.Tests.csproj
index 9efc1e789d..f7f6093622 100644
--- a/framework/test/Volo.Abp.Imaging.AspNetCore.Tests/Volo.Abp.Imaging.AspNetCore.Tests.csproj
+++ b/framework/test/Volo.Abp.Imaging.AspNetCore.Tests/Volo.Abp.Imaging.AspNetCore.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Imaging.ImageSharp.Tests/Volo.Abp.Imaging.ImageSharp.Tests.csproj b/framework/test/Volo.Abp.Imaging.ImageSharp.Tests/Volo.Abp.Imaging.ImageSharp.Tests.csproj
index b61ef43582..bc7a5c6341 100644
--- a/framework/test/Volo.Abp.Imaging.ImageSharp.Tests/Volo.Abp.Imaging.ImageSharp.Tests.csproj
+++ b/framework/test/Volo.Abp.Imaging.ImageSharp.Tests/Volo.Abp.Imaging.ImageSharp.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Imaging.MagickNet.Tests/Volo.Abp.Imaging.MagickNet.Tests.csproj b/framework/test/Volo.Abp.Imaging.MagickNet.Tests/Volo.Abp.Imaging.MagickNet.Tests.csproj
index 747bc6f7b9..5229f382af 100644
--- a/framework/test/Volo.Abp.Imaging.MagickNet.Tests/Volo.Abp.Imaging.MagickNet.Tests.csproj
+++ b/framework/test/Volo.Abp.Imaging.MagickNet.Tests/Volo.Abp.Imaging.MagickNet.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Imaging.SkiaSharp.Tests/Volo.Abp.Imaging.SkiaSharp.Tests.csproj b/framework/test/Volo.Abp.Imaging.SkiaSharp.Tests/Volo.Abp.Imaging.SkiaSharp.Tests.csproj
index 3272fc325a..5d0b2d1bc6 100644
--- a/framework/test/Volo.Abp.Imaging.SkiaSharp.Tests/Volo.Abp.Imaging.SkiaSharp.Tests.csproj
+++ b/framework/test/Volo.Abp.Imaging.SkiaSharp.Tests/Volo.Abp.Imaging.SkiaSharp.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj b/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj
index bba73b272f..458deff71c 100644
--- a/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj
+++ b/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj b/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj
index 2ff378dd5b..a4ccb3b226 100644
--- a/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj
+++ b/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj b/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj
index b3cb64d141..a51d355555 100644
--- a/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj b/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj
index 3e9c389745..a9270400ee 100644
--- a/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj
+++ b/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj b/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj
index 2544a6303f..f8d2feb9b0 100644
--- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj
+++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Minify.Tests/Volo.Abp.Minify.Tests.csproj b/framework/test/Volo.Abp.Minify.Tests/Volo.Abp.Minify.Tests.csproj
index 0c8ec44f1d..646ba5c75c 100644
--- a/framework/test/Volo.Abp.Minify.Tests/Volo.Abp.Minify.Tests.csproj
+++ b/framework/test/Volo.Abp.Minify.Tests/Volo.Abp.Minify.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.MongoDB.Tests.SecondContext/Volo.Abp.MongoDB.Tests.SecondContext.csproj b/framework/test/Volo.Abp.MongoDB.Tests.SecondContext/Volo.Abp.MongoDB.Tests.SecondContext.csproj
index 5682bb07e6..cd769f6f2e 100644
--- a/framework/test/Volo.Abp.MongoDB.Tests.SecondContext/Volo.Abp.MongoDB.Tests.SecondContext.csproj
+++ b/framework/test/Volo.Abp.MongoDB.Tests.SecondContext/Volo.Abp.MongoDB.Tests.SecondContext.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
true
true
diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj b/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj
index e36c148b05..ae688f1640 100644
--- a/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj
+++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj
index acf78feb9f..656113d1c5 100644
--- a/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj
+++ b/framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo.Abp.MultiLingualObjects.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
enable
diff --git a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj
index df7bd56e35..0ca67847dd 100644
--- a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj
+++ b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.ObjectExtending.Tests/Volo.Abp.ObjectExtending.Tests.csproj b/framework/test/Volo.Abp.ObjectExtending.Tests/Volo.Abp.ObjectExtending.Tests.csproj
index b8c9de1a28..f5793043c3 100644
--- a/framework/test/Volo.Abp.ObjectExtending.Tests/Volo.Abp.ObjectExtending.Tests.csproj
+++ b/framework/test/Volo.Abp.ObjectExtending.Tests/Volo.Abp.ObjectExtending.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.ObjectMapping.Tests/Volo.Abp.ObjectMapping.Tests.csproj b/framework/test/Volo.Abp.ObjectMapping.Tests/Volo.Abp.ObjectMapping.Tests.csproj
index 78e2faef67..ca98151b9e 100644
--- a/framework/test/Volo.Abp.ObjectMapping.Tests/Volo.Abp.ObjectMapping.Tests.csproj
+++ b/framework/test/Volo.Abp.ObjectMapping.Tests/Volo.Abp.ObjectMapping.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.RemoteServices.Tests/Volo.Abp.RemoteServices.Tests.csproj b/framework/test/Volo.Abp.RemoteServices.Tests/Volo.Abp.RemoteServices.Tests.csproj
index 45236b1241..d13d1545bf 100644
--- a/framework/test/Volo.Abp.RemoteServices.Tests/Volo.Abp.RemoteServices.Tests.csproj
+++ b/framework/test/Volo.Abp.RemoteServices.Tests/Volo.Abp.RemoteServices.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj b/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj
index 2672978f72..8faa9d22ef 100644
--- a/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj
+++ b/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj b/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj
index 2a288ec31d..34da8cb6d0 100644
--- a/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj
+++ b/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj b/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj
index c96aed4ae4..83045d9b1d 100644
--- a/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj
+++ b/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Sms.Aliyun.Tests/Volo.Abp.Sms.Aliyun.Tests.csproj b/framework/test/Volo.Abp.Sms.Aliyun.Tests/Volo.Abp.Sms.Aliyun.Tests.csproj
index b69fbe3191..9382d8f925 100644
--- a/framework/test/Volo.Abp.Sms.Aliyun.Tests/Volo.Abp.Sms.Aliyun.Tests.csproj
+++ b/framework/test/Volo.Abp.Sms.Aliyun.Tests/Volo.Abp.Sms.Aliyun.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
9f0d2c00-80c1-435b-bfab-2c39c8249091
diff --git a/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj b/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj
index 4f8b44e447..87728d2c93 100644
--- a/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj
+++ b/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj b/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj
index 1cb2ab1e5e..d39e1a441b 100644
--- a/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj
+++ b/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj
index 4737a1e906..c70e5e5f99 100644
--- a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj
+++ b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
true
diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj
index ee718f907f..1818c632af 100644
--- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj
+++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo.Abp.TextTemplating.Razor.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj
index f5a363b229..6865f367f3 100644
--- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj
+++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo.Abp.TextTemplating.Scriban.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj
index 03784c1eaf..1c2efdfd4e 100644
--- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj
+++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo.Abp.TextTemplating.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Threading.Tests/Volo.Abp.Threading.Tests.csproj b/framework/test/Volo.Abp.Threading.Tests/Volo.Abp.Threading.Tests.csproj
index 160b9b1fe7..63248e811e 100644
--- a/framework/test/Volo.Abp.Threading.Tests/Volo.Abp.Threading.Tests.csproj
+++ b/framework/test/Volo.Abp.Threading.Tests/Volo.Abp.Threading.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj
index ceef63feed..4f4a48039d 100644
--- a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj
+++ b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj b/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj
index 39b2b90a93..61344699f2 100644
--- a/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj
+++ b/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj b/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj
index 36112ef7d8..1969b6b6ce 100644
--- a/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj
+++ b/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj
index 052650b5a8..9217473910 100644
--- a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj
+++ b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
true
diff --git a/global.json b/global.json
index 391ba3c2a3..83d8871ef2 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "8.0.100",
+ "version": "9.0.100-rc.1.24452.12",
"rollForward": "latestFeature"
}
}
diff --git a/latest-versions.json b/latest-versions.json
index f505ff8abd..0eff05a891 100644
--- a/latest-versions.json
+++ b/latest-versions.json
@@ -1,6 +1,6 @@
[
{
- "version": "8.3.0",
+ "version": "8.3.1",
"releaseDate": "",
"type": "stable",
"message": ""
diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.csproj b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.csproj
index 67e5aeaf95..f8275b0e45 100644
--- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.csproj
+++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Abp.Account.Application.Contracts
Volo.Abp.Account.Application.Contracts
true
diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj
index e43314c3d5..e32c705afb 100644
--- a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj
+++ b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Account.Application
Volo.Abp.Account.Application
true
diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj
index dbf838fd44..0eaa3cd978 100644
--- a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj
+++ b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Account.Blazor
diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.csproj b/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.csproj
index ee3f00333f..7b808a3da9 100644
--- a/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.csproj
+++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Abp.Account.HttpApi.Client
Volo.Abp.Account.HttpApi.Client
diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.csproj b/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.csproj
index a79380a7a0..fe90e00d1c 100644
--- a/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.csproj
+++ b/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Account.HttpApi
Volo.Abp.Account.HttpApi
diff --git a/modules/account/src/Volo.Abp.Account.Installer/Volo.Abp.Account.Installer.csproj b/modules/account/src/Volo.Abp.Account.Installer/Volo.Abp.Account.Installer.csproj
index 284925acd8..8ae730d20c 100644
--- a/modules/account/src/Volo.Abp.Account.Installer/Volo.Abp.Account.Installer.csproj
+++ b/modules/account/src/Volo.Abp.Account.Installer/Volo.Abp.Account.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj
index 7e7136d247..e4235dbd94 100644
--- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj
+++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Volo.Abp.Account.Web.IdentityServer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Account.Web.IdentityServer
Volo.Abp.Account.Web.IdentityServer
true
diff --git a/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.csproj b/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.csproj
index 21d270b8d8..3346a628e1 100644
--- a/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.csproj
+++ b/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Account.Web.OpenIddict
Volo.Abp.Account.Web.OpenIddict
true
diff --git a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj
index a2ad539865..efedb773fe 100644
--- a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj
+++ b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Account.Web
Volo.Abp.Account.Web
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/modules/account/test/Volo.Abp.Account.Application.Tests/Volo.Abp.Account.Application.Tests.csproj b/modules/account/test/Volo.Abp.Account.Application.Tests/Volo.Abp.Account.Application.Tests.csproj
index 9065c6c774..218c21ea2e 100644
--- a/modules/account/test/Volo.Abp.Account.Application.Tests/Volo.Abp.Account.Application.Tests.csproj
+++ b/modules/account/test/Volo.Abp.Account.Application.Tests/Volo.Abp.Account.Application.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.csproj
index a7adfdf5f3..f8c35b3f49 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.csproj
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
true
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.csproj
index 71b73f6a27..a93e5f5823 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.csproj
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj
index 0c10f33488..6117d5ac5e 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Installer/Volo.Abp.AuditLogging.Installer.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.Installer/Volo.Abp.AuditLogging.Installer.csproj
index 0e616b6b9d..717a214655 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Installer/Volo.Abp.AuditLogging.Installer.csproj
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Installer/Volo.Abp.AuditLogging.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.csproj b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.csproj
index 270e7375e5..652bd943a5 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.csproj
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests.csproj b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests.csproj
index ad777f43b5..99ad35711f 100644
--- a/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests.csproj
+++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests/Volo.Abp.AuditLogging.EntityFrameworkCore.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/Volo.Abp.AuditLogging.MongoDB.Tests.csproj b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/Volo.Abp.AuditLogging.MongoDB.Tests.csproj
index 0c62b41672..41718fda4e 100644
--- a/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/Volo.Abp.AuditLogging.MongoDB.Tests.csproj
+++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.MongoDB.Tests/Volo.Abp.AuditLogging.MongoDB.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo.Abp.AuditLogging.TestBase.csproj b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo.Abp.AuditLogging.TestBase.csproj
index 546026a607..26af9d72a2 100644
--- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo.Abp.AuditLogging.TestBase.csproj
+++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo.Abp.AuditLogging.TestBase.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo.Abp.AuditLogging.Tests.csproj b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo.Abp.AuditLogging.Tests.csproj
index 9ac094b81c..08d9788bb7 100644
--- a/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo.Abp.AuditLogging.Tests.csproj
+++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.Tests/Volo.Abp.AuditLogging.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj
index 07fab0a446..2236da5c2b 100644
--- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj
+++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.HangFire/Volo.Abp.BackgroundJobs.DemoApp.HangFire.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net9.0
diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj
index 62223b0fa5..b646707e44 100644
--- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj
+++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Quartz/Volo.Abp.BackgroundJobs.DemoApp.Quartz.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net9.0
diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.csproj
index d1ef90c128..5b3cb4a375 100644
--- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.csproj
+++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq/Volo.Abp.BackgroundJobs.DemoApp.RabbitMq.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net9.0
diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.csproj
index 324f6c95ea..3ba0c6b8d5 100644
--- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.csproj
+++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.Shared/Volo.Abp.BackgroundJobs.DemoApp.Shared.csproj
@@ -3,7 +3,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.csproj b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.csproj
index c170d528f3..4e377ce512 100644
--- a/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.csproj
+++ b/modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp/Volo.Abp.BackgroundJobs.DemoApp.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net9.0
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.csproj
index 1ba9dfccc4..e68943924a 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.csproj
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj
index a88ae98514..9a23652a5a 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj
index 37eb414f7a..87455326b3 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Installer/Volo.Abp.BackgroundJobs.Installer.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Installer/Volo.Abp.BackgroundJobs.Installer.csproj
index 469cfdcfdc..345066fac6 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Installer/Volo.Abp.BackgroundJobs.Installer.csproj
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Installer/Volo.Abp.BackgroundJobs.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj
index ebe4bf7aab..46306dbda5 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo.Abp.BackgroundJobs.Domain.Tests.csproj b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo.Abp.BackgroundJobs.Domain.Tests.csproj
index 0f83bd983b..688801eb12 100644
--- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo.Abp.BackgroundJobs.Domain.Tests.csproj
+++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.Domain.Tests/Volo.Abp.BackgroundJobs.Domain.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests.csproj b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests.csproj
index 4e6bc983db..df7b4203b6 100644
--- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests.csproj
+++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests/Volo.Abp.BackgroundJobs.EntityFrameworkCore.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.csproj b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.csproj
index 73044de04f..c6a4b35a66 100644
--- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.csproj
+++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.MongoDB.Tests/Volo.Abp.BackgroundJobs.MongoDB.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo.Abp.BackgroundJobs.TestBase.csproj b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo.Abp.BackgroundJobs.TestBase.csproj
index 2487119c48..be0290295a 100644
--- a/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo.Abp.BackgroundJobs.TestBase.csproj
+++ b/modules/background-jobs/test/Volo.Abp.BackgroundJobs.TestBase/Volo.Abp.BackgroundJobs.TestBase.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj
index 50905eea49..d324b434af 100644
--- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj
+++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Volo.Abp.AspNetCore.Components.Server.BasicTheme.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Volo.Abp.AspNetCore.Components.Web.BasicTheme.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Volo.Abp.AspNetCore.Components.Web.BasicTheme.csproj
index 0263d014a2..154a2be3ff 100644
--- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Volo.Abp.AspNetCore.Components.Web.BasicTheme.csproj
+++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.BasicTheme/Volo.Abp.AspNetCore.Components.Web.BasicTheme.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj
index 23f7859557..d7ee34d13c 100644
--- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj
+++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme
diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj
index 9ff991f618..b766fa0b81 100644
--- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj
+++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic
Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic
diff --git a/modules/basic-theme/src/Volo.Abp.BasicTheme.Installer/Volo.Abp.BasicTheme.Installer.csproj b/modules/basic-theme/src/Volo.Abp.BasicTheme.Installer/Volo.Abp.BasicTheme.Installer.csproj
index d558129dcf..2cd8fe922f 100644
--- a/modules/basic-theme/src/Volo.Abp.BasicTheme.Installer/Volo.Abp.BasicTheme.Installer.csproj
+++ b/modules/basic-theme/src/Volo.Abp.BasicTheme.Installer/Volo.Abp.BasicTheme.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj
index 979e65689a..5ea9ddce61 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests
Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs
index 654ada13fc..92c8b7b30b 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs
@@ -31,7 +31,7 @@ public class AbpAspNetCoreMvcUiBootstrapDemoModule : AbpModule
}
app.UseRouting();
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseConfiguredEndpoints();
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile
index 4e9b0e733a..b2a34f3bc8 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile
@@ -1,4 +1,4 @@
-FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_URLS=http://+:80
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile.azure b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile.azure
index 4586d6dc02..fa4f4d198a 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile.azure
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Dockerfile.azure
@@ -1,6 +1,6 @@
FROM node:16 AS nodebase
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
COPY --from=nodebase /usr/local/bin /usr/local/bin
COPY --from=nodebase /usr/local/lib /usr/local/lib
@@ -14,7 +14,7 @@ WORKDIR /app/abp/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.D
RUN abp install-libs
RUN dotnet publish -c Release -o bin/Release/publish
-FROM mcr.microsoft.com/dotnet/aspnet:8.0
+FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_URLS=http://+:80
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj
index d4d781f281..f8202b97ec 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/AbpAspNetCoreMvcUiThemeBasicDemoModule.cs b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/AbpAspNetCoreMvcUiThemeBasicDemoModule.cs
index 1b1a3f3469..4ebeb18498 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/AbpAspNetCoreMvcUiThemeBasicDemoModule.cs
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/AbpAspNetCoreMvcUiThemeBasicDemoModule.cs
@@ -55,7 +55,7 @@ public class AbpAspNetCoreMvcUiThemeBasicDemoModule : AbpModule
app.UseDeveloperExceptionPage();
}
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseRouting();
app.UseConfiguredEndpoints();
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj
index 1524092d59..11c1c98679 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/BlobStoring.Database.Host.ConsoleApp.ConsoleApp.csproj b/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/BlobStoring.Database.Host.ConsoleApp.ConsoleApp.csproj
index 456278ece2..028552b088 100644
--- a/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/BlobStoring.Database.Host.ConsoleApp.ConsoleApp.csproj
+++ b/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/BlobStoring.Database.Host.ConsoleApp.ConsoleApp.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net9.0
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.csproj b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.csproj
index 7ed418de4c..b1c1cf8226 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.csproj
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.csproj b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.csproj
index 3d796b1ac8..8f2ec18714 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.csproj
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.csproj b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.csproj
index 451b5d0969..af7a098577 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.csproj
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Installer/Volo.Abp.BlobStoring.Database.Installer.csproj b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Installer/Volo.Abp.BlobStoring.Database.Installer.csproj
index bf190d6c56..3543278561 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Installer/Volo.Abp.BlobStoring.Database.Installer.csproj
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Installer/Volo.Abp.BlobStoring.Database.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.csproj b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.csproj
index 552d85d2ab..817549f442 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.csproj
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.Domain.Tests/Volo.Abp.BlobStoring.Database.Domain.Tests.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.Domain.Tests/Volo.Abp.BlobStoring.Database.Domain.Tests.csproj
index 5ca77576ca..4dc289e2bc 100644
--- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.Domain.Tests/Volo.Abp.BlobStoring.Database.Domain.Tests.csproj
+++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.Domain.Tests/Volo.Abp.BlobStoring.Database.Domain.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.Abp.BlobStoring.Database
diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj
index b48e29993d..1794eba7b5 100644
--- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj
+++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.Abp.BlobStoring.Database
diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.MongoDB.Tests/Volo.Abp.BlobStoring.Database.MongoDB.Tests.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.MongoDB.Tests/Volo.Abp.BlobStoring.Database.MongoDB.Tests.csproj
index 3c891425af..1bd05f4357 100644
--- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.MongoDB.Tests/Volo.Abp.BlobStoring.Database.MongoDB.Tests.csproj
+++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.MongoDB.Tests/Volo.Abp.BlobStoring.Database.MongoDB.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.Abp.BlobStoring.Database
diff --git a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.TestBase/Volo.Abp.BlobStoring.Database.TestBase.csproj b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.TestBase/Volo.Abp.BlobStoring.Database.TestBase.csproj
index 6b0aea6e03..8168f52edb 100644
--- a/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.TestBase/Volo.Abp.BlobStoring.Database.TestBase.csproj
+++ b/modules/blob-storing-database/test/Volo.Abp.BlobStoring.Database.TestBase/Volo.Abp.BlobStoring.Database.TestBase.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.Abp.BlobStoring.Database
diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj
index 8e7342b580..c6b77b8b2c 100644
--- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj
+++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
index 0cdcbcf40d..efa14361a2 100644
--- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
+++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs
index 37ce9e4f69..6e2383dcbd 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs
+++ b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs
@@ -161,7 +161,7 @@ namespace Volo.BloggingTestApp
app.UseErrorPage();
}
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseRouting();
diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj
index 0653e75c25..4e58d52df0 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj
+++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
InProcess
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.csproj b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.csproj
index 193d5ef5c0..7e764d9f88 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.csproj
+++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Blogging.Admin.Application.Contracts
Volo.Blogging.Admin.Application.Contracts
true
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj
index 515ce2de5d..45863cd86c 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj
+++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.Admin.Application
Volo.Blogging.Admin.Application
diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.csproj b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.csproj
index 5e9c037ca9..1bd0e02c67 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.csproj
+++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Blogging.Admin.HttpApi.Client
Volo.Blogging.Admin.HttpApi.Client
diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.csproj b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.csproj
index d5870ab593..2aea7d6494 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.csproj
+++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.Admin.HttpApi
Volo.Blogging.Admin.HttpApi
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.csproj b/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.csproj
index c6d757172d..04df5c550d 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.csproj
+++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.Admin.Web
Volo.Blogging.Admin.Web
2.8
diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj
index 85184f09da..8a223b0a5f 100644
--- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj
+++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Blogging.Application.Contracts.Shared
Volo.Blogging.Application.Contracts.Shared
diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj
index 22296dc25f..b2ce64a90a 100644
--- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj
+++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Blogging.Application.Contracts
Volo.Blogging.Application.Contracts
true
diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj
index 2d15d02620..5119993b9c 100644
--- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj
+++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.Application
Volo.Blogging.Application
diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.csproj b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.csproj
index f8f7b3560b..7c5a78f4f6 100644
--- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.csproj
+++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Blogging.Domain.Shared
Volo.Blogging.Domain.Shared
true
diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
index 3e2d210d8d..ff0dbba17b 100644
--- a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
+++ b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.Domain
Volo.Blogging.Domain
diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj
index a51f7d7769..3dd83af0c5 100644
--- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj
+++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.EntityFrameworkCore
Volo.Blogging.EntityFrameworkCore
diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.csproj b/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.csproj
index 12fab4fb08..a2d58217fb 100644
--- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.csproj
+++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Blogging.HttpApi.Client
Volo.Blogging.HttpApi.Client
diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj
index 95a0fdc426..5a6480abd6 100644
--- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj
+++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.HttpApi
Volo.Blogging.HttpApi
diff --git a/modules/blogging/src/Volo.Blogging.Installer/Volo.Blogging.Installer.csproj b/modules/blogging/src/Volo.Blogging.Installer/Volo.Blogging.Installer.csproj
index 679c55f061..a5fbe01cca 100644
--- a/modules/blogging/src/Volo.Blogging.Installer/Volo.Blogging.Installer.csproj
+++ b/modules/blogging/src/Volo.Blogging.Installer/Volo.Blogging.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj
index 1614e3285d..bbe4963401 100644
--- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj
+++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.MongoDB
Volo.Blogging.MongoDB
diff --git a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj
index 84891ab800..06133868ab 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj
+++ b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Blogging.Web
Volo.Blogging.Web
2.8
diff --git a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
index 1d9f0b810d..c08a315a33 100644
--- a/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj
index e379b5b016..6e9d3c5fa0 100644
--- a/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
index 1fdf71171b..d5c859a42f 100644
--- a/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj
index e52a6dceb0..88cd171a55 100644
--- a/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj
+++ b/modules/blogging/test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj b/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj
index 432081645b..657be0068d 100644
--- a/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj
+++ b/modules/blogging/test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/ClientSimulationDemoModule.cs b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/ClientSimulationDemoModule.cs
index 006fb8c3a5..90b1c903f5 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/ClientSimulationDemoModule.cs
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/ClientSimulationDemoModule.cs
@@ -40,7 +40,7 @@ public class ClientSimulationDemoModule : AbpModule
app.UseDeveloperExceptionPage();
}
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseRouting();
app.UseConfiguredEndpoints();
}
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
index 0af72b5fbe..7f808baab7 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
index 09ac77536d..3488db3c1c 100644
--- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
+++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.ClientSimulation.Web
Volo.ClientSimulation.Web
Library
diff --git a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
index 0cba5a1f61..2cab8fce07 100644
--- a/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
+++ b/modules/client-simulation/src/Volo.ClientSimulation/Volo.ClientSimulation.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.ClientSimulation
Volo.ClientSimulation
diff --git a/modules/cms-kit/database/Dockerfile b/modules/cms-kit/database/Dockerfile
index 45eebace1c..2eb1345cd0 100644
--- a/modules/cms-kit/database/Dockerfile
+++ b/modules/cms-kit/database/Dockerfile
@@ -1,4 +1,4 @@
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
COPY . .
WORKDIR /templates/service/host/IdentityServerHost
diff --git a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj
index f8dc1ff901..6c638dab0e 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj
+++ b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.CmsKit
diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs
index aeb45bea02..523dec994f 100644
--- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs
+++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs
@@ -172,7 +172,7 @@ public class CmsKitHttpApiHostModule : AbpModule
app.UseHttpsRedirection();
app.UseCorrelationId();
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Dockerfile b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Dockerfile
index c0f3b2536f..e9718e16d6 100644
--- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Dockerfile
+++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Dockerfile
@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_URLS=http://+:80
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
WORKDIR /src/templates/service/host/Volo.CmsKit.HttpApi.Host
diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj
index 406fb16a62..92c5715372 100644
--- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj
+++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
true
Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs
index 070508d178..623b417bc7 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs
@@ -195,7 +195,7 @@ public class CmsKitIdentityServerModule : AbpModule
app.UseHttpsRedirection();
app.UseCorrelationId();
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Dockerfile b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Dockerfile
index ae0a783949..c9f7f1a020 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Dockerfile
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Dockerfile
@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_URLS=http://+:80
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
WORKDIR /src/templates/service/host/Volo.CmsKit.IdentityServer
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj
index 193dc4b29b..2f0f9c0fee 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
true
Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebHostModule.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebHostModule.cs
index 4ca31dc44a..7f2f539d7e 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebHostModule.cs
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebHostModule.cs
@@ -222,7 +222,7 @@ public class CmsKitWebHostModule : AbpModule
}
app.UseHttpsRedirection();
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseRouting();
app.UseAuthentication();
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj
index 7f5d887af7..214328168c 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
true
Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs
index cb515032b6..c216a6ba38 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs
@@ -263,7 +263,7 @@ public class CmsKitWebUnifiedModule : AbpModule
}
app.UseHttpsRedirection();
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseRouting();
app.UseAuthentication();
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj
index 996655cc62..4ffdf018d1 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
true
Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.csproj
index e00b83818e..9b8e5b4df2 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
index ef9bb92ab3..a7a998e292 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.csproj
index 33c941354e..f39bcbc3be 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.csproj
index 11da648e64..57f972c71b 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj
index a6c0d9cb0a..9323e3044e 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
true
Library
diff --git a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.csproj b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.csproj
index 906e6cd0f8..b42b8b9416 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj
index 745e828a8a..0fa9332fd8 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj
index e28bd6df10..71d28ddecd 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj
index 7d0e969b93..d7d88be59e 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.csproj
index 15b6a47c2c..ca7f703938 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.csproj
index 373181dba3..4adeeb3970 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj
index 9b8de76772..f051498795 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
true
Library
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj
index 5a3bcd90d4..72815bbb76 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
true
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj
index d54c87c4f9..927f724956 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj
index 3072a1545f..5724ccb86a 100644
--- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.csproj b/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.csproj
index 0872a1f731..fee3bcf3ab 100644
--- a/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.csproj b/modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.csproj
index 3d6ec9aaa3..8713737078 100644
--- a/modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Installer/Volo.CmsKit.Installer.csproj b/modules/cms-kit/src/Volo.CmsKit.Installer/Volo.CmsKit.Installer.csproj
index a4cc845142..702c31f0b7 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Installer/Volo.CmsKit.Installer.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Installer/Volo.CmsKit.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj
index 474b31d4a5..600d04ce18 100644
--- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.csproj
index fc65657274..18442a25c4 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj
index d1625e8c7c..cfda642b4f 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.csproj
index 2867f0f575..a52f5b01d8 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.csproj
index fa88cf9a84..75e416d875 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj
index 165eae38c9..103f291d29 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
true
Library
diff --git a/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj
index bc32c8d734..53b80f3ed8 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
true
Library
diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs
index 9e682b2e26..a60c57c725 100644
--- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs
+++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs
@@ -64,7 +64,7 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase
.ShouldBeTrue();
});
}
-
+
[Theory]
[InlineData("https://abp.io/features")]
public async Task CreateAsync_ShouldCreateComment_If_Url_Allowed(string text)
@@ -94,7 +94,7 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase
await _commentAppService.CreateAsync(
_cmsKitTestData.EntityType1,
_cmsKitTestData.EntityId1,
- new CreateCommentInput
+ new CreateCommentInput
{
RepliedCommentId = null,
Text = text, //not allowed URL
@@ -104,7 +104,7 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase
}
[Fact]
- public async Task CreateAsync_ShouldThrowUserFriendlyException_If_IdempotencyToken_Not_Unique()
+ public async Task CreateAsync_ShouldThrowUserFriendlyException_If_IdempotencyToken_Not_Unique()
{
_currentUser.Id.Returns(_cmsKitTestData.User2Id);
@@ -112,10 +112,10 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase
await _commentAppService.CreateAsync(
_cmsKitTestData.EntityType1,
_cmsKitTestData.EntityId1,
- new CreateCommentInput
+ new CreateCommentInput
{
RepliedCommentId = null,
- Text = "",
+ Text = "",
IdempotencyToken = _cmsKitTestData.IdempotencyToken_1
}
));
@@ -139,7 +139,7 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase
comment.Text.ShouldBe("I'm Updated");
});
}
-
+
[Fact]
public async Task UpdateAsync_ShouldThrowUserFriendlyException_If_Url_UnAllowed()
{
@@ -148,7 +148,7 @@ public class CommentPublicAppService_Tests : CmsKitApplicationTestBase
await Should.ThrowAsync(async () =>
await _commentAppService.UpdateAsync(
_cmsKitTestData.CommentWithChildId,
- new UpdateCommentInput
+ new UpdateCommentInput
{
Text = "[ABP Community - Update](https://community.abp.io/)", //not allowed URL
}
diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj
index 045432f8e9..400fcf237a 100644
--- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj
+++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj
index e460903a38..7b9c185003 100644
--- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj
+++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj
index 1d38b305d2..288da13edf 100644
--- a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj
+++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
diff --git a/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj b/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj
index 56d8f1057f..c9aefb1d39 100644
--- a/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj
+++ b/modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net9.0
Volo.CmsKit
diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj
index 1bc03be9ae..17c6dfe717 100644
--- a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj
+++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj b/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj
index 839be10d90..4551360a30 100644
--- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj
+++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
Volo.CmsKit
diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj
index 6372a706b4..38f85e7541 100644
--- a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj
+++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/docs/app/VoloDocs.Migrator/Dockerfile b/modules/docs/app/VoloDocs.Migrator/Dockerfile
index 2da1892ad6..8f3dabcb5c 100644
--- a/modules/docs/app/VoloDocs.Migrator/Dockerfile
+++ b/modules/docs/app/VoloDocs.Migrator/Dockerfile
@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_URLS=http://+:80
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
WORKDIR "/src/modules/docs/app/VoloDocs.Migrator"
diff --git a/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj b/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj
index bc97264d1f..9b66dec4ef 100644
--- a/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj
+++ b/modules/docs/app/VoloDocs.Migrator/VoloDocs.Migrator.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
Exe
win-x64;linux-x64;osx-x64
diff --git a/modules/docs/app/VoloDocs.Web/Dockerfile b/modules/docs/app/VoloDocs.Web/Dockerfile
index e7a3f1f7ee..c5b14533fd 100644
--- a/modules/docs/app/VoloDocs.Web/Dockerfile
+++ b/modules/docs/app/VoloDocs.Web/Dockerfile
@@ -1,9 +1,9 @@
-FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_URLS=http://+:80
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
WORKDIR "/src/modules/docs/app/VoloDocs.Web"
diff --git a/modules/docs/app/VoloDocs.Web/Program.cs b/modules/docs/app/VoloDocs.Web/Program.cs
index 5a0860f727..c0373525db 100644
--- a/modules/docs/app/VoloDocs.Web/Program.cs
+++ b/modules/docs/app/VoloDocs.Web/Program.cs
@@ -1,6 +1,9 @@
using System;
using System.IO;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Events;
@@ -9,7 +12,7 @@ namespace VoloDocs.Web
{
public class Program
{
- public static int Main(string[] args)
+ public async static Task Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug() //TODO: Should be configurable!
@@ -22,7 +25,14 @@ namespace VoloDocs.Web
try
{
Log.Information("Starting web host.");
- CreateHostBuilder(args).Build().Run();
+ var builder = WebApplication.CreateBuilder(args);
+ builder.Host
+ .UseAutofac()
+ .UseSerilog();
+ await builder.AddApplicationAsync();
+ var app = builder.Build();
+ await app.InitializeApplicationAsync();
+ await app.RunAsync();
return 0;
}
catch (Exception ex)
@@ -32,17 +42,8 @@ namespace VoloDocs.Web
}
finally
{
- Log.CloseAndFlush();
+ await Log.CloseAndFlushAsync();
}
}
-
- internal static IHostBuilder CreateHostBuilder(string[] args) =>
- Host.CreateDefaultBuilder(args)
- .ConfigureWebHostDefaults(webBuilder =>
- {
- webBuilder.UseStartup();
- })
- .UseAutofac()
- .UseSerilog();
}
}
diff --git a/modules/docs/app/VoloDocs.Web/Properties/launchSettings.json b/modules/docs/app/VoloDocs.Web/Properties/launchSettings.json
index 08e2199ddb..2d88b20c15 100644
--- a/modules/docs/app/VoloDocs.Web/Properties/launchSettings.json
+++ b/modules/docs/app/VoloDocs.Web/Properties/launchSettings.json
@@ -3,8 +3,8 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
- "applicationUrl": "https://localhost:44333/",
- "sslPort": 0
+ "applicationUrl": "https://localhost:5001/",
+ "sslPort": 5001
}
},
"profiles": {
@@ -21,7 +21,7 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
- "applicationUrl": "https://localhost:44333/"
+ "applicationUrl": "https://localhost:5001/"
}
}
}
diff --git a/modules/docs/app/VoloDocs.Web/Startup.cs b/modules/docs/app/VoloDocs.Web/Startup.cs
deleted file mode 100644
index 22d7b980c5..0000000000
--- a/modules/docs/app/VoloDocs.Web/Startup.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using Volo.Abp;
-
-namespace VoloDocs.Web
-{
- public class Startup
- {
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddApplication();
- }
-
- public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
- {
- app.InitializeApplication();
- }
- }
-}
diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj
index bc6c12fc77..0a59f42c87 100644
--- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj
+++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
true
true
false
diff --git a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
index 8651c0d3fd..743944c6d3 100644
--- a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
+++ b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
@@ -177,7 +177,7 @@ namespace VoloDocs.Web
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
- app.UseStaticFiles();
+ app.MapAbpStaticAssets();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj
index 7114f8531e..a49d9146db 100644
--- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj
+++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Docs.Admin.Application.Contracts
Volo.Docs.Admin.Application.Contracts
true
diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj
index d221ef849b..3d947ead5e 100644
--- a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj
+++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.Admin.Application
Volo.Docs.Admin.Application
diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.csproj b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.csproj
index ff0832d636..36aa447f74 100644
--- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.csproj
+++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Docs.Admin.HttpApi.Client
Volo.Docs.Admin.HttpApi.Client
diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj
index 95a6c3fca7..6d718f03bb 100644
--- a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj
+++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.Admin.HttpApi
Volo.Docs.Admin.HttpApi
diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.csproj b/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.csproj
index 09527663c7..b706561d9d 100644
--- a/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.csproj
+++ b/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.Admin.Web
Volo.Docs.Admin.Web
Library
diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj b/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj
index 6ce1f84c53..d6d7c37d07 100644
--- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj
+++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Docs.Application.Contracts
Volo.Docs.Application.Contracts
diff --git a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj
index 37f9115edb..0bbf42da7e 100644
--- a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj
+++ b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.Application
Volo.Docs.Application
diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj
index 10c5bbaa14..8a4911b9b9 100644
--- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj
+++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Docs.Domain.Shared
Volo.Docs.Domain.Shared
diff --git a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj
index cc93092b37..5f2c9b6206 100644
--- a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj
+++ b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.Domain
Volo.Docs.Domain
true
diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/FileSystem/Documents/FileSystemDocumentSource.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/FileSystem/Documents/FileSystemDocumentSource.cs
index aba271272a..e16f81d2c9 100644
--- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/FileSystem/Documents/FileSystemDocumentSource.cs
+++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/FileSystem/Documents/FileSystemDocumentSource.cs
@@ -32,6 +32,8 @@ namespace Volo.Docs.FileSystem.Documents
localDirectory = documentName.Substring(0, documentName.LastIndexOf('/'));
}
+ version = File.GetLastWriteTime(path).ToString("yyyyMMddHHmmss");
+
return new Document(GuidGenerator.Create(),
project.Id,
documentName,
diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj
index 2001b7c029..e87654ccfb 100644
--- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj
+++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.EntityFrameworkCore
Volo.Docs.EntityFrameworkCore
diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.csproj b/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.csproj
index 08cd3439ec..4527cf93b4 100644
--- a/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.csproj
+++ b/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Docs.HttpApi.Client
Volo.Docs.HttpApi.Client
diff --git a/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj b/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj
index 8f58989609..6a05569bbb 100644
--- a/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj
+++ b/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.HttpApi
Volo.Docs.HttpApi
diff --git a/modules/docs/src/Volo.Docs.Installer/Volo.Docs.Installer.csproj b/modules/docs/src/Volo.Docs.Installer/Volo.Docs.Installer.csproj
index 8af37e1793..9d8e51269c 100644
--- a/modules/docs/src/Volo.Docs.Installer/Volo.Docs.Installer.csproj
+++ b/modules/docs/src/Volo.Docs.Installer/Volo.Docs.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj
index 753a8b826d..f32a441f86 100644
--- a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj
+++ b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.MongoDB
Volo.Docs.MongoDB
diff --git a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj
index 488cbd7d17..1d6e0e1ace 100644
--- a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj
+++ b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Docs.Web
Volo.Docs.Web
Library
diff --git a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj
index a42d7da5c9..46528e0fdb 100644
--- a/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj
+++ b/modules/docs/test/Volo.Docs.Admin.Application.Tests/Volo.Docs.Admin.Application.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/docs/test/Volo.Docs.Application.Tests/Volo.Docs.Application.Tests.csproj b/modules/docs/test/Volo.Docs.Application.Tests/Volo.Docs.Application.Tests.csproj
index e6c22e0a20..c72f5ecfac 100644
--- a/modules/docs/test/Volo.Docs.Application.Tests/Volo.Docs.Application.Tests.csproj
+++ b/modules/docs/test/Volo.Docs.Application.Tests/Volo.Docs.Application.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/docs/test/Volo.Docs.Domain.Tests/Volo.Docs.Domain.Tests.csproj b/modules/docs/test/Volo.Docs.Domain.Tests/Volo.Docs.Domain.Tests.csproj
index 959a14fac7..7cf5568023 100644
--- a/modules/docs/test/Volo.Docs.Domain.Tests/Volo.Docs.Domain.Tests.csproj
+++ b/modules/docs/test/Volo.Docs.Domain.Tests/Volo.Docs.Domain.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo.Docs.EntityFrameworkCore.Tests.csproj b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo.Docs.EntityFrameworkCore.Tests.csproj
index f6b4cfcfe4..fe001e348f 100644
--- a/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo.Docs.EntityFrameworkCore.Tests.csproj
+++ b/modules/docs/test/Volo.Docs.EntityFrameworkCore.Tests/Volo.Docs.EntityFrameworkCore.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj
index 821ffee44a..5c3f98c351 100644
--- a/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj
+++ b/modules/docs/test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj b/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj
index 9b82d26ce1..5fe7e024ea 100644
--- a/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj
+++ b/modules/docs/test/Volo.Docs.TestBase/Volo.Docs.TestBase.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.csproj
index 11958e0528..d1474589ba 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj
index c4cc3948a6..1d377de8e1 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/Volo.Abp.FeatureManagement.Blazor.Server.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/Volo.Abp.FeatureManagement.Blazor.Server.csproj
index e3a4b1a8e9..b1ba7d7d32 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/Volo.Abp.FeatureManagement.Blazor.Server.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/Volo.Abp.FeatureManagement.Blazor.Server.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/Volo.Abp.FeatureManagement.Blazor.WebAssembly.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/Volo.Abp.FeatureManagement.Blazor.WebAssembly.csproj
index f536087fd2..f9a635c22f 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/Volo.Abp.FeatureManagement.Blazor.WebAssembly.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.WebAssembly/Volo.Abp.FeatureManagement.Blazor.WebAssembly.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.csproj
index c5b0087bb1..c0fc137c9b 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.csproj
index b1f2c7faa1..72b9c1740b 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
true
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj
index a78f9f2d36..2d6dfdf7ba 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj
index f44aaee65b..a0da1e90fe 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.csproj
index ace3a51275..d72a7a7dcb 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.csproj
index 478b0b6046..567b2c0ee7 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Installer/Volo.Abp.FeatureManagement.Installer.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Installer/Volo.Abp.FeatureManagement.Installer.csproj
index 42ca9d48d3..ec1b57ffa1 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Installer/Volo.Abp.FeatureManagement.Installer.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Installer/Volo.Abp.FeatureManagement.Installer.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
true
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.csproj
index e92161b24d..09e5046a86 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj
index 3da708dada..3b60a8e3a9 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
true
Library
diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo.Abp.FeatureManagement.Application.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo.Abp.FeatureManagement.Application.Tests.csproj
index 8d9e570c4f..f4e761fa58 100644
--- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo.Abp.FeatureManagement.Application.Tests.csproj
+++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo.Abp.FeatureManagement.Application.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj
index 8449927e7a..1c26413abb 100644
--- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj
+++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo.Abp.FeatureManagement.Domain.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests.csproj
index abf92185e2..c62851d87d 100644
--- a/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests.csproj
+++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests/Volo.Abp.FeatureManagement.EntityFrameworkCore.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/Volo.Abp.FeatureManagement.MongoDB.Tests.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/Volo.Abp.FeatureManagement.MongoDB.Tests.csproj
index 065eb7c06e..bfc01a429f 100644
--- a/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/Volo.Abp.FeatureManagement.MongoDB.Tests.csproj
+++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.MongoDB.Tests/Volo.Abp.FeatureManagement.MongoDB.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo.Abp.FeatureManagement.TestBase.csproj b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo.Abp.FeatureManagement.TestBase.csproj
index 85e88061f8..087b722b89 100644
--- a/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo.Abp.FeatureManagement.TestBase.csproj
+++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.TestBase/Volo.Abp.FeatureManagement.TestBase.csproj
@@ -3,7 +3,7 @@
- net8.0
+ net9.0
diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
index c0cfc5ad56..b3e4f60a44 100644
--- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Abp.Identity.Application.Contracts
Volo.Abp.Identity.Application.Contracts
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj
index b1c86f75e7..0b3693b5d1 100644
--- a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Identity.Application
Volo.Abp.Identity.Application
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo.Abp.Identity.AspNetCore.csproj b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo.Abp.Identity.AspNetCore.csproj
index 417a290c59..a2300c6fe8 100644
--- a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo.Abp.Identity.AspNetCore.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo.Abp.Identity.AspNetCore.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Identity.AspNetCore
Volo.Abp.Identity.AspNetCore
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.Server/Volo.Abp.Identity.Blazor.Server.csproj b/modules/identity/src/Volo.Abp.Identity.Blazor.Server/Volo.Abp.Identity.Blazor.Server.csproj
index b0842bab2b..48bf39d389 100644
--- a/modules/identity/src/Volo.Abp.Identity.Blazor.Server/Volo.Abp.Identity.Blazor.Server.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Blazor.Server/Volo.Abp.Identity.Blazor.Server.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/Volo.Abp.Identity.Blazor.WebAssembly.csproj b/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/Volo.Abp.Identity.Blazor.WebAssembly.csproj
index eb0c59491d..c50aa8226a 100644
--- a/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/Volo.Abp.Identity.Blazor.WebAssembly.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/Volo.Abp.Identity.Blazor.WebAssembly.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Volo.Abp.Identity.Blazor.csproj b/modules/identity/src/Volo.Abp.Identity.Blazor/Volo.Abp.Identity.Blazor.csproj
index cb14673ade..355cb4294a 100644
--- a/modules/identity/src/Volo.Abp.Identity.Blazor/Volo.Abp.Identity.Blazor.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Volo.Abp.Identity.Blazor.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo.Abp.Identity.Domain.Shared.csproj b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo.Abp.Identity.Domain.Shared.csproj
index 88810a15c8..eeff061007 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo.Abp.Identity.Domain.Shared.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo.Abp.Identity.Domain.Shared.csproj
@@ -4,7 +4,7 @@
- netstandard2.0;netstandard2.1;net8.0
+ netstandard2.0;netstandard2.1;net8.0;net9.0
Volo.Abp.Identity.Domain.Shared
Volo.Abp.Identity.Domain.Shared
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySessionConsts.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySessionConsts.cs
index 96cb8df5c9..ca047730ee 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySessionConsts.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySessionConsts.cs
@@ -10,5 +10,5 @@ public class IdentitySessionConsts
public static int MaxClientIdLength { get; set; } = 64;
- public static int MaxIpAddressesLength { get; set; } = 256;
+ public static int MaxIpAddressesLength { get; set; } = 2048;
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConfiguration.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConfiguration.cs
index 4bcf4f01e3..bb8386dda9 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConfiguration.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConfiguration.cs
@@ -40,4 +40,13 @@ public class IdentityModuleExtensionConfiguration : ModuleExtensionConfiguration
configureAction
);
}
+
+ public IdentityModuleExtensionConfiguration ConfigureIdentitySession(
+ Action configureAction)
+ {
+ return this.ConfigureEntity(
+ IdentityModuleExtensionConsts.EntityNames.IdentitySession,
+ configureAction
+ );
+ }
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConsts.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConsts.cs
index 5135cf22b8..4e3c5ab4a2 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConsts.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConsts.cs
@@ -13,6 +13,8 @@ public static class IdentityModuleExtensionConsts
public const string ClaimType = "ClaimType";
public const string OrganizationUnit = "OrganizationUnit";
+
+ public const string IdentitySession = "IdentitySession";
}
public static class ConfigurationNames
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
index ae1703110e..fadd6e4109 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
@@ -4,7 +4,7 @@
- net8.0
+ net9.0
Volo.Abp.Identity.Domain
Volo.Abp.Identity.Domain
$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs
index 49f353153b..baf0871c58 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs
@@ -99,6 +99,12 @@ public class AbpIdentityDomainModule : AbpModule
IdentityModuleExtensionConsts.EntityNames.OrganizationUnit,
typeof(OrganizationUnit)
);
+
+ ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
+ IdentityModuleExtensionConsts.ModuleName,
+ IdentityModuleExtensionConsts.EntityNames.IdentitySession,
+ typeof(IdentitySession)
+ );
});
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentitySession.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentitySession.cs
index c25a6b2e82..717bc7f989 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentitySession.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentitySession.cs
@@ -5,7 +5,7 @@ using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Identity;
-public class IdentitySession : BasicAggregateRoot, IMultiTenant
+public class IdentitySession : AggregateRoot, IMultiTenant
{
public virtual string SessionId { get; protected set; }
@@ -80,7 +80,22 @@ public class IdentitySession : BasicAggregateRoot