diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..9af10ce03
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,34 @@
+name: build-test
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ build:
+ timeout-minutes: 30
+ runs-on: windows-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: '0'
+
+ - name: Build project
+ run: dotnet build --configuration Release
+
+ - name: Test project
+ continue-on-error: true
+ run: dotnet test --filter "TestCategory != SkipOnTeamCity" --logger:"trx;LogFilePrefix=results" --results-directory ./test-results
+
+ - name: Publish test results
+ uses: EnricoMi/publish-unit-test-result-action/windows@v2
+ with:
+ check_name: LibPalaso Tests
+ files: ./test-results/**/*.trx
+ action_fail: true
+ action_fail_on_inconclusive: true
\ No newline at end of file
diff --git a/ExtractCopyright.Tests/ExtractCopyright.Tests.csproj b/ExtractCopyright.Tests/ExtractCopyright.Tests.csproj
index d7471589a..3acf03217 100644
--- a/ExtractCopyright.Tests/ExtractCopyright.Tests.csproj
+++ b/ExtractCopyright.Tests/ExtractCopyright.Tests.csproj
@@ -8,9 +8,10 @@
+
-
+
diff --git a/SIL.Archiving.Tests/SIL.Archiving.Tests.csproj b/SIL.Archiving.Tests/SIL.Archiving.Tests.csproj
index 7e717f625..6a4af6349 100644
--- a/SIL.Archiving.Tests/SIL.Archiving.Tests.csproj
+++ b/SIL.Archiving.Tests/SIL.Archiving.Tests.csproj
@@ -10,10 +10,11 @@
+
-
+
diff --git a/SIL.Archiving/SIL.Archiving.csproj b/SIL.Archiving/SIL.Archiving.csproj
index 1e913a81c..8f89ba13c 100644
--- a/SIL.Archiving/SIL.Archiving.csproj
+++ b/SIL.Archiving/SIL.Archiving.csproj
@@ -16,6 +16,8 @@
+
+
diff --git a/SIL.Core.Desktop.Tests/SIL.Core.Desktop.Tests.csproj b/SIL.Core.Desktop.Tests/SIL.Core.Desktop.Tests.csproj
index aed145a31..f29c5cfb6 100644
--- a/SIL.Core.Desktop.Tests/SIL.Core.Desktop.Tests.csproj
+++ b/SIL.Core.Desktop.Tests/SIL.Core.Desktop.Tests.csproj
@@ -8,10 +8,11 @@
+
-
+
diff --git a/SIL.Core.Tests/SIL.Core.Tests.csproj b/SIL.Core.Tests/SIL.Core.Tests.csproj
index ba28b5c8a..04becc466 100644
--- a/SIL.Core.Tests/SIL.Core.Tests.csproj
+++ b/SIL.Core.Tests/SIL.Core.Tests.csproj
@@ -8,10 +8,11 @@
+
-
+
diff --git a/SIL.DblBundle.Tests/SIL.DblBundle.Tests.csproj b/SIL.DblBundle.Tests/SIL.DblBundle.Tests.csproj
index 5ad318332..be14c797f 100644
--- a/SIL.DblBundle.Tests/SIL.DblBundle.Tests.csproj
+++ b/SIL.DblBundle.Tests/SIL.DblBundle.Tests.csproj
@@ -7,11 +7,12 @@
+
-
+
diff --git a/SIL.DictionaryServices.Tests/SIL.DictionaryServices.Tests.csproj b/SIL.DictionaryServices.Tests/SIL.DictionaryServices.Tests.csproj
index caf9a6643..11967c049 100644
--- a/SIL.DictionaryServices.Tests/SIL.DictionaryServices.Tests.csproj
+++ b/SIL.DictionaryServices.Tests/SIL.DictionaryServices.Tests.csproj
@@ -8,9 +8,10 @@
+
-
+
diff --git a/SIL.Lexicon.Tests/SIL.Lexicon.Tests.csproj b/SIL.Lexicon.Tests/SIL.Lexicon.Tests.csproj
index 3ef68977e..1a8105b1d 100644
--- a/SIL.Lexicon.Tests/SIL.Lexicon.Tests.csproj
+++ b/SIL.Lexicon.Tests/SIL.Lexicon.Tests.csproj
@@ -8,9 +8,10 @@
+
-
+
diff --git a/SIL.Lift.Tests/SIL.Lift.Tests.csproj b/SIL.Lift.Tests/SIL.Lift.Tests.csproj
index ae9ad4f0e..23d1db719 100644
--- a/SIL.Lift.Tests/SIL.Lift.Tests.csproj
+++ b/SIL.Lift.Tests/SIL.Lift.Tests.csproj
@@ -8,10 +8,11 @@
+
-
+
diff --git a/SIL.Linux.Logging.Tests/SIL.Linux.Logging.Tests.csproj b/SIL.Linux.Logging.Tests/SIL.Linux.Logging.Tests.csproj
index c68a40773..5cda4581c 100644
--- a/SIL.Linux.Logging.Tests/SIL.Linux.Logging.Tests.csproj
+++ b/SIL.Linux.Logging.Tests/SIL.Linux.Logging.Tests.csproj
@@ -8,9 +8,10 @@
+
-
+
diff --git a/SIL.Media.Tests/SIL.Media.Tests.csproj b/SIL.Media.Tests/SIL.Media.Tests.csproj
index 65c2cc5a6..4d405e5b8 100644
--- a/SIL.Media.Tests/SIL.Media.Tests.csproj
+++ b/SIL.Media.Tests/SIL.Media.Tests.csproj
@@ -13,11 +13,12 @@
+
-
+
diff --git a/SIL.Media/SIL.Media.csproj b/SIL.Media/SIL.Media.csproj
index 1f7874bc8..7e3df89cb 100644
--- a/SIL.Media/SIL.Media.csproj
+++ b/SIL.Media/SIL.Media.csproj
@@ -21,6 +21,8 @@
+
+
diff --git a/SIL.Scripture.Tests/SIL.Scripture.Tests.csproj b/SIL.Scripture.Tests/SIL.Scripture.Tests.csproj
index 41605e9f3..bb22ebcb0 100644
--- a/SIL.Scripture.Tests/SIL.Scripture.Tests.csproj
+++ b/SIL.Scripture.Tests/SIL.Scripture.Tests.csproj
@@ -7,10 +7,11 @@
+
-
+
diff --git a/SIL.TestUtilities.Tests/SIL.TestUtilities.Tests.csproj b/SIL.TestUtilities.Tests/SIL.TestUtilities.Tests.csproj
index 1acc68128..92016a952 100644
--- a/SIL.TestUtilities.Tests/SIL.TestUtilities.Tests.csproj
+++ b/SIL.TestUtilities.Tests/SIL.TestUtilities.Tests.csproj
@@ -8,9 +8,10 @@
+
-
+
diff --git a/SIL.Windows.Forms.Keyboarding.Tests/SIL.Windows.Forms.Keyboarding.Tests.csproj b/SIL.Windows.Forms.Keyboarding.Tests/SIL.Windows.Forms.Keyboarding.Tests.csproj
index e50565083..a4fa46ae3 100644
--- a/SIL.Windows.Forms.Keyboarding.Tests/SIL.Windows.Forms.Keyboarding.Tests.csproj
+++ b/SIL.Windows.Forms.Keyboarding.Tests/SIL.Windows.Forms.Keyboarding.Tests.csproj
@@ -7,12 +7,13 @@
+
-
+
diff --git a/SIL.Windows.Forms.Scripture.Tests/SIL.Windows.Forms.Scripture.Tests.csproj b/SIL.Windows.Forms.Scripture.Tests/SIL.Windows.Forms.Scripture.Tests.csproj
index f93d4b9c9..51ba88ea6 100644
--- a/SIL.Windows.Forms.Scripture.Tests/SIL.Windows.Forms.Scripture.Tests.csproj
+++ b/SIL.Windows.Forms.Scripture.Tests/SIL.Windows.Forms.Scripture.Tests.csproj
@@ -10,9 +10,10 @@
+
-
+
diff --git a/SIL.Windows.Forms.Tests/SIL.Windows.Forms.Tests.csproj b/SIL.Windows.Forms.Tests/SIL.Windows.Forms.Tests.csproj
index 8a6c4bae6..7d3c9e493 100644
--- a/SIL.Windows.Forms.Tests/SIL.Windows.Forms.Tests.csproj
+++ b/SIL.Windows.Forms.Tests/SIL.Windows.Forms.Tests.csproj
@@ -22,11 +22,12 @@
+
-
+
diff --git a/SIL.Windows.Forms.WritingSystems.Tests/SIL.Windows.Forms.WritingSystems.Tests.csproj b/SIL.Windows.Forms.WritingSystems.Tests/SIL.Windows.Forms.WritingSystems.Tests.csproj
index 3be9aa2d8..b40da9856 100644
--- a/SIL.Windows.Forms.WritingSystems.Tests/SIL.Windows.Forms.WritingSystems.Tests.csproj
+++ b/SIL.Windows.Forms.WritingSystems.Tests/SIL.Windows.Forms.WritingSystems.Tests.csproj
@@ -10,12 +10,13 @@
+
-
+
diff --git a/SIL.Windows.Forms/SIL.Windows.Forms.csproj b/SIL.Windows.Forms/SIL.Windows.Forms.csproj
index ca150f590..cb3249148 100644
--- a/SIL.Windows.Forms/SIL.Windows.Forms.csproj
+++ b/SIL.Windows.Forms/SIL.Windows.Forms.csproj
@@ -23,6 +23,8 @@
+
+
diff --git a/SIL.WritingSystems.Tests/SIL.WritingSystems.Tests.csproj b/SIL.WritingSystems.Tests/SIL.WritingSystems.Tests.csproj
index dfb75fc9b..aacbeb73d 100644
--- a/SIL.WritingSystems.Tests/SIL.WritingSystems.Tests.csproj
+++ b/SIL.WritingSystems.Tests/SIL.WritingSystems.Tests.csproj
@@ -5,12 +5,13 @@
+
-
+
diff --git a/SIL.WritingSystems/SIL.WritingSystems.csproj b/SIL.WritingSystems/SIL.WritingSystems.csproj
index a8e7bd61c..ca4f1b81b 100644
--- a/SIL.WritingSystems/SIL.WritingSystems.csproj
+++ b/SIL.WritingSystems/SIL.WritingSystems.csproj
@@ -15,6 +15,8 @@
+
+