Compare commits
9 Commits
c550967ecc
...
master
Author | SHA1 | Date | |
---|---|---|---|
3f9a11b17d | |||
f95d8d3420 | |||
e439183645 | |||
785ab935c6 | |||
f45f846b37 | |||
46046d589e | |||
802acad570 | |||
dd4d3397eb | |||
3d92d1b72d |
31
.github/workflows/code-analyze.yaml
vendored
31
.github/workflows/code-analyze.yaml
vendored
@@ -1,31 +0,0 @@
|
||||
name: .NET Test Pipeline
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checking out
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: SonarScanner for .NET 8 with pull request decoration support
|
||||
uses: highbyte/sonarscan-dotnet@v2.3.3
|
||||
with:
|
||||
sonarProjectKey: $(echo "${{ github.repository }}" | cut -d'/' -f2)
|
||||
sonarProjectName: $(echo "${{ github.repository }}" | cut -d'/' -f2)
|
||||
sonarHostname: ${{ secrets.SONAR_HOST_URL }}
|
||||
dotnetPreBuildCmd: dotnet nuget add source --name="Winsomnia" --username ${{ secrets.NUGET_USERNAME }} --password ${{ secrets.NUGET_PASSWORD }} --store-password-in-clear-text ${{ secrets.NUGET_ADDRESS }} && dotnet format --verify-no-changes --diagnostics -v diag --severity warn
|
||||
dotnetTestArguments: --logger trx --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
|
||||
dotnetBuildArguments: -c Release
|
||||
sonarBeginArguments: /d:sonar.cs.opencover.reportsPaths="**/TestResults/**/coverage.opencover.xml" -d:sonar.cs.vstest.reportsPaths="**/TestResults/*.trx"
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
2
.github/workflows/release-version.yml
vendored
2
.github/workflows/release-version.yml
vendored
@@ -64,7 +64,7 @@ jobs:
|
||||
docker pull $DOCKER_IMAGE &&
|
||||
docker stop mirea-backend || true &&
|
||||
docker rm mirea-backend || true &&
|
||||
docker run -d --name mirea-backend -p 8085:8080 \
|
||||
docker run -d --name mirea-backend -p 127.0.0.1:8085:8080 \
|
||||
--restart=on-failure:10 \
|
||||
-v mirea-data:/data \
|
||||
-e PATH_TO_SAVE=$PATH_TO_SAVE \
|
||||
|
@@ -24,15 +24,16 @@ public class LoggingRequest
|
||||
public string? LogFilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the API key for integrating with Seq, a log aggregation service.
|
||||
/// If provided, logs will be sent to a Seq server using this API key.
|
||||
/// Gets or sets the endpoint URL for the OpenTelemetry Collector.
|
||||
/// This property specifies the OTLP endpoint to which logs will be sent.
|
||||
/// </summary>
|
||||
public string? ApiKeySeq { get; set; }
|
||||
public string? OpenTelemetryEndpoint { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the server URL for the Seq logging service.
|
||||
/// This property specifies the Seq server endpoint to which logs will be sent.
|
||||
/// If <see cref="ApiKeySeq"/> is provided, logs will be sent to this server.
|
||||
/// Gets or sets the logical service name used for OpenTelemetry logging.
|
||||
/// This name will be attached to log entries as the "service.name" resource attribute,
|
||||
/// allowing logs to be grouped and filtered by service in backends like Loki or Grafana.
|
||||
/// </summary>
|
||||
public string? ApiServerSeq { get; set; }
|
||||
public string? OpenTelemetryServiceName { get; set; }
|
||||
|
||||
}
|
@@ -12,7 +12,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Elements of the solution",
|
||||
.env = .env
|
||||
.gitattributes = .gitattributes
|
||||
.gitignore = .gitignore
|
||||
.github\workflows\code-analyze.yaml = .github\workflows\code-analyze.yaml
|
||||
Directory.Build.props = Directory.Build.props
|
||||
Dockerfile = Dockerfile
|
||||
LICENSE.txt = LICENSE.txt
|
||||
|
@@ -8,7 +8,7 @@ using Serilog.Context;
|
||||
using Serilog.Events;
|
||||
using Serilog.Filters;
|
||||
using Serilog.Formatting.Compact;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
@@ -46,9 +46,18 @@ public static class LoggerConfiguration
|
||||
rollingInterval: RollingInterval.Day);
|
||||
}
|
||||
|
||||
if (generalConfig != null && !string.IsNullOrEmpty(generalConfig.ApiServerSeq) &&
|
||||
Uri.TryCreate(generalConfig.ApiServerSeq, UriKind.Absolute, out var _))
|
||||
configuration.WriteTo.Seq(generalConfig.ApiServerSeq, apiKey: generalConfig.ApiKeySeq);
|
||||
if (!string.IsNullOrEmpty(generalConfig?.OpenTelemetryEndpoint)
|
||||
&& !string.IsNullOrEmpty(generalConfig.OpenTelemetryServiceName))
|
||||
configuration.WriteTo.OpenTelemetry(options =>
|
||||
{
|
||||
options.Endpoint = generalConfig.OpenTelemetryEndpoint;
|
||||
options.Protocol = Serilog.Sinks.OpenTelemetry.OtlpProtocol.Grpc;
|
||||
options.ResourceAttributes = new Dictionary<string, object>
|
||||
{
|
||||
["service.name"] = generalConfig.OpenTelemetryServiceName,
|
||||
["deployment.environment"] = context.HostingEnvironment.EnvironmentName
|
||||
};
|
||||
});
|
||||
|
||||
configuration
|
||||
.MinimumLevel.Override("Microsoft.AspNetCore.Hosting", LogEventLevel.Warning)
|
||||
|
@@ -9,13 +9,13 @@ public class LogSettings : IIsConfigured
|
||||
public bool EnableLogToFile { get; set; }
|
||||
public string? LogFilePath { get; set; }
|
||||
public string? LogFileName { get; set; }
|
||||
public string? ApiKeySeq { get; set; }
|
||||
public string? ApiServerSeq { get; set; }
|
||||
public string? OpenTelemetryEndpoint { get; set; }
|
||||
public string? OpenTelemetryServiceName { get; set; }
|
||||
|
||||
public bool IsConfigured()
|
||||
{
|
||||
return !EnableLogToFile ||
|
||||
!string.IsNullOrEmpty(LogFilePath) &&
|
||||
!string.IsNullOrEmpty(LogFileName);
|
||||
return !EnableLogToFile
|
||||
|| !string.IsNullOrEmpty(LogFilePath)
|
||||
&& !string.IsNullOrEmpty(LogFileName);
|
||||
}
|
||||
}
|
@@ -23,6 +23,7 @@ using Mirea.Api.Security.Services;
|
||||
using MySqlConnector;
|
||||
using Npgsql;
|
||||
using Serilog;
|
||||
using Serilog.Sinks.OpenTelemetry;
|
||||
using StackExchange.Redis;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -434,26 +435,32 @@ public class SetupController(
|
||||
}
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(request?.ApiServerSeq))
|
||||
if (!string.IsNullOrEmpty(request?.OpenTelemetryEndpoint)
|
||||
&& !string.IsNullOrEmpty(request.OpenTelemetryServiceName))
|
||||
{
|
||||
settings.ApiServerSeq = request.ApiServerSeq;
|
||||
settings.ApiKeySeq = request.ApiKeySeq;
|
||||
settings.OpenTelemetryEndpoint = request.OpenTelemetryEndpoint;
|
||||
settings.OpenTelemetryServiceName = request.OpenTelemetryServiceName;
|
||||
|
||||
try
|
||||
{
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
.WriteTo.Seq(settings.ApiServerSeq, apiKey: settings.ApiKeySeq)
|
||||
using var innerLogger = new LoggerConfiguration()
|
||||
.WriteTo.OpenTelemetry(options =>
|
||||
{
|
||||
options.Endpoint = settings.OpenTelemetryEndpoint;
|
||||
options.Protocol = OtlpProtocol.Grpc;
|
||||
options.ResourceAttributes = new Dictionary<string, object>
|
||||
{
|
||||
["service.name"] = settings.OpenTelemetryServiceName,
|
||||
["deployment.environment"] = "test"
|
||||
};
|
||||
})
|
||||
.CreateLogger();
|
||||
|
||||
Log.Warning("Testing configuration Seq.");
|
||||
innerLogger.Warning("🚀 Testing OpenTelemetry log delivery.");
|
||||
}
|
||||
catch
|
||||
catch (Exception ex)
|
||||
{
|
||||
// ignoring
|
||||
}
|
||||
finally
|
||||
{
|
||||
Log.CloseAndFlush();
|
||||
Console.WriteLine("Error sending log to OTEL Collector: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -477,8 +484,8 @@ public class SetupController(
|
||||
EnableLogToFile = settings.EnableLogToFile,
|
||||
LogFileName = settings.LogFileName,
|
||||
LogFilePath = settings.LogFilePath,
|
||||
ApiKeySeq = settings.ApiKeySeq,
|
||||
ApiServerSeq = settings.ApiServerSeq
|
||||
OpenTelemetryEndpoint = settings.OpenTelemetryEndpoint,
|
||||
OpenTelemetryServiceName = settings.OpenTelemetryServiceName
|
||||
});
|
||||
|
||||
return true;
|
||||
|
@@ -16,62 +16,67 @@
|
||||
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
|
||||
<PackageReference Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" />
|
||||
<PackageReference Include="AspNetCore.HealthChecks.System" Version="9.0.0" />
|
||||
<PackageReference Include="Cronos" Version="0.10.0" />
|
||||
<PackageReference Include="EPPlus" Version="8.0.5" />
|
||||
<PackageReference Include="EPPlus.System.Drawing" Version="8.0.0" />
|
||||
<PackageReference Include="HtmlAgilityPack" Version="1.12.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.16" />
|
||||
<PackageReference Include="Microsoft.Bcl.Cryptography" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.5">
|
||||
<PackageReference Include="Cronos" Version="0.11.1" />
|
||||
<PackageReference Include="EPPlus" Version="8.1.0" />
|
||||
<PackageReference Include="EPPlus.System.Drawing" Version="8.1.0" />
|
||||
<PackageReference Include="HtmlAgilityPack" Version="1.12.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.19" />
|
||||
<PackageReference Include="Microsoft.Bcl.Cryptography" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.8">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.5">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server" Version="9.0.5">
|
||||
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server" Version="9.0.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.FileProviders.Abstractions" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.10.0" />
|
||||
<PackageReference Include="Microsoft.Win32.SystemEvents" Version="9.0.5" />
|
||||
<PackageReference Include="Mirea.Tools.Schedule.Parser" Version="1.2.7" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.FileProviders.Abstractions" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.14.0" />
|
||||
<PackageReference Include="Microsoft.Win32.SystemEvents" Version="9.0.8" />
|
||||
<PackageReference Include="Mirea.Tools.Schedule.Parser" Version="1.2.8" />
|
||||
<PackageReference Include="Mirea.Tools.Schedule.WebParser" Version="1.0.7" />
|
||||
<PackageReference Include="OpenTelemetry" Version="1.12.0" />
|
||||
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.12.0" />
|
||||
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.12.0" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.12.0" />
|
||||
<PackageReference Include="QRCoder" Version="1.6.0" />
|
||||
<PackageReference Include="Serilog" Version="4.2.0" />
|
||||
<PackageReference Include="Serilog" Version="4.3.0" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
|
||||
<PackageReference Include="Serilog.Formatting.Compact" Version="3.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Debug" Version="3.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.5" />
|
||||
<PackageReference Include="Serilog.Sinks.Seq" Version="9.0.0" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.37" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="8.1.1" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="8.1.1" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="8.1.1" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="8.1.1" />
|
||||
<PackageReference Include="System.Composition" Version="9.0.5" />
|
||||
<PackageReference Include="System.Composition.AttributedModel" Version="9.0.5" />
|
||||
<PackageReference Include="System.Composition.Convention" Version="9.0.5" />
|
||||
<PackageReference Include="System.Composition.Hosting" Version="9.0.5" />
|
||||
<PackageReference Include="System.Composition.Runtime" Version="9.0.5" />
|
||||
<PackageReference Include="System.Composition.TypedParts" Version="9.0.5" />
|
||||
<PackageReference Include="System.Diagnostics.EventLog" Version="9.0.5" />
|
||||
<PackageReference Include="System.Formats.Asn1" Version="9.0.5" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.10.0" />
|
||||
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.5" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="9.0.5" />
|
||||
<PackageReference Include="System.Text.Json" Version="9.0.5" />
|
||||
<PackageReference Include="Z.EntityFramework.Extensions.EFCore" Version="9.103.8.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.8" />
|
||||
<PackageReference Include="Serilog.Sinks.OpenTelemetry" Version="4.2.0" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.9.11" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="9.0.4" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="9.0.4" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="9.0.4" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="9.0.4" />
|
||||
<PackageReference Include="System.Composition" Version="9.0.8" />
|
||||
<PackageReference Include="System.Composition.AttributedModel" Version="9.0.8" />
|
||||
<PackageReference Include="System.Composition.Convention" Version="9.0.8" />
|
||||
<PackageReference Include="System.Composition.Hosting" Version="9.0.8" />
|
||||
<PackageReference Include="System.Composition.Runtime" Version="9.0.8" />
|
||||
<PackageReference Include="System.Composition.TypedParts" Version="9.0.8" />
|
||||
<PackageReference Include="System.Diagnostics.EventLog" Version="9.0.8" />
|
||||
<PackageReference Include="System.Formats.Asn1" Version="9.0.8" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
|
||||
<PackageReference Include="System.Security.Cryptography.Pkcs" Version="9.0.8" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="9.0.8" />
|
||||
<PackageReference Include="System.Text.Json" Version="9.0.8" />
|
||||
<PackageReference Include="Z.EntityFramework.Extensions.EFCore" Version="9.103.9.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@@ -20,7 +20,11 @@ using Mirea.Api.Endpoint.Configuration.Validation;
|
||||
using Mirea.Api.Endpoint.Configuration.Validation.Validators;
|
||||
using Mirea.Api.Security.Services;
|
||||
using OfficeOpenXml;
|
||||
using OpenTelemetry.Exporter;
|
||||
using OpenTelemetry.Metrics;
|
||||
using OpenTelemetry.Resources;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace Mirea.Api.Endpoint;
|
||||
@@ -118,6 +122,34 @@ public class Program
|
||||
builder.Services.AddDataProtection()
|
||||
.PersistKeysToFileSystem(new DirectoryInfo(PathBuilder.Combine("DataProtection")));
|
||||
|
||||
builder.Host.ConfigureServices((context, services) =>
|
||||
{
|
||||
var config = context.Configuration.Get<GeneralConfig>()?.LogSettings;
|
||||
|
||||
if (string.IsNullOrEmpty(config?.OpenTelemetryEndpoint)
|
||||
|| string.IsNullOrEmpty(config.OpenTelemetryServiceName))
|
||||
return;
|
||||
|
||||
services.AddOpenTelemetry()
|
||||
.WithMetrics(metrics =>
|
||||
{
|
||||
metrics
|
||||
.AddAspNetCoreInstrumentation()
|
||||
.AddRuntimeInstrumentation()
|
||||
.SetResourceBuilder(ResourceBuilder.CreateDefault()
|
||||
.AddService(serviceName: config.OpenTelemetryServiceName)
|
||||
.AddAttributes([
|
||||
new KeyValuePair<string, object>("deployment.environment", context.HostingEnvironment.EnvironmentName),
|
||||
new KeyValuePair<string, object>("host.name", Environment.MachineName)
|
||||
]))
|
||||
.AddOtlpExporter(options =>
|
||||
{
|
||||
options.Endpoint = new Uri(config.OpenTelemetryEndpoint);
|
||||
options.Protocol = OtlpExportProtocol.Grpc;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
app.UseForwardedHeaders();
|
||||
|
@@ -8,8 +8,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Konscious.Security.Cryptography.Argon2" Version="1.3.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.8" />
|
||||
<PackageReference Include="Otp.NET" Version="1.4.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@@ -8,11 +8,11 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentValidation" Version="12.0.0" />
|
||||
<PackageReference Include="FluentValidation.DependencyInjectionExtensions" Version="12.0.0" />
|
||||
<PackageReference Include="MediatR" Version="12.5.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.5" />
|
||||
<PackageReference Include="MediatR" Version="13.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.8" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@@ -9,9 +9,9 @@
|
||||
<PackageReference Include="AspNetCore.HealthChecks.MySql" Version="9.0.0" />
|
||||
<PackageReference Include="AspNetCore.HealthChecks.NpgSql" Version="9.0.0" />
|
||||
<PackageReference Include="AspNetCore.HealthChecks.Sqlite" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.5" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.8" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0-preview.3.efcore.9.0.0" />
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
Reference in New Issue
Block a user