diff --git a/backend/FixFwData/FixFwData.csproj b/backend/FixFwData/FixFwData.csproj
index 687b8f4cf..7c217f173 100644
--- a/backend/FixFwData/FixFwData.csproj
+++ b/backend/FixFwData/FixFwData.csproj
@@ -7,10 +7,9 @@
enable
-
-
-
-
-
+
+
+
+
+
diff --git a/backend/FixFwData/Program.cs b/backend/FixFwData/Program.cs
index 42431536a..e403836fe 100644
--- a/backend/FixFwData/Program.cs
+++ b/backend/FixFwData/Program.cs
@@ -1,2 +1,69 @@
-bool doNothing; // Basic FixFwData program that does nothing
-doNothing = true;
+// Copyright (c) 2011-2024 SIL International
+// This software is licensed under the LGPL, version 2.1 or later
+// (http://www.gnu.org/licenses/lgpl-2.1.html)
+
+using System.ComponentModel;
+using Microsoft.Extensions.Logging;
+using SIL.LCModel.FixData;
+using SIL.LCModel.Utils;
+
+namespace FixFwData;
+
+internal class Program
+{
+ private static int Main(string[] args)
+ {
+ using var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
+ logger = loggerFactory.CreateLogger("FixFwData");
+ var pathname = args[0];
+ var prog = new LoggingProgress(logger);
+ var data = new FwDataFixer(pathname, prog, logError, getErrorCount);
+ data.FixErrorsAndSave();
+ return errorsOccurred ? 1 : 0;
+ }
+
+ private static bool errorsOccurred = false;
+ private static int errorCount = 0;
+ private static ILogger? logger;
+
+ private static void logError(string description, bool errorFixed)
+ {
+ logger?.LogError(description);
+
+ errorsOccurred = true;
+ if (errorFixed)
+ ++errorCount;
+ }
+
+ private static int getErrorCount()
+ {
+ return errorCount;
+ }
+
+ private sealed class LoggingProgress(ILogger logger) : IProgress
+ {
+ public string Message { get => ""; set => logger.LogInformation(value); }
+
+ #region Do-nothing implementation of IProgress GUI methods
+ // IProgress methods required by the interface that don't make sense in a console app
+ public event CancelEventHandler? Canceling;
+ public void Step(int amount)
+ {
+ if (Canceling != null)
+ {
+ // don't do anything -- this just shuts up the compiler about the
+ // event handler never being used.
+ }
+ }
+
+ public string Title { get => ""; set { } }
+ public int Position { get; set; }
+ public int StepSize { get; set; }
+ public int Minimum { get; set; }
+ public int Maximum { get; set; }
+ public ISynchronizeInvoke? SynchronizeInvoke { get => null; private set { } }
+ public bool IsIndeterminate { get => false; set { } }
+ public bool AllowCancel { get => false; set { } }
+ #endregion
+ }
+}
diff --git a/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj b/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj
index ffd98f458..043dacd5d 100644
--- a/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj
+++ b/backend/FwLite/FwLiteDesktop/FwLiteDesktop.csproj
@@ -22,6 +22,7 @@
enable
enable
true
+ true
FieldWorks Lite
diff --git a/backend/Testing/Testing.csproj b/backend/Testing/Testing.csproj
index 797c22891..04fa2ae8c 100644
--- a/backend/Testing/Testing.csproj
+++ b/backend/Testing/Testing.csproj
@@ -38,7 +38,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive