Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
377 commits
Select commit Hold shift + click to select a range
7534a30
update Resources LogTabWindow menus
Nov 13, 2025
2086e73
Merge pull request #443 from LogExperts/224-multi-language-translation
Hirogen Nov 13, 2025
2679505
updates resources.designer
Nov 13, 2025
27aed90
Merge branch 'Development' into dotnet10-nugetupdates
Hirogen Nov 13, 2025
b5e9170
Upgrade .NET Core version from 9.0.x to 10.0.x
Hirogen Nov 13, 2025
7f2f578
Update .NET version from 9.0.x to 10.0.x
Hirogen Nov 13, 2025
7a1bce0
Merge pull request #488 from LogExperts/Hirogen-patch-1
Hirogen Nov 13, 2025
008987d
Merge pull request #489 from LogExperts/Hirogen-patch-2
Hirogen Nov 13, 2025
f0a477b
Merge branch 'Development' into dotnet10-nugetupdates
Hirogen Nov 13, 2025
1eb4b18
Merge pull request #487 from LogExperts/dotnet10-nugetupdates
Hirogen Nov 13, 2025
1821920
first iteration of darkrmode, needs to be adapted to the cellpainting
Hirogen Nov 13, 2025
00bdf86
Merge branch 'Development' into plugin-repository-optimizations
Hirogen Nov 13, 2025
8a3eb29
color info
Hirogen Nov 13, 2025
23e7f2d
merge error
Nov 14, 2025
52d49d8
review comments
Nov 14, 2025
987ea8d
review comments
Hirogen Nov 14, 2025
2142ef9
hashes for plugins
Hirogen Nov 17, 2025
ffdf6c9
update plugins
Hirogen Nov 18, 2025
07de0b0
a few more updates
Hirogen Nov 18, 2025
1c2e911
unit test fix
Hirogen Nov 18, 2025
65efe7d
update plugins
Hirogen Nov 18, 2025
c09a552
update readme
Hirogen Nov 18, 2025
8add42d
unittests
Nov 19, 2025
1a25392
even more tests
Nov 19, 2025
3ede763
small fix
Nov 19, 2025
2c3dc97
Merge branch 'plugin-repository-optimizations' of https://github.com/…
Hirogen Nov 19, 2025
271c8e2
update more changes
Hirogen Nov 19, 2025
8d8c565
update yml
Hirogen Nov 19, 2025
1a354e2
plugin hashes
Hirogen Nov 19, 2025
e810e89
remove agen files
Hirogen Nov 19, 2025
9930fef
remove rider folders
Hirogen Nov 19, 2025
204cb5e
remove agent files
Hirogen Nov 19, 2025
00353f2
remove no longer need script
Hirogen Nov 19, 2025
92963f7
another file to remove
Hirogen Nov 19, 2025
34951a9
code quality fixes
Hirogen Nov 19, 2025
0d1c1f1
github action -.-
Hirogen Nov 19, 2025
85c96c5
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 19, 2025
9ba5504
path.join
Hirogen Nov 19, 2025
a16e7f3
Merge branch 'plugin-repository-optimizations' of https://github.com/…
Hirogen Nov 19, 2025
1e7d9ab
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 19, 2025
caa7d9c
unit tests fix
Hirogen Nov 19, 2025
27f5800
Merge branch 'plugin-repository-optimizations' of https://github.com/…
Hirogen Nov 19, 2025
157820a
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 19, 2025
2e498ec
unit test fixes and code quality
Nov 20, 2025
e78a54f
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 20, 2025
fda25ae
review fixes
Nov 20, 2025
c15919c
Merge branch 'plugin-repository-optimizations' of https://github.com/…
Nov 20, 2025
12f1f11
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 20, 2025
4aac8c8
small things
Nov 20, 2025
588daff
Merge branch 'plugin-repository-optimizations' of https://github.com/…
Nov 20, 2025
2ba52b8
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 20, 2025
73c1ff6
Merge pull request #486 from LogExperts/plugin-repository-optimizations
Hirogen Nov 20, 2025
0a41675
Merge branch 'Development' into 470-settings-deserialization-fails-if…
Hirogen Nov 20, 2025
3cf86cf
regex columnizer fixes
Hirogen Nov 20, 2025
db51888
update json columnizer
Nov 21, 2025
ff1b514
optimisations
Hirogen Nov 21, 2025
e91afea
fixes for the missing lines in the gui, and probably for the copy
Nov 21, 2025
59b6962
update
Nov 21, 2025
da763d6
update display line length
Nov 21, 2025
8454ef0
update display max length and unit tests, also settings dialog
Nov 21, 2025
3796da4
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 21, 2025
d9e1a61
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 21, 2025
73bdf59
Merge pull request #491 from LogExperts/missing_characters_in_log_view
Hirogen Nov 21, 2025
b87ed86
Merge branch 'Development' into 470-settings-deserialization-fails-if…
Nov 21, 2025
8061d8c
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 21, 2025
0fdf7f7
ConfigManager to its own project
Hirogen Nov 24, 2025
12cb512
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 24, 2025
9ef8a22
doc
Hirogen Nov 24, 2025
f2709b5
Merge branch '470-settings-deserialization-fails-if-filterparamscurre…
Hirogen Nov 24, 2025
66da11c
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 24, 2025
a78d204
review updates and bugfixes
Nov 25, 2025
03d1335
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 25, 2025
47c87f2
update unit tests and missing function
Nov 25, 2025
31b5bfd
Merge branch '470-settings-deserialization-fails-if-filterparamscurre…
Nov 25, 2025
6dbb920
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 25, 2025
10149a1
unit tests fix
Nov 25, 2025
73490d6
Merge branch '470-settings-deserialization-fails-if-filterparamscurre…
Nov 25, 2025
d7ecdfc
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 25, 2025
1ef497a
Merge pull request #492 from LogExperts/470-settings-deserialization-…
Hirogen Nov 25, 2025
8ea51c7
optimizations
Nov 26, 2025
6249edf
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 26, 2025
ba3bb11
review comment
Hirogen Nov 26, 2025
8ce7e15
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 26, 2025
2c2674b
Merge pull request #495 from LogExperts/optimizations_warnings_remova…
Hirogen Nov 26, 2025
0c96394
resources and housekeeping
Nov 27, 2025
0295266
initial fix try
Nov 27, 2025
d616fcf
small updates
Nov 28, 2025
9c92f78
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 28, 2025
7fba6b4
Merge pull request #499 from LogExperts/resources_more_housekeeping
Hirogen Nov 28, 2025
bcdb318
make internal classes visible to unit tests
Hirogen Nov 28, 2025
be05c57
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 28, 2025
2c525b6
Merge branch 'Development' into 448-allow-only-1-instance-setting-doe…
Hirogen Nov 29, 2025
ed995c4
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 29, 2025
be6915f
fixed settings import bug...
Hirogen Nov 30, 2025
d929c65
Merge branch '448-allow-only-1-instance-setting-does-nothing' of http…
Hirogen Nov 30, 2025
98fe89f
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 30, 2025
460211b
fixes for no longer imported settings
Hirogen Nov 30, 2025
7fa2bcf
Merge branch '448-allow-only-1-instance-setting-does-nothing' of http…
Hirogen Nov 30, 2025
2aeb2cd
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 30, 2025
d5510ae
review comment
Hirogen Nov 30, 2025
3d55ac2
Merge branch '448-allow-only-1-instance-setting-does-nothing' of http…
Hirogen Nov 30, 2025
ca40072
chore: update plugin hashes [skip ci]
github-actions[bot] Nov 30, 2025
337cac1
Merge pull request #500 from LogExperts/448-allow-only-1-instance-set…
Hirogen Nov 30, 2025
4793787
replace fixed regex with regex properties and regex attributes
Hirogen Nov 30, 2025
840683f
add licenses of nuget packages
Hirogen Nov 30, 2025
2cd486e
update nuke build, assemlbyinfo, and license files, also update usedC…
Hirogen Nov 30, 2025
5f86810
update and a few fixes
Hirogen Nov 30, 2025
8a3ad87
fixes
Hirogen Nov 30, 2025
005b7c5
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 1, 2025
dd8a5e7
small fixes for the installation
Dec 1, 2025
969b593
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 1, 2025
290f7cc
hash generation on release build
Hirogen Dec 1, 2025
a2cdac7
fixed buttons to big
Hirogen Dec 1, 2025
db8390e
Merge branch 'Development' into darkmode
Hirogen Dec 1, 2025
520adae
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 1, 2025
51d0214
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 1, 2025
5967010
Merge pull request #490 from LogExperts/darkmode
Hirogen Dec 1, 2025
496047e
Merge branch 'Development' into prepare_release
Hirogen Dec 1, 2025
b5247ee
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 1, 2025
26f9f1c
Merge pull request #501 from LogExperts/prepare_release
Hirogen Dec 1, 2025
b4fdc42
owner is already set, no need for parent
Dec 2, 2025
859d168
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 2, 2025
a16b899
Merge pull request #504 from LogExperts/503-1210-error-when-try-to-op…
Hirogen Dec 2, 2025
039b19b
Merge branch 'Development' into performance_optimizations
Dec 2, 2025
ffa5ecc
optimization, added ISpan stuff
Dec 2, 2025
f54bcc4
pipelines docs for implementation
Dec 2, 2025
76a42f2
Pipeline added
Hirogen Dec 2, 2025
5a438e8
fixes missing ApplicationStartup.Path, moved Persister to own Test Pr…
Dec 3, 2025
7027bcb
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 3, 2025
a089d33
path.join.. never combine
Dec 3, 2025
9b54d38
Merge branch '505-tail-following-stops-working-after-a-while-for-logs…
Dec 3, 2025
795820f
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 3, 2025
966e414
Merge pull request #507 from LogExperts/505-tail-following-stops-work…
Hirogen Dec 3, 2025
02108cd
Merge branch 'Development' into new_reader
Dec 3, 2025
2fbc998
pipelines update
Dec 4, 2025
90ef20b
locks
Dec 4, 2025
5040622
update reader
Dec 6, 2025
ea35028
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 6, 2025
ff39dba
wrongly used escape characteres in resources files
Hirogen Dec 6, 2025
cbd0374
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 6, 2025
cceaa03
Update src/ColumnizerLib/ILogLineSpanColumnizer.cs
Hirogen Dec 6, 2025
a2e43ff
Update src/LogExpert.Core/Interface/ILogStreamReaderSpan.cs
Hirogen Dec 6, 2025
0765822
Update src/LogExpert.UI/Controls/LogWindow/LogWindow.cs
Hirogen Dec 6, 2025
a76efa0
Update src/LogExpert.Core/Interface/ILogStreamReaderSpan.cs
Hirogen Dec 6, 2025
91f5c30
Update src/LogExpert.Core/Classes/Log/LogBuffer.cs
Hirogen Dec 6, 2025
f846922
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 6, 2025
97808ba
Update src/ColumnizerLib/ITextValue.cs
Hirogen Dec 6, 2025
433ba41
Update src/ColumnizerLib/ILogLine.cs
Hirogen Dec 6, 2025
6a3b31d
review comments
Hirogen Dec 6, 2025
262fab1
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 6, 2025
f163dab
benchmakr summary
Dec 6, 2025
a039252
Merge branch 'new_reader' of https://github.com/LogExperts/LogExpert …
Dec 6, 2025
b28a006
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 6, 2025
3f8dde4
benchmark md updates
Hirogen Dec 6, 2025
0a2f759
Merge branch 'new_reader' of https://github.com/LogExperts/LogExpert …
Hirogen Dec 6, 2025
eaf2dcc
Merge pull request #511 from LogExperts/510-ui-strings-containing-esc…
Hirogen Dec 6, 2025
33fa73e
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 6, 2025
7051b8d
update
Hirogen Dec 7, 2025
316370d
update new line search
Hirogen Dec 7, 2025
3db95b1
more changes
Hirogen Dec 7, 2025
c795053
fixing no lines showing up
Dec 10, 2025
d2226c4
initial commit
Dec 10, 2025
ad22e66
update
Dec 10, 2025
7e32496
filereader documentation
Dec 10, 2025
08db763
missing resources link
Hirogen Dec 10, 2025
056c712
updates
Hirogen Dec 10, 2025
3e7f15c
clear datagrid when exiting logexpert, for faster exit
Dec 11, 2025
d166500
added ReadOnlyMemory<char>
Dec 11, 2025
1e1e620
Memory
Hirogen Dec 11, 2025
791beee
A lot of Memory
Dec 12, 2025
2d84ab1
fixed not showing any lines... now all is shown
Hirogen Dec 12, 2025
b3b95ac
memory, more memory, even more memory
Hirogen Dec 12, 2025
1bbd7b5
fixing unittests
Hirogen Dec 12, 2025
9c4a3d9
Merge branch 'Development' into new_reader
Hirogen Dec 12, 2025
4e3bd3f
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 12, 2025
88ff2f0
Merge pull request #506 from LogExperts/new_reader
Hirogen Dec 12, 2025
44d603c
Merge branch 'Development' into 514-loading-as-session-file-leads-to-…
Dec 14, 2025
0ac191d
new choose files dialog for missing logfiles in the project lxp
Dec 15, 2025
2cecf4d
some fixes, some bugs not working
Hirogen Dec 15, 2025
2c5daec
fixed
Dec 16, 2025
bc2bb2b
fixing https://github.com/LogExperts/LogExpert/issues/517
Dec 16, 2025
a97e78e
unittest fix
Dec 16, 2025
f8a8390
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 16, 2025
2c79a87
review comments
Dec 16, 2025
ed528d2
Merge branch '514-loading-as-session-file-leads-to-broken-ui-if-a-log…
Dec 16, 2025
fe6f6d1
chore: update plugin hashes [skip ci]
github-actions[bot] Dec 16, 2025
5bf8015
Merge pull request #519 from LogExperts/514-loading-as-session-file-l…
Hirogen Dec 16, 2025
44f2957
disposeing
Dec 17, 2025
698d139
ledservice, removed leds from logtabwindow to service, so class is sm…
Dec 17, 2025
09899f0
Add Chinese Multilingual
Jan 5, 2026
090c70b
update
Jan 7, 2026
7c86104
fixes https://github.com/LogExperts/LogExpert/issues/520
Jan 7, 2026
eb3ab30
error fix
Jan 7, 2026
a955b61
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 7, 2026
e68207a
Merge pull request #522 from LogExperts/logtabwindowrefactor
Hirogen Jan 7, 2026
5ae2f86
small fixes for copy to tab and copy to clipboard
Jan 7, 2026
a8e8e74
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 7, 2026
2879796
Merge pull request #523 from LogExperts/small_fixes
Hirogen Jan 7, 2026
3b17e1d
Merge pull request #521 from mfkeeq199458/Chinese_Multilingual
Hirogen Jan 7, 2026
7b0b70f
tabcontroller
Jan 14, 2026
fb6a68e
update tabcontroller
Jan 16, 2026
0d52e75
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 16, 2026
ec82d50
comments
Jan 16, 2026
c7880c9
Merge branch 'TabController' of https://github.com/LogExperts/LogExpe…
Jan 16, 2026
195ae20
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 16, 2026
e7b32ae
resources update
Jan 16, 2026
9fb0d58
Merge branch 'TabController' of https://github.com/LogExperts/LogExpe…
Jan 16, 2026
c9dbc5c
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 16, 2026
48ab09f
DisposedExceptions while testing removed
Jan 21, 2026
20c1457
Merge branch 'TabController' of https://github.com/LogExperts/LogExpe…
Jan 21, 2026
0c4ba2a
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 21, 2026
25280c9
added backwards compatibility for hilightgroups in old settings files
Jan 21, 2026
8324e81
code quality
Jan 22, 2026
33248c0
Merge branch 'TabController' of https://github.com/LogExperts/LogExpe…
Jan 22, 2026
e1c3afd
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 22, 2026
cfae27e
Merge pull request #525 from LogExperts/TabController
Hirogen Jan 22, 2026
cc84aa4
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 22, 2026
f35bece
Merge branch 'Development' into highlightbackwardscompatibility
Jan 22, 2026
94d6481
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 22, 2026
c458feb
Merge pull request #527 from LogExperts/highlightbackwardscompatibility
Hirogen Jan 22, 2026
af740f3
unit tests update
Jan 23, 2026
1930a55
chore: update plugin hashes [skip ci]
github-actions[bot] Jan 23, 2026
38864a6
Merge pull request #528 from LogExperts/unittestsfix
Hirogen Jan 23, 2026
72f83ce
encoding with span
Feb 18, 2026
b32ff0e
first iteration
Feb 24, 2026
85789c5
menutoolbarcontroller
Feb 26, 2026
0b140ec
chore: update plugin hashes [skip ci]
github-actions[bot] Feb 27, 2026
20024f9
fixes after code review
Feb 27, 2026
69796f3
Merge branch 'menutoolbarcontroller' of https://github.com/LogExperts…
Feb 27, 2026
f94c5fe
chore: update plugin hashes [skip ci]
github-actions[bot] Feb 27, 2026
b97762e
Merge pull request #531 from LogExperts/menutoolbarcontroller
Hirogen Feb 27, 2026
f047451
multithreaded filter readded
Mar 2, 2026
f915cc0
portable mode rework
Mar 3, 2026
cbf143b
chore: update plugin hashes [skip ci]
github-actions[bot] Mar 3, 2026
dc77416
review comment
Mar 3, 2026
04e5d88
Merge branch '515-the-trusted-pluginsjson-is-written-to-and-loaded-fr…
Mar 3, 2026
717ff8c
chore: update plugin hashes [skip ci]
github-actions[bot] Mar 3, 2026
13e66b2
Merge pull request #532 from LogExperts/515-the-trusted-pluginsjson-i…
Hirogen Mar 3, 2026
67fdd47
fixes tooltip always staying on top
Hirogen Mar 3, 2026
16490a6
chore: update plugin hashes [skip ci]
github-actions[bot] Mar 3, 2026
3c30bc8
Merge pull request #533 from LogExperts/524-the-tip-search-string-for…
Hirogen Mar 3, 2026
bc565ca
cell selection mode persisted per file
Hirogen Mar 3, 2026
4547750
update unit tests
Hirogen Mar 3, 2026
edbd208
chore: update plugin hashes [skip ci]
github-actions[bot] Mar 3, 2026
1387142
Merge pull request #534 from LogExperts/518-allow-to-persist-cell-sel…
Hirogen Mar 3, 2026
1bb370e
nuke parameters.json
Hirogen Mar 3, 2026
4102a17
update for gitversion
Hirogen Mar 3, 2026
63a8283
Merge branch 'Development' into 518-allow-to-persist-cell-select-mode…
Hirogen Mar 3, 2026
8543500
chore: update plugin hashes [skip ci]
github-actions[bot] Mar 3, 2026
7f8bec7
Merge pull request #535 from LogExperts/518-allow-to-persist-cell-sel…
Hirogen Mar 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
44 changes: 44 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/dotnet
{
"name": "C# (.NET)",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/dotnet:1-8.0",
"features": {
"ghcr.io/devcontainers/features/dotnet:2": {}
},

// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},

// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [5000, 5001],
// "portsAttributes": {
// "5001": {
// "protocol": "https"
// }
// }

// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "dotnet restore",

// Configure tool-specific properties.
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"streetsidesoftware.code-spell-checker",
"github.vscode-github-actions",
"davidanson.vscode-markdownlint",
"mhutchie.git-graph",
"ms-dotnettools.csdevkit"
]
}
}


// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
248 changes: 248 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
# GitHub Copilot Instructions for LogExpert

## Repository Overview

**LogExpert** is a Windows-based log file tail and analysis application written in C#. It's a GUI replacement for the Unix tail command, originally from CodePlex, with extensive features for viewing, analyzing, and filtering log files.

### Key Features
- Tail mode for real-time log monitoring
- MDI-Interface with tabs for multiple files
- Search functionality including RegEx support
- Bookmarks and highlighting capabilities
- Flexible filter views with filter-to-tab functionality
- Columnizer plugins for parsing structured logs
- Unicode support and log4j XML file support
- 3rd party plugin architecture
- Automatic columnizer detection (experimental)
- Serilog.Formatting.Compact format support

### Technology Stack
- **Primary Language**: C# (.NET 10.0-windows target framework)
- **UI Framework**: Windows Forms
- **Build System**: Nuke Build System with MSBuild
- **Target Platform**: Windows (requires Windows-specific dependencies)
- **Package Management**: NuGet with central package management
- **Testing**: NUnit framework
- **CI/CD**: GitHub Actions + AppVeyor

## High-Level Repository Information

- **Repository Size**: Medium (~26 source projects)
- **Project Type**: Desktop Application (Windows Forms)
- **Architecture**: Plugin-based architecture with columnizers
- **Main Entry Point**: `src/LogExpert/Program.cs`
- **Main Solution**: `src/LogExpert.sln`

## Build Instructions

### Prerequisites
**CRITICAL**: This project requires Windows development environment and .NET 10.0.100 SDK or compatible.

### Environment Setup
1. **Install .NET SDK**: Project requires .NET 10.0.100 SDK (specified in `global.json`)
2. **Windows Environment**: Build targets `net10.0-windows` and uses Windows Forms
3. **Visual Studio**: Recommended Visual Studio 2026+ or Visual Studio Code with C# extension
4. **Optional Dependencies**:
- Chocolatey (for packaging)
- Inno Setup 5 or 6 (for setup creation)

### Build Commands

#### Using Nuke Build System (Recommended)
```bash
# Windows Command Prompt/PowerShell
./build.ps1

# Cross-platform (Linux/macOS) - Note: Limited functionality
./build.sh
```

#### Common Nuke Build Targets
```bash
# Clean and build
./build.ps1 --target Clean Compile

# Run tests
./build.ps1 --target Test

# Create packages
./build.ps1 --target Pack

# Full release build with setup
./build.ps1 --target Clean Pack CreateSetup --configuration Release
```

#### Direct .NET Commands
```bash
# From src/ directory
dotnet restore
dotnet build --no-restore
dotnet test --no-build --verbosity normal
```

### Known Build Issues and Workarounds

1. **Cross-Platform Limitations**:
- Linux/macOS builds will fail due to missing Windows Desktop SDK components
- Error: "Microsoft.NET.Sdk.WindowsDesktop/targets" not found
- **Workaround**: Use Windows environment or Windows Subsystem for Linux with proper .NET Windows SDK

2. **.NET Version Mismatch**:
- Project requires .NET 10.0.100 but may encounter .NET 8.0 environments
- **Workaround**: Nuke build system automatically downloads correct SDK version

3. **Build Timing**:
- Full build: ~2-5 minutes on modern hardware
- Test execution: ~30 seconds to 2 minutes
- Package creation: Additional 1-3 minutes

### Validation Steps
Always run these validation steps after making changes:
1. `./build.ps1 --target Clean Compile` (ensures clean build)
2. `./build.ps1 --target Test` (runs all unit tests)
3. Review build output in `bin/` directory
4. Check for warnings in build output

## Project Layout and Architecture

### Repository Structure
```
LogExpert/
├── .github/ # GitHub Actions workflows
│ └── workflows/ # build_dotnet.yml, test_dotnet.yml
├── src/ # Main source directory
│ ├── LogExpert.sln # Main solution file
│ ├── LogExpert/ # Main application project
│ ├── LogExpert.Core/ # Core functionality library
│ ├── LogExpert.UI/ # UI components library
│ ├── LogExpert.Resources/ # Resource files
│ ├── ColumnizerLib/ # Plugin interface library
│ ├── Columnizers/ # Built-in columnizer plugins
│ │ ├── CsvColumnizer/
│ │ ├── JsonColumnizer/
│ │ ├── RegexColumnizer/
│ │ └── ... # Other columnizers
│ ├── Tests/ # Test projects
│ │ ├── LogExpert.Tests/
│ │ ├── ColumnizerLib.UnitTests/
│ │ └── RegexColumnizer.UnitTests/
│ └── Solution Items/ # Shared configuration files
├── build/ # Nuke build system
│ ├── Build.cs # Main build script
│ └── _build.csproj # Build project file
├── chocolatey/ # Chocolatey package configuration
├── lib/ # External libraries
├── global.json # .NET SDK version pinning
├── GitVersion.yml # Version configuration
├── Directory.Build.props # MSBuild properties
└── Directory.Packages.props # NuGet package versions
```

### Key Configuration Files
- **`global.json`**: Specifies required .NET SDK version (9.0.301)
- **`src/Directory.Build.props`**: Common MSBuild properties for all projects
- **`src/Directory.Packages.props`**: Centralized NuGet package version management
- **`.editorconfig`**: Code style and formatting rules (comprehensive 4000+ line config)
- **`GitVersion.yml`**: Semantic versioning configuration
- **`appveyor.yml`**: AppVeyor CI configuration

### Architectural Components

#### Main Application (`src/LogExpert/`)
- **`Program.cs`**: Application entry point with IPC for single-instance mode
- **Target Framework**: `net8.0-windows`
- **Dependencies**: LogExpert.UI, LogExpert.Core, ColumnizerLib, PluginRegistry

#### Core Libraries
- **`LogExpert.Core`**: Core business logic and interfaces
- **`LogExpert.UI`**: Windows Forms UI components
- **`LogExpert.Resources`**: Localization and resource files
- **`ColumnizerLib`**: Plugin interface definitions

#### Plugin System
- **Columnizers**: Parse log lines into columns (CSV, JSON, RegEx, etc.)
- **File System Plugins**: Support for different file sources (local, SFTP)
- **Plugin Discovery**: Automatic plugin loading from application directory

### CI/CD Pipeline

#### GitHub Actions
1. **`.github/workflows/build_dotnet.yml`**:
- Triggers on PR to Development branch
- Builds Debug and Release configurations
- Uploads build artifacts
- Uses windows-latest runner

2. **`.github/workflows/test_dotnet.yml`**:
- Runs on push to Development branch
- Executes unit tests
- Uses .NET 10.0.x SDK

#### AppVeyor Integration
- **`appveyor.yml`**: Legacy CI configuration
- Builds packages and publishes artifacts
- Creates setup executables with Inno Setup

### Testing Strategy
- **Unit Tests**: Located in `*Tests.csproj` projects
- **Test Frameworks**: NUnit with Moq for mocking
- **Test Data**: Located in `TestData/` directories within test projects
- **Coverage**: Focus on core functionality and columnizer plugins

### Dependencies and Libraries
Key external dependencies (managed via Directory.Packages.props):
- **NLog**: Logging framework
- **Newtonsoft.Json**: JSON processing
- **CsvHelper**: CSV file processing
- **SSH.NET**: SFTP file system support
- **DockPanelSuite**: UI docking panels
- **NUnit/Moq**: Testing frameworks

## Agent Guidance

### Making Code Changes
1. **Always build before changing**: Run `./build.ps1 --target Clean Compile Test` to establish baseline
2. **Follow existing patterns**: Study similar implementations in the codebase
3. **Respect architecture**: Use plugin interfaces for extensibility
4. **Code style**: Follow `.editorconfig` rules (extensive configuration provided)
5. **Null safety**: Project uses nullable reference types (`<Nullable>enable</Nullable>`)

### Common Development Tasks

#### Adding New Columnizer
1. Create new project in `src/` directory following naming pattern `*Columnizer`
2. Implement `ILogLineColumnizer` interface from `ColumnizerLib`
3. Add project reference to main solution
4. Add unit tests in corresponding `*Tests` project

#### Modifying UI Components
1. UI components are in `LogExpert.UI` project
2. Follow Windows Forms patterns
3. Be aware of High DPI considerations (documented in README)
4. Test on different Windows versions if possible

#### Adding Dependencies
1. Update `src/Directory.Packages.props` for version management
2. Add `<PackageReference>` in specific project files
3. Ensure compatibility with .NET 10.0 target framework

### Build Troubleshooting
- **Missing Windows SDK**: Ensure Windows development environment
- **Version conflicts**: Check `global.json` and upgrade SDK if needed
- **Plugin loading issues**: Verify plugins are copied to output directory
- **Test failures**: Check test data file paths and Windows-specific assumptions

### Important Notes
- **Windows-only**: This is a Windows-specific application using Windows Forms
- **Plugin architecture**: Extensibility through columnizer and file system plugins
- **Single instance**: Application uses named pipes for IPC between instances
- **Legacy codebase**: Contains patterns from .NET Framework era, being modernized
- **Comprehensive configuration**: Very detailed .editorconfig and analysis rules

### Trust These Instructions
These instructions are comprehensive and tested. Only search for additional information if:
1. Instructions appear incomplete for your specific task
2. You encounter errors not covered in the troubleshooting section
3. You need to understand implementation details not covered here

The build system, project structure, and development patterns described here are accurate as of the current codebase state.
72 changes: 72 additions & 0 deletions .github/workflows/build_dotnet.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: .NET Core Desktop

on:
# push:
# branches: [ "Development" ]

pull_request:
branches: [ "Development" ]
types: [opened, synchronize]

env:
Solution: src/LogExpert.sln
Test_Project_LogExpert: src/LogExpert.Tests/LogExpert.Tests.csproj
Test_Project_ColumnizerLib: src/ColumnizerLib.UnitTests/ColumnizerLib.UnitTests.csproj
Test_Project_PluginRegistry: src/PluginRegistry.Tests/PluginRegistry.Tests.csproj
Test_Project_RegexColumnizer: src/RegexColumnizer.UnitTests/RegexColumnizer.UnitTests.csproj

jobs:
build:
permissions:
contents: write # Changed to 'write' for committing
pull-requests: write # Added for PR operations

strategy:
fail-fast: false
matrix:
configuration: [Debug, Release]

runs-on: windows-latest
name: Build Application - ${{ matrix.configuration }}

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ github.head_ref }} # Checkout the PR branch

- name: Install .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x

- name: Build application
run: |
dotnet build ${{ env.Solution }} --nologo -v quiet -c ${{ matrix.configuration }}

- name: Generate Plugin Hashes
if: matrix.configuration == 'Release'
run: dotnet run --project src/PluginHashGenerator.Tool/PluginHashGenerator.Tool.csproj -- "bin/Release/" "src/PluginRegistry/PluginHashGenerator.Generated.cs" Release

- name: Commit Updated Hashes
if: matrix.configuration == 'Release'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add src/PluginRegistry/PluginHashGenerator.Generated.cs
git diff --staged --quiet
if ($LASTEXITCODE -ne 0) {
git commit -m "chore: update plugin hashes [skip ci]"
git push
} else {
Write-Host "No changes to commit"
}

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: Snapshot-${{ matrix.configuration }}
path: bin/${{ matrix.configuration }}
retention-days: 7
2 changes: 1 addition & 1 deletion .github/workflows/test_dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Restore dependencies
run: dotnet restore
working-directory: src
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,10 @@ paket-files/
# FAKE - F# Make
.fake/

# Nuke Build System
.nuke/*
!.nuke/parameters.json

# CodeRush personal settings
.cr/personal

Expand Down
Loading