Skip to content

Commit 8f517ef

Browse files
Upgrade to .NET 10, update packages, and modernize code
1 parent 6b53e68 commit 8f517ef

20 files changed

Lines changed: 91 additions & 95 deletions

File tree

Directory.Packages.props

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,80 +3,80 @@
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
44
</PropertyGroup>
55
<ItemGroup>
6-
<PackageVersion Include="Azure.Monitor.OpenTelemetry.AspNetCore" Version="1.3.0" />
7-
<PackageVersion Include="ExcelMapper" Version="5.2.598" />
6+
<PackageVersion Include="Azure.Monitor.OpenTelemetry.AspNetCore" Version="1.4.0" />
7+
<PackageVersion Include="ExcelMapper" Version="6.0.615" />
88
<PackageVersion Include="Microsoft.AspNetCore.Http" Version="2.3.0" />
9-
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="9.0.9" />
10-
<PackageVersion Include="Microsoft.FeatureManagement.AspNetCore" Version="4.3.0" />
9+
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.1" />
10+
<PackageVersion Include="Microsoft.FeatureManagement.AspNetCore" Version="4.4.0" />
1111
<PackageVersion Include="NPOI" Version="2.7.5" />
12-
<PackageVersion Include="Scalar.AspNetCore" Version="2.8.10" />
13-
<PackageVersion Include="Scryber.Core" Version="6.0.4-beta" />
14-
<PackageVersion Include="Scryber.Core.OpenType" Version="6.1.0-beta" />
15-
<PackageVersion Include="MailKit" Version="4.14.0" />
16-
<PackageVersion Include="AWSSDK.Core" Version="4.0.0.32" />
17-
<PackageVersion Include="AWSSDK.S3" Version="4.0.7.7" />
18-
<PackageVersion Include="Azure.Storage.Blobs" Version="12.25.1" />
19-
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.11" />
12+
<PackageVersion Include="Scalar.AspNetCore" Version="2.11.10" />
13+
<PackageVersion Include="Scryber.Core" Version="9.2.0.2" />
14+
<PackageVersion Include="Scryber.Core.OpenType" Version="9.2.0" />
15+
<PackageVersion Include="MailKit" Version="4.14.1" />
16+
<PackageVersion Include="AWSSDK.Core" Version="4.0.3.6" />
17+
<PackageVersion Include="AWSSDK.S3" Version="4.0.16.1" />
18+
<PackageVersion Include="Azure.Storage.Blobs" Version="12.26.0" />
19+
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.12" />
2020
<PackageVersion Include="SkiaSharp" Version="3.119.1" />
2121
<PackageVersion Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="3.119.1" />
2222
<PackageVersion Include="LiteDB" Version="5.0.21" />
23-
<PackageVersion Include="MongoDB.Bson" Version="3.5.0" />
24-
<PackageVersion Include="MongoDB.Driver" Version="3.5.0" />
23+
<PackageVersion Include="MongoDB.Bson" Version="3.5.2" />
24+
<PackageVersion Include="MongoDB.Driver" Version="3.5.2" />
2525
<PackageVersion Include="DotLiquid" Version="2.3.197" />
26-
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="12.0.0" />
26+
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="12.1.1" />
2727
<PackageVersion Include="GoogleAuthenticator" Version="3.2.0" />
2828
<PackageVersion Include="Microsoft.Azure.AppConfiguration.AspNetCore" Version="8.4.0" />
29-
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.9" />
30-
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.9" />
31-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.9" />
32-
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="9.0.9" />
29+
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.1" />
30+
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.1" />
31+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.1" />
32+
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="10.0.1" />
3333
<PackageVersion Include="AutoMapper" Version="14.0.0" />
34-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
35-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.14.0" />
34+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.0.0" />
35+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="5.0.0" />
3636
<PackageVersion Include="MediatR" Version="12.5.0" />
37-
<PackageVersion Include="Scrutor" Version="6.1.0" />
38-
<PackageVersion Include="StackExchange.Redis" Version="2.9.25" />
39-
<PackageVersion Include="FluentValidation" Version="12.0.0" />
40-
<PackageVersion Include="Microsoft.AspNetCore.JsonPatch" Version="9.0.9" />
41-
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="9.0.9" />
42-
<PackageVersion Include="Microsoft.AspNetCore.Authentication.Facebook" Version="9.0.9" />
43-
<PackageVersion Include="Microsoft.AspNetCore.Authentication.Google" Version="9.0.9" />
44-
<PackageVersion Include="Braintree" Version="5.35.0" />
45-
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="9.0.9" />
46-
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.6.8" />
37+
<PackageVersion Include="Scrutor" Version="7.0.0" />
38+
<PackageVersion Include="StackExchange.Redis" Version="2.10.1" />
39+
<PackageVersion Include="FluentValidation" Version="12.1.1" />
40+
<PackageVersion Include="Microsoft.AspNetCore.JsonPatch" Version="10.0.1" />
41+
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="10.0.1" />
42+
<PackageVersion Include="Microsoft.AspNetCore.Authentication.Facebook" Version="10.0.1" />
43+
<PackageVersion Include="Microsoft.AspNetCore.Authentication.Google" Version="10.0.1" />
44+
<PackageVersion Include="Braintree" Version="5.38.0" />
45+
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="10.0.1" />
46+
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.7.1" />
4747
<PackageVersion Include="System.Xml.XPath.XmlDocument" Version="4.7.0" />
48-
<PackageVersion Include="Stripe.net" Version="49.0.0" />
48+
<PackageVersion Include="Stripe.net" Version="50.1.0" />
4949
<PackageVersion Include="elFinder.Net.AspNetCore" Version="1.5.0" />
5050
<PackageVersion Include="elFinder.Net.Core" Version="1.5.0" />
5151
<PackageVersion Include="elFinder.Net.Drivers.FileSystem" Version="1.5.0" />
5252
<PackageVersion Include="Azure.Extensions.AspNetCore.DataProtection.Blobs" Version="1.5.1" />
5353
<PackageVersion Include="Azure.Extensions.AspNetCore.DataProtection.Keys" Version="1.6.1" />
54-
<PackageVersion Include="Azure.Identity" Version="1.16.0" />
54+
<PackageVersion Include="Azure.Identity" Version="1.17.1" />
5555
<PackageVersion Include="Flurl.Http" Version="4.0.2" />
56-
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="9.0.9" />
57-
<PackageVersion Include="NetEscapades.AspNetCore.SecurityHeaders" Version="1.2.0" />
56+
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="10.0.1" />
57+
<PackageVersion Include="NetEscapades.AspNetCore.SecurityHeaders" Version="1.3.1" />
5858
<PackageVersion Include="Wangkanai.Detection" Version="8.20.0" />
59-
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="9.0.9" />
60-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
59+
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="10.0.1" />
60+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
6161
<PackageVersion Include="Moq" Version="4.20.72" />
62-
<PackageVersion Include="MSTest.TestAdapter" Version="3.11.0" />
63-
<PackageVersion Include="MSTest.TestFramework" Version="3.11.0" />
62+
<PackageVersion Include="MSTest.TestAdapter" Version="4.0.2" />
63+
<PackageVersion Include="MSTest.TestFramework" Version="4.0.2" />
6464
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
6565
<PackageVersion Include="NUnit" Version="4.4.0" />
66-
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.5.1" />
67-
<PackageVersion Include="Aspire.Hosting.MongoDB" Version="9.5.1" />
68-
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.9.0" />
69-
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="9.5.1" />
70-
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.13.0" />
71-
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.13.0" />
72-
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0" />
73-
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.12.0" />
74-
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.12.0" />
66+
<PackageVersion Include="Aspire.Hosting.AppHost" Version="13.1.0" />
67+
<PackageVersion Include="Aspire.Hosting.MongoDB" Version="13.1.0" />
68+
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.1.0" />
69+
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.1.0" />
70+
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.14.0" />
71+
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.14.0" />
72+
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.14.0" />
73+
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.14.0" />
74+
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.14.0" />
7575
<PackageVersion Include="Aspire.Dashboard.Sdk.$(NETCoreSdkRuntimeIdentifier)" Version="9.0.0" />
7676
<PackageVersion Include="Aspire.Hosting.Orchestration.$(NETCoreSdkRuntimeIdentifier)" Version="9.0.0" />
7777
</ItemGroup>
7878
<ItemGroup>
79-
<PackageVersion Update="Aspire.Dashboard.Sdk.win-x64" Version="9.5.1" />
80-
<PackageVersion Update="Aspire.Hosting.Orchestration.win-x64" Version="9.5.1" />
79+
<PackageVersion Update="Aspire.Dashboard.Sdk.win-x64" Version="13.1.0" />
80+
<PackageVersion Update="Aspire.Hosting.Orchestration.win-x64" Version="13.1.0" />
8181
</ItemGroup>
8282
</Project>

global.json

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
</ItemGroup>
2424
<ItemGroup>
2525
<ProjectReference Include="..\..\Web\Grand.Web.Admin\Grand.Web.Admin.csproj" />
26+
<ProjectReference Include="..\..\Web\Grand.Web.Store\Grand.Web.Store.csproj" />
2627
<ProjectReference Include="..\..\Web\Grand.Web.Vendor\Grand.Web.Vendor.csproj" />
2728
<ProjectReference Include="..\..\Web\Grand.Web\Grand.Web.csproj" />
2829
</ItemGroup>

src/Build/Grand.Common.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
22
<PropertyGroup>
3-
<TargetFramework>net9.0</TargetFramework>
3+
<TargetFramework>net10.0</TargetFramework>
44
<LangVersion>latest</LangVersion>
55
<ImplicitUsings>true</ImplicitUsings>
66
</PropertyGroup>

src/Business/Grand.Business.Common/Utilities/PowerExcelMapper.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,22 @@ private static async Task<Stream> ReadAsync(Stream stream)
2121
return ms;
2222
}
2323

24-
public new async Task<IEnumerable<T>> FetchAsync<T>(Stream stream, int sheetIndex = 0,
24+
public async Task<IEnumerable<T>> FetchAsync<T>(Stream stream, int sheetIndex = 0,
2525
Func<string, object, object> valueParser = null)
2626
{
2727
using var ms = await ReadAsync(stream);
28+
ms.Position = 0;
2829
return Fetch(ms, typeof(T), sheetIndex, valueParser).OfType<T>();
2930
}
3031

31-
public new IEnumerable Fetch(Stream stream, Type type, int sheetIndex,
32+
public IEnumerable Fetch(Stream stream, Type type, int sheetIndex,
3233
Func<string, object, object> valueParser = null)
3334
{
3435
Workbook = WorkbookFactory.Create(stream);
3536
return Fetch(type, sheetIndex, valueParser);
3637
}
3738

38-
public new IEnumerable Fetch(Type type, int sheetIndex = 0, Func<string, object, object> valueParser = null)
39+
public IEnumerable Fetch(Type type, int sheetIndex = 0, Func<string, object, object> valueParser = null)
3940
{
4041
var sheet = Workbook.GetSheetAt(sheetIndex);
4142
return Fetch(sheet, type, valueParser);

src/Business/Grand.Business.Marketing/Services/Newsletters/NewsLetterSubscriptionService.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Grand.SharedKernel;
99
using Grand.SharedKernel.Extensions;
1010
using MediatR;
11+
using System.IO;
1112

1213
namespace Grand.Business.Marketing.Services.Newsletters;
1314

@@ -278,9 +279,9 @@ public virtual async Task<int> ImportNewsletterSubscribersFromTxt(Stream stream,
278279
{
279280
var count = 0;
280281
using var reader = new StreamReader(stream);
281-
while (!reader.EndOfStream)
282+
string line;
283+
while ((line = await reader.ReadLineAsync()) is not null)
282284
{
283-
var line = await reader.ReadLineAsync();
284285
if (string.IsNullOrWhiteSpace(line))
285286
continue;
286287
var tmp = line.Split(',');

src/Core/Grand.Infrastructure/Caching/Redis/RedisMessageBus.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,16 @@ public async Task PublishAsync<TMessage>(TMessage msg) where TMessage : IMessage
4242

4343
public Task SubscribeAsync()
4444
{
45-
_subscriber.SubscribeAsync(RedisChannel.Literal(_redisConfig.RedisPubSubChannel), (_, redisValue) =>
45+
_ = _subscriber.SubscribeAsync(RedisChannel.Literal(_redisConfig.RedisPubSubChannel), (_, redisValue) =>
4646
{
4747
try
4848
{
49-
var message = JsonSerializer.Deserialize<MessageEventClient>(redisValue);
49+
MessageEventClient message = null;
50+
if (!redisValue.IsNull)
51+
{
52+
// Use the string overload explicitly to resolve ambiguity
53+
message = JsonSerializer.Deserialize<MessageEventClient>(redisValue.ToString());
54+
}
5055
if (message != null && message.ClientId != ClientId)
5156
OnSubscriptionChanged(message);
5257
}

src/Core/Grand.Infrastructure/StartupBase.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,7 @@ private static T StartupConfig<T>(this IServiceCollection services, IConfigurati
123123
/// <param name="services">Collection of service descriptors</param>
124124
private static void AddHttpContextAccessor(this IServiceCollection services)
125125
{
126-
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
127-
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
126+
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
128127
}
129128

130129
/// <summary>

src/Modules/Grand.Module.Api/Extensions/OpenApiOptionsExtensions.cs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
using Grand.Module.Api.Attributes;
22
using Microsoft.AspNetCore.Mvc;
33
using Microsoft.AspNetCore.OpenApi;
4-
using Microsoft.OpenApi.Any;
5-
using Microsoft.OpenApi.Models;
4+
using Microsoft.OpenApi;
65

76
namespace Grand.Module.Api.Infrastructure.Extensions
87
{
@@ -17,7 +16,7 @@ public static void AddOperationTransformer(this OpenApiOptions options)
1716
{
1817
if (operation.Parameters == null)
1918
{
20-
operation.Parameters = new List<OpenApiParameter>();
19+
operation.Parameters = new List<IOpenApiParameter>();
2120
}
2221

2322
operation.Parameters.Add(new OpenApiParameter {
@@ -27,8 +26,8 @@ public static void AddOperationTransformer(this OpenApiOptions options)
2726
Description = "Show only the first n items.",
2827
Required = false,
2928
Schema = new OpenApiSchema {
30-
Minimum = 0,
31-
Type = "integer"
29+
Minimum = "0",
30+
Type = JsonSchemaType.Integer
3231
}
3332
});
3433
operation.Parameters.Add(new OpenApiParameter {
@@ -38,41 +37,38 @@ public static void AddOperationTransformer(this OpenApiOptions options)
3837
Description = "Skip the first n items",
3938
Required = false,
4039
Schema = new OpenApiSchema {
41-
Minimum = 0,
42-
Type = "integer"
40+
Minimum = "0",
41+
Type = JsonSchemaType.Integer
4342
}
4443
});
4544
operation.Parameters.Add(new OpenApiParameter {
4645
Name = "$orderby",
4746
AllowReserved = true,
4847
In = ParameterLocation.Query,
4948
Description = "Order items by property values (LINQ notation)",
50-
Example = new OpenApiString("Name, DisplayOrder"),
5149
Required = false,
5250
Schema = new OpenApiSchema {
53-
Type = "string"
51+
Type = JsonSchemaType.String
5452
}
5553
});
5654
operation.Parameters.Add(new OpenApiParameter {
5755
Name = "$filter",
5856
AllowReserved = true,
5957
In = ParameterLocation.Query,
6058
Description = "Filter items by property values (LINQ notation) ",
61-
Example = new OpenApiString("Name == \"John\""),
6259
Required = false,
6360
Schema = new OpenApiSchema {
64-
Type = "string"
61+
Type = JsonSchemaType.String
6562
}
6663
});
6764
operation.Parameters.Add(new OpenApiParameter {
6865
Name = "$select",
6966
AllowReserved = true,
7067
In = ParameterLocation.Query,
7168
Description = "Select specific properties from the model (LINQ notation)",
72-
Example = new OpenApiString("Id, Name"),
7369
Required = false,
7470
Schema = new OpenApiSchema {
75-
Type = "string"
71+
Type = JsonSchemaType.String
7672
}
7773
});
7874
}
@@ -92,7 +88,7 @@ public static void AddCsrfTokenTransformer(this OpenApiOptions options)
9288
In = ParameterLocation.Header,
9389
Required = true,
9490
Schema = new OpenApiSchema {
95-
Type = "string",
91+
Type = JsonSchemaType.String,
9692
Description = "Antiforgery token"
9793
}
9894
});

src/Modules/Grand.Module.Api/Infrastructure/Transformers/BearerSecuritySchemeTransformer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using Microsoft.AspNetCore.Authentication;
22
using Microsoft.AspNetCore.OpenApi;
3-
using Microsoft.OpenApi.Models;
3+
using Microsoft.OpenApi;
44

55
namespace Grand.Module.Api.Infrastructure.Transformers;
66
internal sealed class BearerSecuritySchemeTransformer(IAuthenticationSchemeProvider authenticationSchemeProvider) : IOpenApiDocumentTransformer
@@ -10,7 +10,7 @@ public async Task TransformAsync(OpenApiDocument document, OpenApiDocumentTransf
1010
var authenticationSchemes = await authenticationSchemeProvider.GetAllSchemesAsync();
1111
if (authenticationSchemes.Any(authScheme => authScheme.Name == "Bearer"))
1212
{
13-
var requirements = new Dictionary<string, OpenApiSecurityScheme> {
13+
var requirements = new Dictionary<string, IOpenApiSecurityScheme> {
1414
["Bearer"] = new OpenApiSecurityScheme {
1515
Type = SecuritySchemeType.Http,
1616
Scheme = "bearer",

0 commit comments

Comments
 (0)