diff --git a/src/LogExpert.Tests/UI/PaintHelperTests.cs b/src/LogExpert.Tests/UI/PaintHelperTests.cs new file mode 100644 index 00000000..b15707fe --- /dev/null +++ b/src/LogExpert.Tests/UI/PaintHelperTests.cs @@ -0,0 +1,198 @@ +using System.Runtime.Versioning; + +using LogExpert.Core.Classes.Highlight; +using LogExpert.UI.Entities; + +using NUnit.Framework; + +namespace LogExpert.Tests.UI; + +[TestFixture] +[Apartment(ApartmentState.STA)] // Required for WinForms components +[SupportedOSPlatform("windows")] +public class PaintHelperTests +{ + [Test] + public void ApplyGridViewTheme_DarkMode_DisablesHeaderVisualStyles () + { + // With EnableHeadersVisualStyles = true the column headers are painted by the + // Windows visual-style renderer, which only exists in a light flavor and + // ignores Application.SetColorMode(Dark). + using DataGridView gridView = new(); + + PaintHelper.ApplyGridViewTheme(gridView, darkMode: true); + + Assert.That(gridView.EnableHeadersVisualStyles, Is.False); + } + + [Test] + public void ApplyGridViewTheme_LightMode_KeepsHeaderVisualStyles () + { + using DataGridView gridView = new(); + + PaintHelper.ApplyGridViewTheme(gridView, darkMode: false); + + Assert.That(gridView.EnableHeadersVisualStyles, Is.True); + } + + [Test] + public void GetBackColorFromHighlightEntry_NoEntryInDarkMode_FallsBackToDarkColor () + { + // A line matching no highlight rule must not get the light-mode white background. + var backColor = PaintHelper.GetBackColorFromHighlightEntry(null, darkMode: true); + + Assert.That(IsDark(backColor), Is.True, $"expected a dark fallback color but got {backColor}"); + } + + [Test] + public void GetBackColorFromHighlightEntry_NoEntryInLightMode_FallsBackToWhite () + { + var backColor = PaintHelper.GetBackColorFromHighlightEntry(null, darkMode: false); + + Assert.That(backColor, Is.EqualTo(Color.White)); + } + + [Test] + public void GetBackColorFromHighlightEntry_EntryColor_WinsOverTheme () + { + var entry = new HighlightEntry { BackgroundColor = Color.Red }; + + Assert.Multiple(() => + { + Assert.That(PaintHelper.GetBackColorFromHighlightEntry(entry, darkMode: true), Is.EqualTo(Color.Red)); + Assert.That(PaintHelper.GetBackColorFromHighlightEntry(entry, darkMode: false), Is.EqualTo(Color.Red)); + }); + } + + [Test] + public void GetForeColorFromHighlightEntry_NoEntryInDarkMode_FallsBackToLightColor () + { + var foreColor = PaintHelper.GetForeColorFromHighlightEntry(null, darkMode: true); + + Assert.That(IsLight(foreColor), Is.True, $"expected a light fallback color but got {foreColor}"); + } + + [Test] + public void GetForeColorFromHighlightEntry_NoEntryInLightMode_FallsBackToBlack () + { + var foreColor = PaintHelper.GetForeColorFromHighlightEntry(null, darkMode: false); + + Assert.That(foreColor, Is.EqualTo(Color.Black)); + } + + [Test] + public void GetForeColorFromHighlightEntry_EntryColor_WinsOverTheme () + { + var entry = new HighlightEntry { ForegroundColor = Color.Red }; + + Assert.Multiple(() => + { + Assert.That(PaintHelper.GetForeColorFromHighlightEntry(entry, darkMode: true), Is.EqualTo(Color.Red)); + Assert.That(PaintHelper.GetForeColorFromHighlightEntry(entry, darkMode: false), Is.EqualTo(Color.Red)); + }); + } + + [Test] + public void GetForeColorFromHighlightEntry_EntryWithoutForeColor_FallsBackToTheme () + { + // HighlightEntry.ForegroundColor defaults to Color.Empty ("not set"). + var entry = new HighlightEntry(); + + Assert.Multiple(() => + { + Assert.That(IsLight(PaintHelper.GetForeColorFromHighlightEntry(entry, darkMode: true)), Is.True); + Assert.That(PaintHelper.GetForeColorFromHighlightEntry(entry, darkMode: false), Is.EqualTo(Color.Black)); + }); + } + + [Test] + public void GetDataGridViewCellStyle_DarkMode_UsesLightForeColor () + { + var style = PaintHelper.GetDataGridViewCellStyle(darkMode: true); + + Assert.That(IsLight(style.ForeColor), Is.True, $"expected a light fore color but got {style.ForeColor}"); + } + + [Test] + public void GetDataGridViewCellStyle_LightMode_UsesDarkForeColor () + { + var style = PaintHelper.GetDataGridViewCellStyle(darkMode: false); + + Assert.That(IsDark(style.ForeColor), Is.True, $"expected a dark fore color but got {style.ForeColor}"); + } + + [Test] + public void GetDataGridDefaultRowStyle_DarkMode_UsesLightForeColor () + { + var style = PaintHelper.GetDataGridDefaultRowStyle(darkMode: true); + + Assert.That(IsLight(style.ForeColor), Is.True, $"expected a light fore color but got {style.ForeColor}"); + } + + [Test] + public void GetDataGridDefaultRowStyle_LightMode_UsesDarkForeColor () + { + var style = PaintHelper.GetDataGridDefaultRowStyle(darkMode: false); + + Assert.That(IsDark(style.ForeColor), Is.True, $"expected a dark fore color but got {style.ForeColor}"); + } + + [Test] + public void GetBrushForFocusedControl_UnfocusedDarkMode_UsesDarkGray () + { + using var brush = (SolidBrush)PaintHelper.GetBrushForFocusedControl(focused: false, SystemColors.Highlight, darkMode: true); + + Assert.That(IsDark(brush.Color), Is.True, $"expected a dark unfocused-selection color but got {brush.Color}"); + } + + [Test] + public void GetBrushForFocusedControl_UnfocusedLightMode_KeepsLightGray () + { + using var brush = (SolidBrush)PaintHelper.GetBrushForFocusedControl(focused: false, SystemColors.Highlight, darkMode: false); + + Assert.That(brush.Color.ToArgb(), Is.EqualTo(Color.FromArgb(255, 170, 170, 170).ToArgb())); + } + + [Test] + public void GetBrushForFocusedControl_Focused_UsesSelectionColor () + { + using var brushDark = (SolidBrush)PaintHelper.GetBrushForFocusedControl(focused: true, Color.Teal, darkMode: true); + using var brushLight = (SolidBrush)PaintHelper.GetBrushForFocusedControl(focused: true, Color.Teal, darkMode: false); + + Assert.Multiple(() => + { + Assert.That(brushDark.Color, Is.EqualTo(Color.Teal)); + Assert.That(brushLight.Color, Is.EqualTo(Color.Teal)); + }); + } + + [Test] + public void ApplyTabControlTheme_DarkMode_DisablesVisualStyleBackColorOnAllPages () + { + // With UseVisualStyleBackColor = true the tab page body is painted by the + // light-only visual-style renderer while child controls inherit the dark + // ambient color, giving light pages with dark patches in dark mode. + using TabControl tabControl = new(); + tabControl.TabPages.Add(new TabPage { UseVisualStyleBackColor = true }); + tabControl.TabPages.Add(new TabPage { UseVisualStyleBackColor = true }); + + PaintHelper.ApplyTabControlTheme(tabControl, darkMode: true); + + Assert.That(tabControl.TabPages.Cast().Select(p => p.UseVisualStyleBackColor), Is.All.False); + } + + [Test] + public void ApplyTabControlTheme_LightMode_KeepsVisualStyleBackColor () + { + using TabControl tabControl = new(); + tabControl.TabPages.Add(new TabPage { UseVisualStyleBackColor = true }); + + PaintHelper.ApplyTabControlTheme(tabControl, darkMode: false); + + Assert.That(tabControl.TabPages[0].UseVisualStyleBackColor, Is.True); + } + + private static bool IsDark (Color color) => color.R < 128 && color.G < 128 && color.B < 128; + + private static bool IsLight (Color color) => color.R >= 128 && color.G >= 128 && color.B >= 128; +} diff --git a/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs b/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs index 206ce17b..bead496e 100644 --- a/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs +++ b/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs @@ -2410,10 +2410,13 @@ private void MeasureItem (object sender, MeasureItemEventArgs e) [SupportedOSPlatform("windows")] private void CreateDefaultViewStyle () { - dataGridView.DefaultCellStyle = PaintHelper.GetDataGridViewCellStyle(); - filterGridView.DefaultCellStyle = PaintHelper.GetDataGridViewCellStyle(); - dataGridView.RowsDefaultCellStyle = PaintHelper.GetDataGridDefaultRowStyle(); - filterGridView.RowsDefaultCellStyle = PaintHelper.GetDataGridDefaultRowStyle(); + var darkMode = Application.IsDarkModeEnabled; + dataGridView.DefaultCellStyle = PaintHelper.GetDataGridViewCellStyle(darkMode); + filterGridView.DefaultCellStyle = PaintHelper.GetDataGridViewCellStyle(darkMode); + dataGridView.RowsDefaultCellStyle = PaintHelper.GetDataGridDefaultRowStyle(darkMode); + filterGridView.RowsDefaultCellStyle = PaintHelper.GetDataGridDefaultRowStyle(darkMode); + PaintHelper.ApplyGridViewTheme(dataGridView, darkMode); + PaintHelper.ApplyGridViewTheme(filterGridView, darkMode); } [SupportedOSPlatform("windows")] @@ -3591,7 +3594,7 @@ private void PaintHighlightedCell (DataGridViewCellPaintingEventArgs e, Highligh var he = new HighlightEntry { SearchText = column.DisplayValue.ToString(), - ForegroundColor = groundEntry?.ForegroundColor ?? Color.FromKnownColor(KnownColor.Black), + ForegroundColor = PaintHelper.GetForeColorFromHighlightEntry(groundEntry, Application.IsDarkModeEnabled), BackgroundColor = groundEntry?.BackgroundColor ?? Color.Empty, IsWordMatch = true }; @@ -6902,12 +6905,12 @@ public void CellPainting (bool focused, int rowIndex, int columnIndex, bool isFi if (e.State.HasFlag(DataGridViewElementStates.Selected)) { - using var brush = PaintHelper.GetBrushForFocusedControl(focused, e.CellStyle.SelectionBackColor); + using var brush = PaintHelper.GetBrushForFocusedControl(focused, e.CellStyle.SelectionBackColor, Application.IsDarkModeEnabled); e.Graphics.FillRectangle(brush, e.CellBounds); } else { - e.CellStyle.BackColor = PaintHelper.GetBackColorFromHighlightEntry(entry); + e.CellStyle.BackColor = PaintHelper.GetBackColorFromHighlightEntry(entry, Application.IsDarkModeEnabled); e.PaintBackground(e.ClipBounds, false); } diff --git a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs index 3ad5a813..d4e07c61 100644 --- a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs +++ b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs @@ -304,6 +304,16 @@ public LogWindow.LogWindow AddTempFileTab (string fileName, string title) private void ConfigureDockPanel () { + if (Application.IsDarkModeEnabled) + { + var darkTheme = new VS2015DarkTheme(); + dockPanel.Theme = darkTheme; + dockPanel.DockBackColor = darkTheme.ColorPalette.MainWindowActive.Background; + dockPanel.ActiveAutoHideContent = null; + dockPanel.DocumentStyle = DocumentStyle.DockingWindow; + return; + } + var autoHideStripSkin1 = new AutoHideStripSkin(); var dockPanelGradient1 = new DockPanelGradient(); var tabGradient1 = new TabGradient(); diff --git a/src/LogExpert.UI/Dialogs/SettingsDialog.cs b/src/LogExpert.UI/Dialogs/SettingsDialog.cs index 5432af0f..580b2a63 100644 --- a/src/LogExpert.UI/Dialogs/SettingsDialog.cs +++ b/src/LogExpert.UI/Dialogs/SettingsDialog.cs @@ -14,6 +14,7 @@ using LogExpert.UI.Controls.LogTabWindow; using LogExpert.UI.Dialogs; using LogExpert.UI.Dialogs.Helpers; +using LogExpert.UI.Entities; using LogExpert.UI.Extensions; namespace LogExpert.Dialogs; @@ -75,6 +76,12 @@ private SettingsDialog (Preferences prefs, LogTabWindow logTabWin) InitializeComponent(); + var darkMode = Application.IsDarkModeEnabled; + PaintHelper.ApplyTabControlTheme(tabControlSettings, darkMode); + PaintHelper.ApplyGridViewTheme(dataGridViewColumnizer, darkMode); + PaintHelper.ApplyGridViewTheme(dataGridViewHighlightMask, darkMode); + PaintHelper.ApplyGridViewTheme(dataGridViewControlChars, darkMode); + dataGridViewImageColumnColumnizerStale.CellTemplate = new EmptyImageCell(); LoadResources(); diff --git a/src/LogExpert.UI/Entities/PaintHelper.cs b/src/LogExpert.UI/Entities/PaintHelper.cs index 35bd457e..a3425ea5 100644 --- a/src/LogExpert.UI/Entities/PaintHelper.cs +++ b/src/LogExpert.UI/Entities/PaintHelper.cs @@ -46,12 +46,12 @@ public static void CellPainting (ILogPaintContextUI logPaintCtx, bool focused, i if (e.State.HasFlag(DataGridViewElementStates.Selected)) { - using var brush = GetBrushForFocusedControl(focused, e.CellStyle.SelectionBackColor); + using var brush = GetBrushForFocusedControl(focused, e.CellStyle.SelectionBackColor, Application.IsDarkModeEnabled); e.Graphics.FillRectangle(brush, e.CellBounds); } else { - e.CellStyle.BackColor = GetBackColorFromHighlightEntry(entry); + e.CellStyle.BackColor = GetBackColorFromHighlightEntry(entry, Application.IsDarkModeEnabled); e.PaintBackground(e.ClipBounds, false); } @@ -89,17 +89,35 @@ public static void CellPainting (ILogPaintContextUI logPaintCtx, bool focused, i } } - public static Color GetBackColorFromHighlightEntry (HighlightEntry? entry) + // Matches what SystemColors.Window resolves to under Application.SetColorMode(Dark). + private static readonly Color _darkModeWindowBackColor = Color.FromArgb(32, 32, 32); + + public static Color GetBackColorFromHighlightEntry (HighlightEntry? entry, bool darkMode) + { + return entry?.BackgroundColor ?? (darkMode ? _darkModeWindowBackColor : Color.White); + } + + public static Color GetForeColorFromHighlightEntry (HighlightEntry? entry, bool darkMode) { - return entry?.BackgroundColor ?? Color.White; + if (entry != null && entry.ForegroundColor != Color.Empty) + { + return entry.ForegroundColor; + } + + return darkMode ? Color.White : Color.Black; } [SupportedOSPlatform("windows")] - public static Brush GetBrushForFocusedControl (bool focused, Color selectionColor) + public static Brush GetBrushForFocusedControl (bool focused, Color selectionColor, bool darkMode) { - return focused - ? new SolidBrush(selectionColor) - : new SolidBrush(Color.FromArgb(255, 170, 170, 170)); //Gray + if (focused) + { + return new SolidBrush(selectionColor); + } + + return darkMode + ? new SolidBrush(Color.FromArgb(255, 90, 90, 90)) // dark gray + : new SolidBrush(Color.FromArgb(255, 170, 170, 170)); // light gray } [SupportedOSPlatform("windows")] @@ -152,6 +170,8 @@ public static DataGridViewColumn CreateTitleColumn (string colName) [SupportedOSPlatform("windows")] public static void SetColumnizer (ILogLineMemoryColumnizer columnizer, BufferedDataGridView gridView) { + ApplyGridViewTheme(gridView, Application.IsDarkModeEnabled); + var rowCount = gridView.RowCount; var currLine = gridView.CurrentCellAddress.Y; var currFirstLine = gridView.FirstDisplayedScrollingRowIndex; @@ -232,14 +252,14 @@ public static Color GetForeColorBasedOnBackColor (Color backColor) //TODO Make this configurable => this should close https://github.com/LogExperts/LogExpert/issues/85 [SupportedOSPlatform("windows")] - public static DataGridViewCellStyle GetDataGridViewCellStyle () + public static DataGridViewCellStyle GetDataGridViewCellStyle (bool darkMode) { return new() { Alignment = DataGridViewContentAlignment.MiddleLeft, BackColor = SystemColors.Window, Font = new Font("Courier New", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0), - ForeColor = Color.White, + ForeColor = darkMode ? Color.White : Color.Black, SelectionBackColor = SystemColors.Highlight, SelectionForeColor = GetForeColorBasedOnBackColor(SystemColors.Highlight), WrapMode = DataGridViewTriState.False @@ -248,20 +268,53 @@ public static DataGridViewCellStyle GetDataGridViewCellStyle () //TODO Make this configurable => this should close https://github.com/LogExperts/LogExpert/issues/85 [SupportedOSPlatform("windows")] - public static DataGridViewCellStyle GetDataGridDefaultRowStyle () + public static DataGridViewCellStyle GetDataGridDefaultRowStyle (bool darkMode) { return new DataGridViewCellStyle { Alignment = DataGridViewContentAlignment.MiddleLeft, BackColor = SystemColors.Window, Font = new Font("Courier New", 8.25F, FontStyle.Regular, GraphicsUnit.Point, 0), - ForeColor = Color.Black, + ForeColor = darkMode ? Color.White : Color.Black, SelectionBackColor = SystemColors.Highlight, SelectionForeColor = GetForeColorBasedOnBackColor(SystemColors.Highlight), WrapMode = DataGridViewTriState.False }; } + /// + /// Applies theme-dependent settings to a grid. With visual styles enabled the column + /// headers are painted by the Windows visual-style renderer, which only exists in a + /// light flavor and ignores Application.SetColorMode. Disabling them makes the + /// headers fall back to ColumnHeadersDefaultCellStyle, whose defaults are + /// dark-mode-aware system colors. + /// + [SupportedOSPlatform("windows")] + public static void ApplyGridViewTheme (DataGridView gridView, bool darkMode) + { + gridView.EnableHeadersVisualStyles = !darkMode; + } + + /// + /// Applies theme-dependent settings to a tab control. With + /// UseVisualStyleBackColor enabled the tab page body is painted by the + /// light-only visual-style renderer while child controls inherit the dark ambient + /// color, giving light pages with dark patches in dark mode. + /// + [SupportedOSPlatform("windows")] + public static void ApplyTabControlTheme (TabControl tabControl, bool darkMode) + { + if (!darkMode) + { + return; + } + + foreach (TabPage page in tabControl.TabPages) + { + page.UseVisualStyleBackColor = false; + } + } + [SupportedOSPlatform("windows")] public static void ApplyDataGridViewPrefs (BufferedDataGridView dataGridView, bool setLastColumnWidht, int lastColumnWidth) { @@ -351,9 +404,8 @@ private static void PaintHighlightedCell (ILogPaintContextUI logPaintCtx, DataGr var he = new HighlightEntry { SearchText = column.FullValue.ToString(), - //TODO change to white if the background color is darker BackgroundColor = groundEntry?.BackgroundColor ?? Color.Empty, - ForegroundColor = groundEntry?.ForegroundColor ?? Color.FromKnownColor(KnownColor.Black), + ForegroundColor = GetForeColorFromHighlightEntry(groundEntry, Application.IsDarkModeEnabled), IsRegex = false, IsCaseSensitive = false, IsLedSwitch = false, diff --git a/src/PluginRegistry/PluginHashGenerator.Generated.cs b/src/PluginRegistry/PluginHashGenerator.Generated.cs index a442ef7d..5f1cb401 100644 --- a/src/PluginRegistry/PluginHashGenerator.Generated.cs +++ b/src/PluginRegistry/PluginHashGenerator.Generated.cs @@ -10,7 +10,7 @@ public static partial class PluginValidator { /// /// Gets pre-calculated SHA256 hashes for built-in plugins. - /// Generated: 2026-07-09 10:00:39 UTC + /// Generated: 2026-07-09 13:31:31 UTC /// Configuration: Release /// Plugin count: 21 /// @@ -18,27 +18,27 @@ public static Dictionary GetBuiltInPluginHashes() { return new Dictionary(StringComparer.OrdinalIgnoreCase) { - ["AutoColumnizer.dll"] = "9AE096A54D4B084266B4F7453887D03DB80FFD0EB4188982EA7CA39D5749DAE2", + ["AutoColumnizer.dll"] = "F1F2DC47E77D7D53F36BDF7C49A4B011C1D9C9445D55F8F9076FF0049F800758", ["BouncyCastle.Cryptography.dll"] = "E5EEAF6D263C493619982FD3638E6135077311D08C961E1FE128F9107D29EBC6", ["BouncyCastle.Cryptography.dll (x86)"] = "E5EEAF6D263C493619982FD3638E6135077311D08C961E1FE128F9107D29EBC6", - ["CsvColumnizer.dll"] = "21E681DD238038F026E79DD15BE9A34158D7C087BD60E7D8893BB710E5D7F566", - ["CsvColumnizer.dll (x86)"] = "21E681DD238038F026E79DD15BE9A34158D7C087BD60E7D8893BB710E5D7F566", - ["DefaultPlugins.dll"] = "8ED4B39B5A54A43A8C74BF6AF88D042C36B276EF13B8F670F12A7BE7B621A657", - ["FlashIconHighlighter.dll"] = "F2AED996E9F56F91014E9CFA2DC94F5F69FD6F365326382A7EBACA119770F224", - ["GlassfishColumnizer.dll"] = "571DCF5E49E39ABB8A439C7AE19DA58088E4ADBBEDE07B20D97AB983AE2E982D", - ["JsonColumnizer.dll"] = "A5161C33CA4912456CDBDEC742ADFDDFF592F15C80655B6F89BC8C322E77A395", - ["JsonCompactColumnizer.dll"] = "7DBC4C1C715AD8ADC32297AE415D50741CBE949E4180F87ACBA4DB4FFB491A96", - ["Log4jXmlColumnizer.dll"] = "BD3C1D71967A364C4666B3CDA4738C85677E42800C6364BC03768507F57FB624", - ["LogExpert.Resources.dll"] = "F7C7E2291D4CDB72C775B08D8E33637C1681B9557D24D3F214A8D3EFBDDEF875", + ["CsvColumnizer.dll"] = "AE76D824E4FA7C22430D44E2908F6280DCF6EEF60421AC941F0629CD3C2EFA1B", + ["CsvColumnizer.dll (x86)"] = "AE76D824E4FA7C22430D44E2908F6280DCF6EEF60421AC941F0629CD3C2EFA1B", + ["DefaultPlugins.dll"] = "13A1110029941B0AD680C9A612E8915E0B5C41867E46271E6B27E4FEA4A99567", + ["FlashIconHighlighter.dll"] = "F572E5ECD91CD0C06801C14B1B80BE1084BA227EFCC75498E5DC2E7D85A070B6", + ["GlassfishColumnizer.dll"] = "78ED9C9C15FC2B882BE0090C9925206D3F5E421CE3E81902EF8BA3188466E94F", + ["JsonColumnizer.dll"] = "ED065D921ACE1C5E46933B5BD0B7CBFEF70D3D06F06A760C985CF9D6748B547B", + ["JsonCompactColumnizer.dll"] = "246CB3F50CCE4A0812050C905D773F5FFA98C853448FDEC2EF9238F81DEB14B1", + ["Log4jXmlColumnizer.dll"] = "B1FA5347C1CD897B579FE05C6ADD41CCEE580328063CB32F99D2184F94D36D48", + ["LogExpert.Resources.dll"] = "6D842E513DC8616900AF1458F8799D5E749B251CD281FB3E14C0C225EE48D040", ["Microsoft.Extensions.DependencyInjection.Abstractions.dll"] = "67FA4325000DB017DC0C35829B416F024F042D24EFB868BCF17A895EE6500A93", ["Microsoft.Extensions.DependencyInjection.Abstractions.dll (x86)"] = "67FA4325000DB017DC0C35829B416F024F042D24EFB868BCF17A895EE6500A93", ["Microsoft.Extensions.Logging.Abstractions.dll"] = "BB853130F5AFAF335BE7858D661F8212EC653835100F5A4E3AA2C66A4D4F685D", ["Microsoft.Extensions.Logging.Abstractions.dll (x86)"] = "BB853130F5AFAF335BE7858D661F8212EC653835100F5A4E3AA2C66A4D4F685D", - ["RegexColumnizer.dll"] = "456A2DBC538DCA15EB8135AE1D4CD990CEF07718331C281789ECDE6591C730B7", - ["SftpFileSystem.dll"] = "E0E304E9D1C957CF4E4A0C2EBD7C2D78F96A4D9133779E7E06AA70820DBDFCF2", - ["SftpFileSystem.dll (x86)"] = "E945D67FB8034C5FADE385EE76BBCDE3D09AF5322CE5D8B36E2B00E81B77728B", - ["SftpFileSystem.Resources.dll"] = "860BB8CC374983BDA9D0BEC8CE6A7E227FC9AA7DC68F47E21608C8BCD15E13ED", - ["SftpFileSystem.Resources.dll (x86)"] = "860BB8CC374983BDA9D0BEC8CE6A7E227FC9AA7DC68F47E21608C8BCD15E13ED", + ["RegexColumnizer.dll"] = "4DC5B66DCD8B722C35DF01AB07388D5723D0C4EC2A8D8860C28ACCE127588981", + ["SftpFileSystem.dll"] = "10A371D93A95C985270DDC912BC01AF2BE8D7AAA7705C6622EB2AF96FD3AB17B", + ["SftpFileSystem.dll (x86)"] = "70F6B8AA1FD98F3BB62D3B8A5D3000E2840F6F783693215083D6E014B0ED8D33", + ["SftpFileSystem.Resources.dll"] = "45A3D1C54734819BAD2CFE2245CE2CEE664B9E6401E9F1BEF4B2955BEF0C307F", + ["SftpFileSystem.Resources.dll (x86)"] = "45A3D1C54734819BAD2CFE2245CE2CEE664B9E6401E9F1BEF4B2955BEF0C307F", }; }