Skip to content

Commit 0eec9b0

Browse files
author
vp
committed
Add more EF tasks
1 parent bcc5bff commit 0eec9b0

13 files changed

Lines changed: 258 additions & 37 deletions

File tree

.config/dotnet-tools.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,6 @@
5151
],
5252
"rollForward": false
5353
},
54-
"dotnet-project-licenses": {
55-
"version": "2.7.1",
56-
"commands": [
57-
"dotnet-project-licenses"
58-
],
59-
"rollForward": false
60-
},
6154
"nuget-license": {
6255
"version": "4.0.0",
6356
"commands": [

.vscode/tasks-compliance.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function Ensure-LicenseTool {
1515
}
1616

1717
switch($Command.ToLowerInvariant()){
18-
'licenses' {
18+
'licenses' { # https://github.com/sensslen/nuget-license
1919
Ensure-LicenseTool
2020
$outDir = Join-Path (Join-Path $PSScriptRoot '..') '.tmp/compliance'
2121
if(-not (Test-Path $outDir)){ New-Item -ItemType Directory -Force -Path $outDir | Out-Null }

.vscode/tasks-coverage.ps1

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
param(
22
[string]$Solution = 'BridgingIT.DevKit.Examples.GettingStarted.sln',
33
[string]$ResultsDir = './.tmp/tests/coverage',
4-
[switch]$Html
4+
[switch]$Html,
5+
[switch]$Open
56
)
67
$ErrorActionPreference = 'Stop'
78
function Write-Section($t){ Write-Host "`n=== $t ===" -ForegroundColor Cyan }
@@ -34,6 +35,13 @@ if($Html){
3435
$rgCmd = @('tool','run','reportgenerator','--',"-reports:$reportPaths","-targetdir:$reportRoot","-reporttypes:$reportTypes")
3536
& dotnet $rgCmd
3637
if($LASTEXITCODE -ne 0){ Write-Host 'Report generation failed' -ForegroundColor Red; exit 3 }
37-
Write-Host "Report generated at: $reportRoot/index.html" -ForegroundColor Green
38+
$indexFile = Join-Path $reportRoot 'index.html'
39+
Write-Host "Report generated at: $indexFile" -ForegroundColor Green
40+
if($Open -and (Test-Path $indexFile)){
41+
Write-Section 'Opening HTML report'
42+
try {
43+
if($IsWindows){ Start-Process $indexFile } else { & xdg-open $indexFile }
44+
} catch { Write-Host "Failed to open report: $($_.Exception.Message)" -ForegroundColor Yellow }
45+
}
3846
}
3947
Write-Host 'Coverage processing complete.' -ForegroundColor Green

.vscode/tasks-diagnostics.ps1

Lines changed: 128 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,48 @@ param(
33
)
44
$ErrorActionPreference='Stop'
55

6+
function Export-BenchmarkSummary {
7+
param(
8+
[string]$BenchmarkProjectPath
9+
)
10+
try {
11+
if(-not $BenchmarkProjectPath){ return }
12+
$projectDir = Split-Path $BenchmarkProjectPath -Parent
13+
$artifactRoot = Join-Path $projectDir 'BenchmarkDotNet.Artifacts' 'results'
14+
if(-not (Test-Path $artifactRoot)) {
15+
# Fallback to solution root artifacts
16+
$solutionRoot = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
17+
$artifactRoot = Join-Path $solutionRoot 'BenchmarkDotNet.Artifacts' 'results'
18+
}
19+
if(-not (Test-Path $artifactRoot)) { Write-Host "No BenchmarkDotNet results directory found (checked project + solution): $artifactRoot" -ForegroundColor Yellow; return }
20+
$outDir = Join-Path $PSScriptRoot '..' '.tmp' 'benchmarks'
21+
New-Item -ItemType Directory -Force -Path $outDir | Out-Null
22+
$timestamp = Get-Date -Format 'yyyyMMdd_HHmmss'
23+
$sessionDir = Join-Path $outDir $timestamp
24+
New-Item -ItemType Directory -Force -Path $sessionDir | Out-Null
25+
$copied = @()
26+
Get-ChildItem $artifactRoot -File | ForEach-Object {
27+
Copy-Item $_.FullName -Destination (Join-Path $sessionDir $_.Name) -Force
28+
$copied += $_.Name
29+
}
30+
# Build JSON summary from github md report if present
31+
$githubMd = Get-ChildItem $sessionDir -Filter '*-report-github.md' | Select-Object -First 1
32+
$csv = Get-ChildItem $sessionDir -Filter '*-report.csv' | Select-Object -First 1
33+
$summary = [ordered]@{
34+
project = $BenchmarkProjectPath
35+
timestamp = $timestamp
36+
artifacts = $copied
37+
csvPath = $csv?.FullName
38+
markdownGithubPath = $githubMd?.FullName
39+
}
40+
$summaryFile = Join-Path $sessionDir 'summary.json'
41+
$summary | ConvertTo-Json -Depth 5 | Out-File -FilePath $summaryFile -Encoding UTF8
42+
Write-Host "Benchmark summary exported: $summaryFile" -ForegroundColor Green
43+
} catch {
44+
Write-Host "Failed exporting benchmark summary: $($_.Exception.Message)" -ForegroundColor Yellow
45+
}
46+
}
47+
648
function Ensure-Tool($tool,$install){
749
if(-not (Get-Command $tool -ErrorAction SilentlyContinue)){
850
Write-Host "Installing missing tool: $tool" -ForegroundColor Yellow
@@ -44,6 +86,7 @@ switch($Command.ToLowerInvariant()){
4486
Remove-Item Env:DOTNET_EnableDiagnostics -ErrorAction SilentlyContinue
4587
if($LASTEXITCODE -ne 0){ throw 'BenchmarkDotNet failed' }
4688
Write-Host 'Benchmarks completed.' -ForegroundColor Green
89+
Export-BenchmarkSummary -BenchmarkProjectPath $benchProj.FullName
4790
}
4891
catch {
4992
Write-Host "Benchmark run failed: $($_.Exception.Message). Falling back to simple performance smoke (build + run)." -ForegroundColor Yellow
@@ -102,25 +145,94 @@ switch($Command.ToLowerInvariant()){
102145
if($LASTEXITCODE -ne 0){ throw 'GC stats collection failed' }
103146
Write-Host 'GC sampling complete.' -ForegroundColor Green
104147
}
105-
'aspnet-metrics' {
148+
'aspnet-metrics' {
149+
Ensure-Tool 'dotnet-counters' 'dotnet-counters'
150+
$script:DotNetOnly = $true
151+
$procId = Select-Pid 'Select ASP.NET Core process for metrics'
152+
if(-not $procId){ Write-Host 'No PID selected.' -ForegroundColor Yellow; break }
153+
Write-Host "Monitoring ASP.NET Core counters for PID $procId (10s) ..." -ForegroundColor Cyan
154+
$counterGroups = @('Microsoft.AspNetCore.Hosting')
155+
$countersArg = $counterGroups -join ' '
156+
& dotnet-counters monitor --process-id $procId --counters $countersArg --refresh-interval 1 --duration 10
157+
if($LASTEXITCODE -ne 0){ throw 'ASP.NET metrics collection failed' }
158+
Write-Host 'ASP.NET metrics sampling complete.' -ForegroundColor Green
159+
}
160+
'quick' {
161+
# Combined diagnostics: CPU trace + GC trace + ASP.NET metrics (best effort)
162+
Ensure-Tool 'dotnet-trace' 'dotnet-trace'
106163
Ensure-Tool 'dotnet-counters' 'dotnet-counters'
107164
$script:DotNetOnly = $true
108-
$procId = Select-Pid 'Select ASP.NET Core process for metrics'
165+
$procId = Select-Pid 'Select process for QUICK diagnostics'
109166
if(-not $procId){ Write-Host 'No PID selected.' -ForegroundColor Yellow; break }
110-
Write-Host "Monitoring ASP.NET Core + runtime counters for PID $procId (10s) ..." -ForegroundColor Cyan
111-
# $counterGroups = @(
112-
# 'Microsoft.AspNetCore.Hosting[requests-started;requests-completed;current-requests]',
113-
# 'Microsoft.AspNetCore.Server.Kestrel[connection-queue-length;connections-active;connections-opened;connections-closed]',
114-
# 'System.Net.Http[requests-started;requests-failed]',
115-
# 'System.Runtime[cpu-usage;working-set;gc-heap-size;gen-0-gc-count;gen-1-gc-count;gen-2-gc-count;time-in-gc]'
116-
# )
117-
$counterGroups = @(
118-
'Microsoft.AspNetCore.Hosting'
119-
)
120-
$countersArg = $counterGroups -join ' '
121-
& dotnet-counters monitor --process-id $procId --counters $countersArg --refresh-interval 1 --duration 10
122-
if($LASTEXITCODE -ne 0){ throw 'ASP.NET metrics collection failed' }
123-
Write-Host 'ASP.NET metrics sampling complete.' -ForegroundColor Green
167+
$outDir = Join-Path $PSScriptRoot '..' '.tmp' 'diagnostics'
168+
New-Item -ItemType Directory -Force -Path $outDir | Out-Null
169+
$errors = @()
170+
# CPU trace (5s)
171+
try {
172+
$cpuFile = Join-Path $outDir "cpuQuick_${procId}_$(Get-Date -Format 'yyyyMMdd_HHmmss').nettrace"
173+
Write-Host "[Quick] CPU trace (5s) for PID $procId" -ForegroundColor Cyan
174+
& dotnet-trace collect --process-id $procId --providers Microsoft-DotNETCore-SampleProfiler:1 --duration 00:00:05 -o $cpuFile
175+
if($LASTEXITCODE -ne 0){ throw 'CPU trace failed' }
176+
Write-Host "[Quick] CPU trace saved: $cpuFile" -ForegroundColor Green
177+
} catch { $errors += $_.Exception.Message; Write-Host "[Quick] CPU trace error: $($_.Exception.Message)" -ForegroundColor Yellow }
178+
# GC trace (5s)
179+
try {
180+
$gcFile = Join-Path $outDir "gcQuick_${procId}_$(Get-Date -Format 'yyyyMMdd_HHmmss').nettrace"
181+
Write-Host "[Quick] GC trace (5s) for PID $procId" -ForegroundColor Cyan
182+
& dotnet-trace collect --process-id $procId --providers Microsoft-DotNETCore-SampleProfiler:1,System.Runtime:4 --duration 00:00:05 -o $gcFile
183+
if($LASTEXITCODE -ne 0){ throw 'GC trace failed' }
184+
Write-Host "[Quick] GC trace saved: $gcFile" -ForegroundColor Green
185+
} catch { $errors += $_.Exception.Message; Write-Host "[Quick] GC trace error: $($_.Exception.Message)" -ForegroundColor Yellow }
186+
# ASP.NET metrics (6s) limited group
187+
try {
188+
Write-Host "[Quick] ASP.NET metrics (6s) for PID $procId" -ForegroundColor Cyan
189+
& dotnet-counters monitor --process-id $procId --counters "Microsoft.AspNetCore.Hosting" --refresh-interval 1 --duration 6
190+
if($LASTEXITCODE -ne 0){ throw 'ASP.NET metrics failed' }
191+
Write-Host '[Quick] ASP.NET metrics sampling complete.' -ForegroundColor Green
192+
} catch { $errors += $_.Exception.Message; Write-Host "[Quick] ASP.NET metrics error: $($_.Exception.Message)" -ForegroundColor Yellow }
193+
if($errors.Count -gt 0){
194+
Write-Host "Quick diagnostics finished with $($errors.Count) error(s)." -ForegroundColor Yellow
195+
foreach($e in $errors){ Write-Host " - $e" -ForegroundColor DarkYellow }
196+
} else {
197+
Write-Host 'Quick diagnostics completed successfully.' -ForegroundColor Green
198+
}
124199
}
200+
'bench-select' {
201+
# Enumerate benchmark projects and allow Spectre selection (force user selection even if single project)
202+
$benchProjects = Get-ChildItem -Recurse -Filter '*Benchmarks.csproj' -File 2>$null
203+
if(-not $benchProjects){ Write-Host 'No benchmark projects (*.Benchmarks.csproj) found.' -ForegroundColor Yellow; break }
204+
Import-Module PwshSpectreConsole -ErrorAction Stop
205+
$solutionRoot = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
206+
$projectMap = [ordered]@{}
207+
$labels = @()
208+
$i = 0
209+
foreach($p in ($benchProjects | Sort-Object FullName)){
210+
$full = (Resolve-Path $p.FullName).Path
211+
if($full.StartsWith($solutionRoot)) { $rel = $full.Substring($solutionRoot.Length).TrimStart('\\') } else { $rel = Split-Path $full -Leaf }
212+
# Avoid Spectre markup brackets by using parentheses for index
213+
$label = "$rel"
214+
$projectMap[$label] = $full
215+
$labels += $label
216+
$i++
217+
}
218+
$selected = Read-SpectreSelection -Title 'Select Benchmark Project' -Choices ($labels + 'Cancel') -EnableSearch -PageSize 15
219+
if(-not $selected -or $selected -eq 'Cancel'){ Write-Host 'Benchmark selection cancelled.' -ForegroundColor Yellow; $LASTEXITCODE = 0; break }
220+
if(-not $projectMap.Contains($selected)){ Write-Host 'Invalid selection mapping.' -ForegroundColor Red; $LASTEXITCODE = 1; break }
221+
$projPath = $projectMap[$selected]
222+
Write-Host "Running selected benchmarks: $projPath" -ForegroundColor Cyan
223+
try {
224+
$env:DOTNET_EnableDiagnostics=0
225+
& dotnet run --project "$projPath" -c Release -- --filter '*' --anyCategories '*'
226+
$runExit = $LASTEXITCODE
227+
Remove-Item Env:DOTNET_EnableDiagnostics -ErrorAction SilentlyContinue
228+
if($runExit -ne 0){ throw "Benchmark run failed (exit $runExit)" }
229+
Write-Host 'Selected benchmarks completed.' -ForegroundColor Green
230+
Export-BenchmarkSummary -BenchmarkProjectPath $projPath
231+
} catch {
232+
Write-Host "Benchmark run failed: $($_.Exception.Message)" -ForegroundColor Red
233+
Remove-Item Env:DOTNET_EnableDiagnostics -ErrorAction SilentlyContinue
234+
$LASTEXITCODE = 1
235+
}
236+
}
125237
default { throw "Unknown diagnostics command: $Command" }
126238
}

.vscode/tasks-docker.ps1

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ Usage: pwsh -File .vscode/task.ps1 <command> [options]
148148
Commands:
149149
docker-build-run Build image (optionally --NoCache) & run container
150150
docker-build Build image only
151+
docker-build-debug Build image (DEBUG tag) using build arg CONFIG=Debug
152+
docker-build-release Build image (RELEASE tag) using build arg CONFIG=Release
151153
docker-run Run container (assumes image built)
152154
docker-stop Stop container
153155
docker-remove Remove (force) container
@@ -179,6 +181,26 @@ switch ($Command.ToLower()) {
179181
'docker-build' {
180182
Docker-Build -Tag $ImageTag -File $Dockerfile -Context $ProjectDockerContext -NoCache:$NoCache
181183
}
184+
'docker-build-debug' {
185+
$tag = "$ImageTag-debug"
186+
Write-Step "Using debug tag: $tag"
187+
$args = @('build','-t',$tag,'-f',$Dockerfile,'--build-arg','CONFIG=Debug')
188+
if($NoCache){ $args += '--no-cache' }
189+
$args += $ProjectDockerContext
190+
Write-Step "docker $($args -join ' ')"
191+
docker @args
192+
if($LASTEXITCODE -ne 0){ Fail 'Docker debug build failed.' $LASTEXITCODE }
193+
}
194+
'docker-build-release' {
195+
$tag = "$ImageTag-release"
196+
Write-Step "Using release tag: $tag"
197+
$args = @('build','-t',$tag,'-f',$Dockerfile,'--build-arg','CONFIG=Release')
198+
if($NoCache){ $args += '--no-cache' }
199+
$args += $ProjectDockerContext
200+
Write-Step "docker $($args -join ' ')"
201+
docker @args
202+
if($LASTEXITCODE -ne 0){ Fail 'Docker release build failed.' $LASTEXITCODE }
203+
}
182204
'docker-run' {
183205
Ensure-Network -Name $Network
184206
Docker-Run -Tag $ImageTag -Name $ContainerName -Network $Network -HostPort $HostPort -ContainerPort $ContainerPort

.vscode/tasks-dotnet.ps1

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,49 @@ switch ($Command.ToLowerInvariant()) {
4747
'analyzers' { Invoke-Dotnet @('build',$SolutionPath,'-warnaserror','/p:RunAnalyzers=true','/p:EnableNETAnalyzers=true','/p:AnalysisLevel=latest') }
4848
'project-build' { if (-not $ProjectPath) { throw 'ProjectPath required for project-build' }; Invoke-Dotnet (@('build',$ProjectPath) + $logArgs) }
4949
'project-publish' { if (-not $ProjectPath) { throw 'ProjectPath required for project-publish' }; Invoke-Dotnet (@('publish',$ProjectPath) + $logArgs) }
50+
'project-publish-release' { if (-not $ProjectPath) { throw 'ProjectPath required for project-publish-release' }; Invoke-Dotnet (@('publish',$ProjectPath,'-c','Release') + $logArgs) }
51+
'project-publish-sc' {
52+
if (-not $ProjectPath) { throw 'ProjectPath required for project-publish-sc' }
53+
# Self-contained single-file trimmed publish (win-x64 default runtime identifier)
54+
$rid = 'win-x64'
55+
$publishArgs = @('publish',$ProjectPath,'-c','Release','-r',$rid,'--self-contained','true','/p:PublishSingleFile=true','/p:PublishTrimmed=false') + $logArgs
56+
Invoke-Dotnet $publishArgs
57+
}
58+
'pack-modules' {
59+
# Packs each module project (Domain/Application/Infrastructure/Presentation) into .tmp/packages
60+
$root = Split-Path $PSScriptRoot -Parent
61+
$modulesPath = Join-Path $root 'src/Modules'
62+
if (-not (Test-Path $modulesPath)) { throw "Modules path not found: $modulesPath" }
63+
$outDir = Join-Path $root '.tmp/packages'
64+
if(-not (Test-Path $outDir)){ New-Item -ItemType Directory -Force -Path $outDir | Out-Null }
65+
$projects = Get-ChildItem -Path $modulesPath -Recurse -Filter '*.csproj' | Where-Object { $_.FullName -notmatch 'Tests' -and $_.Name -match 'CoreModule\.(Domain|Application|Infrastructure|Presentation)\.csproj' }
66+
if(-not $projects){ Write-Host 'No module projects found to pack.' -ForegroundColor Yellow; break }
67+
foreach($p in $projects){
68+
Write-Host "Packing module project: $($p.FullName)" -ForegroundColor Cyan
69+
Invoke-Dotnet @('pack',$p.FullName,'-c','Release','-o',$outDir)
70+
}
71+
Write-Host "Module packages written to $outDir" -ForegroundColor Green
72+
}
73+
'analyzers-export' {
74+
$root = Split-Path $PSScriptRoot -Parent
75+
$anDir = Join-Path $root '.tmp/analyzers'
76+
if(-not (Test-Path $anDir)){ New-Item -ItemType Directory -Force -Path $anDir | Out-Null }
77+
$stamp = Get-Date -Format 'yyyyMMdd_HHmmss'
78+
$sarifFile = Join-Path $anDir "analyzers_$stamp.sarif"
79+
Write-Host "Running analyzers export -> $sarifFile" -ForegroundColor Cyan
80+
& dotnet build $SolutionPath -warnaserror /p:RunAnalyzers=true /p:EnableNETAnalyzers=true /p:AnalysisLevel=latest /p:ErrorLog=$sarifFile
81+
if($LASTEXITCODE -ne 0){ throw 'Analyzer build failed' }
82+
# Produce summary JSON (count diagnostics by id/severity) simple parse of SARIF
83+
$sarifJson = Get-Content -Raw -Path $sarifFile | ConvertFrom-Json
84+
$issues = @()
85+
if($sarifJson.runs){
86+
foreach($run in $sarifJson.runs){ if($run.results){ $issues += $run.results } }
87+
}
88+
$summary = $issues | Group-Object -Property ruleId | ForEach-Object { [pscustomobject]@{ ruleId=$_.Name; count=$_.Count } }
89+
$summaryFile = Join-Path $anDir "analyzers_summary_$stamp.json"
90+
$summary | ConvertTo-Json -Depth 4 | Set-Content -Path $summaryFile -Encoding UTF8
91+
Write-Host "Analyzer summary written: $summaryFile" -ForegroundColor Green
92+
}
5093
'project-watch' { if (-not $ProjectPath) { throw 'ProjectPath required for project-watch' }; Invoke-Dotnet @('watch','run','--project',$ProjectPath,'--nologo') }
5194
'project-run' { if (-not $ProjectPath) { throw 'ProjectPath required for project-run' }; Invoke-Dotnet (@('run','--project',$ProjectPath) + $logArgs) }
5295
'project-watch-fast' { if (-not $ProjectPath) { throw 'ProjectPath required for project-watch-fast' }; Invoke-Dotnet @('watch','run','--project',$ProjectPath,'--nologo','--no-restore') }

.vscode/tasks-ef.ps1

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,24 @@ function Apply-Migrations() {
186186
Write-Host 'Database updated.' -ForegroundColor Green
187187
}
188188

189+
function Update-DatabaseAlias() {
190+
Section "Update Database (Alias) ($script:DbContext)"
191+
Apply-Migrations
192+
}
193+
194+
function Recreate-Database() {
195+
Section "Recreate Database (Drop + Migrate) ($script:DbContext)"
196+
Ensure-DotNetTools
197+
# Drop database
198+
$dropArgs = Build-EfArgs @('database','drop','--context', $script:DbContext,'--force')
199+
Run-Ef $dropArgs
200+
Write-Host 'Database dropped.' -ForegroundColor DarkYellow
201+
# Apply migrations
202+
$updateArgs = Build-EfArgs @('database','update','--context', $script:DbContext)
203+
Run-Ef $updateArgs
204+
Write-Host 'Database recreated with latest migrations.' -ForegroundColor Green
205+
}
206+
189207
function Undo-Migration() {
190208
Section "Undo (Revert to Previous) ($script:DbContext)"
191209
Ensure-DotNetTools
@@ -272,6 +290,8 @@ Commands:
272290
remove Remove last migration (not applied)
273291
removeall Delete ALL migration source files (NO confirmation)
274292
apply Update database (apply all pending)
293+
update Alias for apply (update database)
294+
recreate Drop and recreate database (applies all migrations)
275295
undo Revert database to previous migration
276296
status Show applied vs filesystem migrations
277297
reset Squash migrations into new baseline (Initial) (NO confirmation)
@@ -311,6 +331,8 @@ switch ($Command.ToLower()) {
311331
'remove' { Remove-Migration }
312332
'removeall' { RemoveAll-Migrations }
313333
'apply' { Apply-Migrations }
334+
'update' { Update-DatabaseAlias }
335+
'recreate' { Recreate-Database }
314336
'undo' { Undo-Migration }
315337
'status' { Show-MigrationStatus }
316338
'reset' { Reset-Migrations }

src/Modules/CoreModule/CoreModule.Application/CodeModuleConstants.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ namespace BridgingIT.DevKit.Examples.GettingStarted.Modules.CoreModule.Applicati
77

88
using System;
99
using System.Collections.Generic;
10+
using System.Diagnostics.CodeAnalysis;
1011
using System.Linq;
1112
using System.Text;
1213
using System.Threading.Tasks;
1314

15+
[ExcludeFromCodeCoverage]
1416
public struct CodeModuleConstants
1517
{
1618
public const string CustomerNumberSequenceName = "CustomerNumbers";

src/Modules/CoreModule/CoreModule.Application/CoreModuleConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace BridgingIT.DevKit.Examples.GettingStarted.Modules.CoreModule.Application;
77

88
using FluentValidation;
9+
using System.Diagnostics.CodeAnalysis;
910

1011
/// <summary>
1112
/// Strongly typed configuration model for the CoreModule.
@@ -36,6 +37,7 @@ namespace BridgingIT.DevKit.Examples.GettingStarted.Modules.CoreModule.Applicati
3637
/// }
3738
/// </code>
3839
/// </remarks>
40+
[ExcludeFromCodeCoverage]
3941
public class CoreModuleConfiguration
4042
{
4143
/// <summary>

0 commit comments

Comments
 (0)