diff --git a/Dockerfile b/Dockerfile
index b1403a9..a7902b6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0 AS build
ARG TARGETARCH
WORKDIR /tmp
@@ -22,6 +22,7 @@ RUN dotnet add package FSharp.Core -v 6.0.1
RUN dotnet add package FSharp.Core -v 7.0.400
RUN dotnet add package FSharp.Core -v 8.0.101
RUN dotnet add package FSharp.Core -v 8.0.403
+RUN dotnet add package FSharp.Core -v 9.0.201
RUN dotnet add package FParsec -v 1.1.1
RUN dotnet add package FsToolkit.ErrorHandling -v 4.15.2
@@ -36,7 +37,7 @@ COPY src/Exercism.TestRunner.FSharp/ ./
RUN dotnet publish -a $TARGETARCH -c Release -o /opt/test-runner --no-restore
# Build runtime image
-FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS runtime
+FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0 AS runtime
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
ENV DOTNET_ROLL_FORWARD=Major
diff --git a/src/Exercism.TestRunner.FSharp/Exercism.TestRunner.FSharp.fsproj b/src/Exercism.TestRunner.FSharp/Exercism.TestRunner.FSharp.fsproj
index 4a11039..9533b48 100644
--- a/src/Exercism.TestRunner.FSharp/Exercism.TestRunner.FSharp.fsproj
+++ b/src/Exercism.TestRunner.FSharp/Exercism.TestRunner.FSharp.fsproj
@@ -2,7 +2,7 @@
Exe
- net8.0
+ net9.0
@@ -23,7 +23,7 @@
-
+
diff --git a/src/Exercism.TestRunner.FSharp/Rewrite.fs b/src/Exercism.TestRunner.FSharp/Rewrite.fs
index 0cf2379..e9e2510 100644
--- a/src/Exercism.TestRunner.FSharp/Rewrite.fs
+++ b/src/Exercism.TestRunner.FSharp/Rewrite.fs
@@ -72,9 +72,10 @@ let private rewriteProjectFile (context: TestRunContext) =
let originalProjectFile = File.ReadAllText(context.ProjectFile)
let rewrittenProjectFile =
originalProjectFile
- .Replace("net5.0", "net8.0")
- .Replace("net6.0", "net8.0")
- .Replace("net7.0", "net8.0")
+ .Replace("net5.0", "net9.0")
+ .Replace("net6.0", "net9.0")
+ .Replace("net7.0", "net9.0")
+ .Replace("net8.0", "net9.0")
originalProjectFile, rewrittenProjectFile
let rewriteTests (context: TestRunContext) =
diff --git a/tests/AllTestsWithTask/AllTestsWithTask.fsproj b/tests/AllTestsWithTask/AllTestsWithTask.fsproj
index 3efb84f..5f87bb1 100644
--- a/tests/AllTestsWithTask/AllTestsWithTask.fsproj
+++ b/tests/AllTestsWithTask/AllTestsWithTask.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/ClassBasedTests/ClassBasedTests.fsproj b/tests/ClassBasedTests/ClassBasedTests.fsproj
index 98b0d99..f7c6230 100644
--- a/tests/ClassBasedTests/ClassBasedTests.fsproj
+++ b/tests/ClassBasedTests/ClassBasedTests.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/DifferentTestCodeFormats/DifferentTestCodeFormats.fsproj b/tests/DifferentTestCodeFormats/DifferentTestCodeFormats.fsproj
index 5856853..1cf3f4f 100644
--- a/tests/DifferentTestCodeFormats/DifferentTestCodeFormats.fsproj
+++ b/tests/DifferentTestCodeFormats/DifferentTestCodeFormats.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/DifferentTypesOfTests/DifferentTypesOfTests.fsproj b/tests/DifferentTypesOfTests/DifferentTypesOfTests.fsproj
index 947130b..a96d5ee 100644
--- a/tests/DifferentTypesOfTests/DifferentTypesOfTests.fsproj
+++ b/tests/DifferentTypesOfTests/DifferentTypesOfTests.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/DotnetEightProject/DotnetEightProject.fs b/tests/DotnetEightProject/DotnetEightProject.fs
new file mode 100644
index 0000000..863d2cc
--- /dev/null
+++ b/tests/DotnetEightProject/DotnetEightProject.fs
@@ -0,0 +1,7 @@
+module DotnetSixProject
+
+let add x y = x + y
+
+let sub x y = x - y
+
+let mul x y = x * y
diff --git a/tests/DotnetEightProject/DotnetEightProject.fsproj b/tests/DotnetEightProject/DotnetEightProject.fsproj
new file mode 100644
index 0000000..96beb26
--- /dev/null
+++ b/tests/DotnetEightProject/DotnetEightProject.fsproj
@@ -0,0 +1,22 @@
+
+
+
+ net8.0
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/DotnetEightProject/DotnetEightProjectTests.fs b/tests/DotnetEightProject/DotnetEightProjectTests.fs
new file mode 100644
index 0000000..fd93a7a
--- /dev/null
+++ b/tests/DotnetEightProject/DotnetEightProjectTests.fs
@@ -0,0 +1,15 @@
+module DotnetSixProjectTests
+
+open Xunit
+open FsUnit.Xunit
+open Exercism.Tests
+open DotnetSixProject
+
+[]
+let ``Add should add numbers`` () = add 1 1 |> should equal 2
+
+[]
+let ``Sub should subtract numbers`` () = sub 7 3 |> should equal 4
+
+[]
+let ``Mul should multiply numbers`` () = mul 2 3 |> should equal 6
diff --git a/tests/DotnetEightProject/expected_results.json b/tests/DotnetEightProject/expected_results.json
new file mode 100644
index 0000000..ce56be2
--- /dev/null
+++ b/tests/DotnetEightProject/expected_results.json
@@ -0,0 +1,21 @@
+{
+ "version": 3,
+ "status": "pass",
+ "tests": [
+ {
+ "name": "Add should add numbers",
+ "status": "pass",
+ "test_code": "add 1 1 |\u003E should equal 2"
+ },
+ {
+ "name": "Sub should subtract numbers",
+ "status": "pass",
+ "test_code": "sub 7 3 |\u003E should equal 4"
+ },
+ {
+ "name": "Mul should multiply numbers",
+ "status": "pass",
+ "test_code": "mul 2 3 |\u003E should equal 6"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tests/MultipleCompileErrors/MultipleCompileErrors.fsproj b/tests/MultipleCompileErrors/MultipleCompileErrors.fsproj
index c4bcbf5..9c2f466 100644
--- a/tests/MultipleCompileErrors/MultipleCompileErrors.fsproj
+++ b/tests/MultipleCompileErrors/MultipleCompileErrors.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/MultipleTestsWithAllPasses/MultipleTestsWithAllPasses.fsproj b/tests/MultipleTestsWithAllPasses/MultipleTestsWithAllPasses.fsproj
index fc69380..7af907d 100644
--- a/tests/MultipleTestsWithAllPasses/MultipleTestsWithAllPasses.fsproj
+++ b/tests/MultipleTestsWithAllPasses/MultipleTestsWithAllPasses.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/MultipleTestsWithMultipleFails/MultipleTestsWithMultipleFails.fsproj b/tests/MultipleTestsWithMultipleFails/MultipleTestsWithMultipleFails.fsproj
index 188305b..ea9cfc5 100644
--- a/tests/MultipleTestsWithMultipleFails/MultipleTestsWithMultipleFails.fsproj
+++ b/tests/MultipleTestsWithMultipleFails/MultipleTestsWithMultipleFails.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/MultipleTestsWithSingleFail/MultipleTestsWithSingleFail.fsproj b/tests/MultipleTestsWithSingleFail/MultipleTestsWithSingleFail.fsproj
index 0c45b73..1f6471f 100644
--- a/tests/MultipleTestsWithSingleFail/MultipleTestsWithSingleFail.fsproj
+++ b/tests/MultipleTestsWithSingleFail/MultipleTestsWithSingleFail.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/MultipleTestsWithTestOutput/MultipleTestsWithTestOutput.fsproj b/tests/MultipleTestsWithTestOutput/MultipleTestsWithTestOutput.fsproj
index d00b37f..59f854b 100644
--- a/tests/MultipleTestsWithTestOutput/MultipleTestsWithTestOutput.fsproj
+++ b/tests/MultipleTestsWithTestOutput/MultipleTestsWithTestOutput.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/MultipleTestsWithTestOutputExceedingLimit/MultipleTestsWithTestOutputExceedingLimit.fsproj b/tests/MultipleTestsWithTestOutputExceedingLimit/MultipleTestsWithTestOutputExceedingLimit.fsproj
index 7695de6..9fada42 100644
--- a/tests/MultipleTestsWithTestOutputExceedingLimit/MultipleTestsWithTestOutputExceedingLimit.fsproj
+++ b/tests/MultipleTestsWithTestOutputExceedingLimit/MultipleTestsWithTestOutputExceedingLimit.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/NotImplemented/NotImplemented.fsproj b/tests/NotImplemented/NotImplemented.fsproj
index 3b28590..6b5505f 100644
--- a/tests/NotImplemented/NotImplemented.fsproj
+++ b/tests/NotImplemented/NotImplemented.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/QuotedAndNonQuotedTests/QuotedAndNonQuotedTests.fsproj b/tests/QuotedAndNonQuotedTests/QuotedAndNonQuotedTests.fsproj
index 6bdf6f4..db57b83 100644
--- a/tests/QuotedAndNonQuotedTests/QuotedAndNonQuotedTests.fsproj
+++ b/tests/QuotedAndNonQuotedTests/QuotedAndNonQuotedTests.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/SingleCompileError/SingleCompileError.fsproj b/tests/SingleCompileError/SingleCompileError.fsproj
index 7928d23..cf8c5af 100644
--- a/tests/SingleCompileError/SingleCompileError.fsproj
+++ b/tests/SingleCompileError/SingleCompileError.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/SingleTestThatFails/SingleTestThatFails.fsproj b/tests/SingleTestThatFails/SingleTestThatFails.fsproj
index 76d8e7e..29f7c3e 100644
--- a/tests/SingleTestThatFails/SingleTestThatFails.fsproj
+++ b/tests/SingleTestThatFails/SingleTestThatFails.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/SingleTestThatPasses/SingleTestThatPasses.fsproj b/tests/SingleTestThatPasses/SingleTestThatPasses.fsproj
index 8eeddac..7492e2f 100644
--- a/tests/SingleTestThatPasses/SingleTestThatPasses.fsproj
+++ b/tests/SingleTestThatPasses/SingleTestThatPasses.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/SomeTestsWithTask/SomeTestsWithTask.fsproj b/tests/SomeTestsWithTask/SomeTestsWithTask.fsproj
index e3e0928..d90d798 100644
--- a/tests/SomeTestsWithTask/SomeTestsWithTask.fsproj
+++ b/tests/SomeTestsWithTask/SomeTestsWithTask.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/TestWithParentheses/TestWithParentheses.fsproj b/tests/TestWithParentheses/TestWithParentheses.fsproj
index 45a0597..6968057 100644
--- a/tests/TestWithParentheses/TestWithParentheses.fsproj
+++ b/tests/TestWithParentheses/TestWithParentheses.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/UseCultureAttribute/UseCultureAttribute.fsproj b/tests/UseCultureAttribute/UseCultureAttribute.fsproj
index a4bdd7b..c67cdc0 100644
--- a/tests/UseCultureAttribute/UseCultureAttribute.fsproj
+++ b/tests/UseCultureAttribute/UseCultureAttribute.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false
diff --git a/tests/Warnings/Warnings.fsproj b/tests/Warnings/Warnings.fsproj
index 038fa1e..82b88d3 100644
--- a/tests/Warnings/Warnings.fsproj
+++ b/tests/Warnings/Warnings.fsproj
@@ -1,7 +1,7 @@
- net8.0
+ net9.0
false