Skip to content

Commit cda3c5d

Browse files
committed
feat: upgrade to .net8 + all its related packages
BREAKING CHANGE: the .net version has been change from 6 to .net8
1 parent eee79c3 commit cda3c5d

14 files changed

+103
-113
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ nupkg/
1010

1111
# Rider
1212
.idea
13+
.idea/
14+
.idea/*
1315

1416
# User-specific files
1517
*.suo

src/QuickstartTemplate.ApplicationCore/QuickstartTemplate.ApplicationCore.csproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77
</PropertyGroup>
@@ -12,8 +12,8 @@
1212
</ItemGroup>
1313

1414
<ItemGroup>
15-
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
16-
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="7.0.13" />
15+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
16+
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="8.0.0" />
1717
</ItemGroup>
1818

1919
<ItemGroup>

src/QuickstartTemplate.Infrastructure/QuickstartTemplate.Infrastructure.csproj

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77
</PropertyGroup>
88
<ItemGroup>
99
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
10-
<PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
11-
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
12-
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.11" />
10+
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
11+
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
12+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
1313
</ItemGroup>
1414
<ItemGroup>
1515
<ProjectReference Include="..\QuickstartTemplate.ApplicationCore\QuickstartTemplate.ApplicationCore.csproj" />

src/QuickstartTemplate.WebApi/Controllers/WeatherForecastController.cs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Net;
2+
using Asp.Versioning;
23
using Microsoft.AspNetCore.Mvc;
34

45
namespace QuickstartTemplate.WebApi.Controllers;
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,45 @@
11
<Project Sdk="Microsoft.NET.Sdk.Web">
22

3-
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
5-
<Nullable>enable</Nullable>
6-
<ImplicitUsings>enable</ImplicitUsings>
7-
<GenerateDocumentationFile>true</GenerateDocumentationFile>
8-
<NoWarn>$(NoWarn);1591</NoWarn>
9-
</PropertyGroup>
10-
<ItemGroup>
11-
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="5.1.0" />
12-
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.13">
13-
<PrivateAssets>all</PrivateAssets>
14-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
15-
</PackageReference>
16-
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="6.0.24" />
17-
<PackageReference Include="Microsoft.Extensions.Localization" Version="7.0.13" />
18-
<PackageReference Include="Sentry.AspNetCore" Version="3.41.0" />
19-
<PackageReference Include="Sentry.Serilog" Version="3.40.1" />
20-
<PackageReference Include="Serilog.AspNetCore" Version="7.0.0" />
21-
<PackageReference Include="Serilog.Enrichers.Span" Version="3.1.0" />
22-
<PackageReference Include="Serilog.Expressions" Version="4.0.0" />
23-
<PackageReference Include="Serilog.HttpClient" Version="2.0.0" />
24-
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
25-
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.24" />
26-
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="7.0.13" />
27-
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="7.0.13" />
28-
<PackageReference Include="prometheus-net.AspNetCore" Version="8.1.0" />
29-
<PackageReference Include="prometheus-net.AspNetCore.Grpc" Version="8.1.0" />
30-
<PackageReference Include="prometheus-net.AspNetCore.HealthChecks" Version="8.1.0" />
31-
<PackageReference Include="prometheus-net.DotNetRuntime" Version="4.4.0" />
32-
<PackageReference Include="Npgsql.OpenTelemetry" Version="7.0.6" />
33-
<PackageReference Include="OpenTelemetry.Contrib.Instrumentation.ElasticsearchClient" Version="1.0.0-beta2" />
34-
<PackageReference Include="OpenTelemetry.Contrib.Instrumentation.EntityFrameworkCore" Version="1.0.0-beta2" />
35-
<PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="1.5.1" />
36-
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.6.0" />
37-
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.0.0-rc9.14" />
38-
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.0.0-rc9.14" />
39-
<PackageReference Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.0.0-rc9.12" />
40-
</ItemGroup>
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<Nullable>enable</Nullable>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
8+
<NoWarn>$(NoWarn);1591</NoWarn>
9+
</PropertyGroup>
10+
<ItemGroup>
11+
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="7.1.0" />
12+
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.13">
13+
<PrivateAssets>all</PrivateAssets>
14+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
15+
</PackageReference>
16+
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="8.0.0" />
17+
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.0" />
18+
<PackageReference Include="Sentry.AspNetCore" Version="3.41.3" />
19+
<PackageReference Include="Sentry.Serilog" Version="3.41.3" />
20+
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
21+
<PackageReference Include="Serilog.Enrichers.Span" Version="3.1.0" />
22+
<PackageReference Include="Serilog.Expressions" Version="4.0.0" />
23+
<PackageReference Include="Serilog.HttpClient" Version="2.0.0" />
24+
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
25+
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0" />
26+
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="8.0.0" />
27+
<PackageReference Include="prometheus-net.AspNetCore" Version="8.1.1" />
28+
<PackageReference Include="prometheus-net.AspNetCore.Grpc" Version="8.1.0" />
29+
<PackageReference Include="prometheus-net.AspNetCore.HealthChecks" Version="8.1.0" />
30+
<PackageReference Include="prometheus-net.DotNetRuntime" Version="4.4.0" />
31+
<PackageReference Include="Npgsql.OpenTelemetry" Version="8.0.0" />
32+
<PackageReference Include="OpenTelemetry.Contrib.Instrumentation.ElasticsearchClient" Version="1.0.0-beta2" />
33+
<PackageReference Include="OpenTelemetry.Contrib.Instrumentation.EntityFrameworkCore" Version="1.0.0-beta2" />
34+
<PackageReference Include="OpenTelemetry.Exporter.Jaeger" Version="1.5.1" />
35+
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.6.0" />
36+
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.6.0-rc.1" />
37+
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.6.0-rc.1" />
38+
</ItemGroup>
4139

42-
<ItemGroup>
43-
<ProjectReference Include="..\QuickstartTemplate.ApplicationCore\QuickstartTemplate.ApplicationCore.csproj" />
44-
<ProjectReference Include="..\QuickstartTemplate.Infrastructure\QuickstartTemplate.Infrastructure.csproj" />
45-
</ItemGroup>
40+
<ItemGroup>
41+
<ProjectReference Include="..\QuickstartTemplate.ApplicationCore\QuickstartTemplate.ApplicationCore.csproj" />
42+
<ProjectReference Include="..\QuickstartTemplate.Infrastructure\QuickstartTemplate.Infrastructure.csproj" />
43+
</ItemGroup>
4644

4745
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
@QuickstartTemplate_WebApi_HostAddress = http://localhost:5011
2+
3+
GET {{QuickstartTemplate_WebApi_HostAddress}}/v1/weatherforecast/
4+
Accept: application/json
5+
6+
###

src/QuickstartTemplate.WebApi/Startup.cs

+22-40
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
using System.Reflection;
2-
using Microsoft.AspNetCore.Mvc;
3-
using Microsoft.AspNetCore.Mvc.Versioning;
2+
using Asp.Versioning;
43
using Microsoft.Extensions.Http;
54
using Microsoft.Extensions.Internal;
65
using Microsoft.OpenApi.Models;
76
using Npgsql;
8-
using OpenTelemetry;
97
using OpenTelemetry.Resources;
108
using OpenTelemetry.Trace;
119
using Prometheus;
12-
using Prometheus.DotNetRuntime;
1310
using QuickstartTemplate.ApplicationCore;
1411
using QuickstartTemplate.ApplicationCore.Resources;
1512
using QuickstartTemplate.Infrastructure;
1613
using QuickstartTemplate.Infrastructure.Common;
1714
using QuickstartTemplate.Infrastructure.DbContexts;
1815
using Serilog;
1916
using Serilog.HttpClient.Extensions;
20-
using StackExchange.Redis;
2117

2218
namespace QuickstartTemplate.WebApi;
2319

@@ -26,49 +22,44 @@ public class Startup
2622
public Startup(IConfiguration configuration)
2723
{
2824
_configuration = configuration;
29-
30-
_connectionMultiplexer = !string.IsNullOrEmpty(_configuration.GetConnectionString("Redis"))
31-
? ConnectionMultiplexer.Connect(_configuration.GetConnectionString("Redis"))
32-
: null;
3325
}
3426

3527
private readonly IConfiguration _configuration;
3628

37-
private readonly IConnectionMultiplexer? _connectionMultiplexer;
38-
3929
public void ConfigureServices(IServiceCollection services)
4030
{
4131
services.AddLocalization();
4232

4333
services.AddControllers()
4434
.AddDataAnnotationsLocalization(options =>
4535
{
46-
options.DataAnnotationLocalizerProvider = (type, factory) =>
36+
options.DataAnnotationLocalizerProvider = (_, factory) =>
4737
factory.Create(typeof(SharedResource));
4838
});
4939

50-
services.AddCors(crosOption =>
40+
services.AddCors(corsOption =>
5141
{
52-
crosOption.AddDefaultPolicy(
42+
corsOption.AddDefaultPolicy(
5343
builder => builder.AllowAnyOrigin()
5444
.AllowAnyMethod()
5545
.AllowAnyHeader()
5646
.SetPreflightMaxAge(TimeSpan.FromMinutes(10)));
5747
});
5848

5949
services.AddApiVersioning(o =>
60-
{
61-
o.AssumeDefaultVersionWhenUnspecified = false;
62-
o.DefaultApiVersion = new ApiVersion(1, 0);
63-
o.ReportApiVersions = true;
64-
o.ApiVersionReader = new UrlSegmentApiVersionReader();
65-
});
66-
67-
if (_connectionMultiplexer is null)
68-
services.AddDistributedMemoryCache();
69-
else
70-
services.AddStackExchangeRedisCache(options =>
71-
options.ConnectionMultiplexerFactory = async () => _connectionMultiplexer);
50+
{
51+
o.AssumeDefaultVersionWhenUnspecified = false;
52+
o.DefaultApiVersion = new ApiVersion(1, 0);
53+
o.ReportApiVersions = true;
54+
o.ApiVersionReader = new UrlSegmentApiVersionReader();
55+
})
56+
.AddMvc()
57+
.AddApiExplorer(
58+
options =>
59+
{
60+
options.GroupNameFormat = "'v'VVV";
61+
options.SubstituteApiVersionInUrl = true;
62+
});
7263

7364
services.AddAuthentication("Bearer")
7465
// JWT tokens (default scheme)
@@ -109,29 +100,23 @@ public void ConfigureServices(IServiceCollection services)
109100
services.AddInfrastructure(_configuration);
110101
services.AddApplication();
111102

112-
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
113-
services.AddVersionedApiExplorer(options =>
114-
{
115-
options.GroupNameFormat = "'v'VVV";
116-
options.SubstituteApiVersionInUrl = true;
117-
});
118-
103+
services.AddEndpointsApiExplorer();
119104
services.AddSwaggerGen(options =>
120105
{
121-
options.SwaggerDoc("v1", new OpenApiInfo()
106+
options.SwaggerDoc("v1", new ()
122107
{
123108
Title = "v1",
124109
Version = "v1"
125110
});
126-
options.SwaggerDoc("v2", new OpenApiInfo()
111+
options.SwaggerDoc("v2", new()
127112
{
128113
Title = "v2",
129114
Version = "v2"
130115
});
131116

132117
//Locate the XML file being generated by ASP.NET...
133-
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
134-
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
118+
string xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
119+
string xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
135120
//... and tell Swagger to use those XML comments.
136121
options.IncludeXmlComments(xmlPath);
137122

@@ -186,9 +171,6 @@ public void ConfigureServices(IServiceCollection services)
186171
builder.AddHttpClientInstrumentation();
187172
builder.AddEntityFrameworkCoreInstrumentation(options => options.SetDbStatementForText = true);
188173
builder.AddNpgsql();
189-
190-
if (_connectionMultiplexer is not null)
191-
builder.AddRedisInstrumentation(_connectionMultiplexer, options => options.SetVerboseDatabaseStatements = true);
192174
});
193175

194176
#if !DEBUG //https://github.com/djluck/prometheus-net.DotNetRuntime/issues/34

src/QuickstartTemplate.WebApi/appsettings.Development.json

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"ConnectionStrings": {
3-
"Redis": "",
43
"DefaultConnection": "Server=localhost;Port=5432;Database=testdb;"
54
},
65
"Sentry": {

src/QuickstartTemplate.WebApi/appsettings.json

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"ConnectionStrings": {
3-
"Redis": "",
43
"DefaultConnection": ""
54
},
65
"Sentry": {

test/QuickstartTemplate.UnitTests/QuickstartTemplate.UnitTests.csproj

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
5-
<Nullable>enable</Nullable>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
67

7-
<IsPackable>false</IsPackable>
8+
<IsPackable>false</IsPackable>
9+
<IsTestProject>true</IsTestProject>
810
</PropertyGroup>
911

1012
<ItemGroup>
1113
<PackageReference Include="FluentAssertions" Version="6.12.0" />
1214
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
13-
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.13" />
14-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
15+
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.0" />
16+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
1517
<PackageReference Include="NSubstitute" Version="5.1.0" />
16-
<PackageReference Include="xunit" Version="2.6.1" />
17-
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3">
18+
<PackageReference Include="xunit" Version="2.6.2" />
19+
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.4">
1820
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1921
<PrivateAssets>all</PrivateAssets>
2022
</PackageReference>

test/QuickstartTemplate.WebApi.IntegrationTests/Helpers/TestController.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.AspNetCore.Authorization;
1+
using Asp.Versioning;
2+
using Microsoft.AspNetCore.Authorization;
23
using Microsoft.AspNetCore.Mvc;
34
using Microsoft.Extensions.Localization;
45
using QuickstartTemplate.ApplicationCore.Resources;

test/QuickstartTemplate.WebApi.IntegrationTests/QuickstartTemplate.WebApi.IntegrationTests.csproj

+12-10
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
5-
<Nullable>enable</Nullable>
6-
<ImplicitUsings>enable</ImplicitUsings>
7-
<IsPackable>false</IsPackable>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
8+
<IsPackable>false</IsPackable>
9+
<IsTestProject>true</IsTestProject>
810
</PropertyGroup>
911

1012
<ItemGroup>
1113
<PackageReference Include="FluentAssertions" Version="6.12.0" />
12-
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.24" />
13-
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.13" />
14-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
14+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.0" />
15+
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.0" />
16+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
1517
<PackageReference Include="RichardSzalay.MockHttp" Version="7.0.0" />
16-
<PackageReference Include="Verify.Xunit" Version="22.5.0" />
17-
<PackageReference Include="xunit" Version="2.6.1" />
18-
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3">
18+
<PackageReference Include="Verify.Xunit" Version="22.7.1" />
19+
<PackageReference Include="xunit" Version="2.6.2" />
20+
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.4">
1921
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2022
<PrivateAssets>all</PrivateAssets>
2123
</PackageReference>

test/QuickstartTemplate.WebApi.IntegrationTests/SwaggerSnapshotTests.Verify_v1_swagger_json_snapshot.verified.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,7 @@
7474
"type": "string"
7575
}
7676
},
77-
"nullable": true,
78-
"readOnly": true
77+
"nullable": true
7978
}
8079
},
8180
"additionalProperties": { }

test/QuickstartTemplate.WebApi.IntegrationTests/SwaggerSnapshotTests.Verify_v2_swagger_json_snapshot.verified.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,7 @@
7474
"type": "string"
7575
}
7676
},
77-
"nullable": true,
78-
"readOnly": true
77+
"nullable": true
7978
}
8079
},
8180
"additionalProperties": { }

0 commit comments

Comments
 (0)