From ccf29a7485660f371966d09b5815b4cfe87145b2 Mon Sep 17 00:00:00 2001 From: filipw Date: Sun, 5 Nov 2023 17:37:56 +0100 Subject: [PATCH 1/7] added net8.0 target and rev up to 1.5.0 --- src/Dotnet.Script.Core/Dotnet.Script.Core.csproj | 4 ++-- .../Dotnet.Script.DependencyModel.NuGet.csproj | 2 +- .../Dotnet.Script.DependencyModel.csproj | 2 +- src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj | 2 +- src/Dotnet.Script/Dotnet.Script.csproj | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj b/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj index 094312d6..31536514 100644 --- a/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj +++ b/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj @@ -2,9 +2,9 @@ A cross platform library allowing you to run C# (CSX) scripts with support for debugging and inline NuGet packages. Based on Roslyn. - 1.4.0 + 1.5.0 filipw - net6.0;netstandard2.0 + net8.0;net7.0;net6.0;netstandard2.0 Dotnet.Script.Core Dotnet.Script.Core script;csx;csharp;roslyn diff --git a/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj b/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj index 448dae7f..20d1b4ab 100644 --- a/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj +++ b/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj @@ -8,7 +8,7 @@ https://github.com/dotnet-script/dotnet-script.git git script;csx;csharp;roslyn;nuget - 1.4.0 + 1.5.0 A MetadataReferenceResolver that allows inline nuget references to be specified in script(csx) files. dotnet-script dotnet-script diff --git a/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj b/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj index 2d228cf5..f32e05eb 100644 --- a/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj +++ b/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj @@ -11,7 +11,7 @@ https://github.com/dotnet-script/dotnet-script.git git script;csx;csharp;roslyn;omnisharp - 1.4.0 + 1.5.0 latest true ../dotnet-script.snk diff --git a/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj b/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj index 0144d8e3..671dd886 100644 --- a/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj +++ b/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj @@ -1,6 +1,6 @@ - net7.0;net6.0 + net8.0;net7.0;net6.0 false true ../dotnet-script.snk diff --git a/src/Dotnet.Script/Dotnet.Script.csproj b/src/Dotnet.Script/Dotnet.Script.csproj index 10f10c13..d016aaa4 100644 --- a/src/Dotnet.Script/Dotnet.Script.csproj +++ b/src/Dotnet.Script/Dotnet.Script.csproj @@ -2,10 +2,10 @@ Dotnet CLI tool allowing you to run C# (CSX) scripts. - 1.4.0 + 1.5.0 filipw Dotnet.Script - net7.0;net6.0 + net8.0;net7.0;net6.0 portable dotnet-script Exe From 79ff2841c0df0791f18c4dc7643c0d7662f7fdcb Mon Sep 17 00:00:00 2001 From: filipw Date: Sun, 5 Nov 2023 17:43:46 +0100 Subject: [PATCH 2/7] fixed global.json and GH workflow --- .github/workflows/main.yml | 9 ++++++--- global.json | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 64f1e6b4..f803924c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,11 +9,12 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install .Net Core - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v3 with: dotnet-version: | 6.0.x 7.0.x + 8.0.x include-prerelease: true - name: Install dotnet-script run: dotnet tool install dotnet-script --global @@ -27,11 +28,12 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install .Net Core - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v3 with: dotnet-version: | 6.0.x 7.0.x + 8.0.x include-prerelease: true - name: Install dotnet-script run: dotnet tool install dotnet-script --global @@ -45,11 +47,12 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install .Net Core - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v3 with: dotnet-version: | 6.0.x 7.0.x + 8.0.x include-prerelease: true - name: Install dotnet-script run: dotnet tool install dotnet-script --global diff --git a/global.json b/global.json index d4d08251..570112b6 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "7.0.100", + "version": "8.0.100-rc.2.23502.2", "rollForward": "latestFeature" } } From 52eb904d36fcfb4c438f5d7d7138a23a4141d813 Mon Sep 17 00:00:00 2001 From: filipw Date: Mon, 6 Nov 2023 13:39:57 +0100 Subject: [PATCH 3/7] fixed several tests --- .../InteractiveRunnerTests.cs | 3 +-- src/Dotnet.Script.Tests/ScriptExecutionTests.cs | 17 +++++++++++++++++ .../TestFixtures/WebApi/WebApi.csx | 6 ++++-- .../TestFixtures/WebApiNet6/WebApiNet6.csx | 6 ++++++ 4 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 src/Dotnet.Script.Tests/TestFixtures/WebApiNet6/WebApiNet6.csx diff --git a/src/Dotnet.Script.Tests/InteractiveRunnerTests.cs b/src/Dotnet.Script.Tests/InteractiveRunnerTests.cs index eba5ff06..da5e3b7f 100644 --- a/src/Dotnet.Script.Tests/InteractiveRunnerTests.cs +++ b/src/Dotnet.Script.Tests/InteractiveRunnerTests.cs @@ -19,8 +19,7 @@ public async Task ShouldCompileAndExecuteWithWebSdk() { @"#r ""sdk:Microsoft.NET.Sdk.Web""", "using Microsoft.AspNetCore.Builder;", - "var a = WebApplication.Create();", - @"a.GetType()", + @"typeof(WebApplication)", "#exit" }; diff --git a/src/Dotnet.Script.Tests/ScriptExecutionTests.cs b/src/Dotnet.Script.Tests/ScriptExecutionTests.cs index 5c08518e..05ecbd0b 100644 --- a/src/Dotnet.Script.Tests/ScriptExecutionTests.cs +++ b/src/Dotnet.Script.Tests/ScriptExecutionTests.cs @@ -1,5 +1,7 @@ using System; using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; using System.Text; using Dotnet.Script.DependencyModel.Environment; using Dotnet.Script.Shared.Tests; @@ -479,12 +481,27 @@ public void ShouldSetCurrentContextualReflectionContext() Assert.Contains("Dotnet.Script.Core.ScriptAssemblyLoadContext", output); } +#if NET6_0 + [Fact] + public void ShouldCompileAndExecuteWithWebSdk() + { + var processResult = ScriptTestRunner.Default.ExecuteFixture("WebApiNet6", "--no-cache"); + Assert.Equal(0, processResult.ExitCode); + } +#endif + +#if NET7_0 [Fact] public void ShouldCompileAndExecuteWithWebSdk() { var processResult = ScriptTestRunner.Default.ExecuteFixture("WebApi", "--no-cache"); Assert.Equal(0, processResult.ExitCode); } +#endif + // todo: the same test should run for .NET 8.0 - currently it fails with + // System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. + // ---> System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. + // Could not find or load a specific file. (0x80131621) [Fact] public void ShouldThrowExceptionWhenSdkIsNotSupported() diff --git a/src/Dotnet.Script.Tests/TestFixtures/WebApi/WebApi.csx b/src/Dotnet.Script.Tests/TestFixtures/WebApi/WebApi.csx index b4b76d41..ff851bad 100644 --- a/src/Dotnet.Script.Tests/TestFixtures/WebApi/WebApi.csx +++ b/src/Dotnet.Script.Tests/TestFixtures/WebApi/WebApi.csx @@ -2,5 +2,7 @@ using Microsoft.AspNetCore.Builder; -var a = WebApplication.Create(); -a.MapGet("/", () => "Hello world"); \ No newline at end of file +var builder = WebApplication.CreateBuilder(); +var app = builder.Build(); + +app.MapGet("/", () => "Hello World!"); \ No newline at end of file diff --git a/src/Dotnet.Script.Tests/TestFixtures/WebApiNet6/WebApiNet6.csx b/src/Dotnet.Script.Tests/TestFixtures/WebApiNet6/WebApiNet6.csx new file mode 100644 index 00000000..b4b76d41 --- /dev/null +++ b/src/Dotnet.Script.Tests/TestFixtures/WebApiNet6/WebApiNet6.csx @@ -0,0 +1,6 @@ +#r "sdk:Microsoft.NET.Sdk.Web" + +using Microsoft.AspNetCore.Builder; + +var a = WebApplication.Create(); +a.MapGet("/", () => "Hello world"); \ No newline at end of file From b282f4905069e45f4c916bddf6f2ea26ff98a2f0 Mon Sep 17 00:00:00 2001 From: filipw Date: Mon, 6 Nov 2023 13:42:19 +0100 Subject: [PATCH 4/7] added true --- src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template b/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template index 43ef3971..8bfbcffb 100644 --- a/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template +++ b/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template @@ -3,6 +3,7 @@ Exe net5.0 latest + true From 3c5cd8b48a389b0d6b2cc4d5f3802eb7968b1724 Mon Sep 17 00:00:00 2001 From: filipw Date: Mon, 6 Nov 2023 13:47:20 +0100 Subject: [PATCH 5/7] for .net 8.0 use portable identifiers --- .../Environment/ScriptEnvironment.cs | 6 ++++++ .../ProjectSystem/csproj.template | 1 - src/Dotnet.Script.Tests/ScriptPublisherTests.cs | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Dotnet.Script.DependencyModel/Environment/ScriptEnvironment.cs b/src/Dotnet.Script.DependencyModel/Environment/ScriptEnvironment.cs index afb6591e..2b6de442 100644 --- a/src/Dotnet.Script.DependencyModel/Environment/ScriptEnvironment.cs +++ b/src/Dotnet.Script.DependencyModel/Environment/ScriptEnvironment.cs @@ -133,10 +133,16 @@ private static string GetProcessArchitecture() private static string GetRuntimeIdentifier() { var platformIdentifier = GetPlatformIdentifier(); + +#if NET8_0 + return $"{platformIdentifier}-{GetProcessArchitecture()}"; +#endif + if (platformIdentifier == "osx" || platformIdentifier == "linux") { return $"{platformIdentifier}-{GetProcessArchitecture()}"; } + var runtimeIdentifier = RuntimeEnvironment.GetRuntimeIdentifier(); return runtimeIdentifier; } diff --git a/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template b/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template index 8bfbcffb..43ef3971 100644 --- a/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template +++ b/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template @@ -3,7 +3,6 @@ Exe net5.0 latest - true diff --git a/src/Dotnet.Script.Tests/ScriptPublisherTests.cs b/src/Dotnet.Script.Tests/ScriptPublisherTests.cs index 0f7064ef..80da0361 100644 --- a/src/Dotnet.Script.Tests/ScriptPublisherTests.cs +++ b/src/Dotnet.Script.Tests/ScriptPublisherTests.cs @@ -49,7 +49,11 @@ public void SimplePublishTest() public void SimplePublishTestToDifferentRuntimeId() { using var workspaceFolder = new DisposableFolder(); +#if NET8_0 + var runtimeId = _scriptEnvironment.RuntimeIdentifier == "win-x64" ? "osx-x64" : "win10-x64"; +#else var runtimeId = _scriptEnvironment.RuntimeIdentifier == "win10-x64" ? "osx-x64" : "win10-x64"; +#endif var code = @"WriteLine(""hello world"");"; var mainPath = Path.Combine(workspaceFolder.Path, "main.csx"); File.WriteAllText(mainPath, code); From 331b4c1b88204e7da19b569631a2694cf89ab1c5 Mon Sep 17 00:00:00 2001 From: filipw Date: Mon, 6 Nov 2023 14:26:33 +0100 Subject: [PATCH 6/7] use UseRidGraph to allow cross runtime compilation (probably we can do it better in the future) --- src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template b/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template index 43ef3971..8bfbcffb 100644 --- a/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template +++ b/src/Dotnet.Script.DependencyModel/ProjectSystem/csproj.template @@ -3,6 +3,7 @@ Exe net5.0 latest + true From a44d71ffb1a10c17601c99171dbb23b4ed3d367c Mon Sep 17 00:00:00 2001 From: filipw Date: Thu, 9 Nov 2023 13:08:57 +0100 Subject: [PATCH 7/7] added isolated loadcontext to .NET 8.0 SDK test --- .../ScriptExecutionTests.cs | 18 ++++++++++++------ .../TestFixtures/WebApi/WebApi.csx | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Dotnet.Script.Tests/ScriptExecutionTests.cs b/src/Dotnet.Script.Tests/ScriptExecutionTests.cs index 05ecbd0b..995a8b9c 100644 --- a/src/Dotnet.Script.Tests/ScriptExecutionTests.cs +++ b/src/Dotnet.Script.Tests/ScriptExecutionTests.cs @@ -497,12 +497,18 @@ public void ShouldCompileAndExecuteWithWebSdk() var processResult = ScriptTestRunner.Default.ExecuteFixture("WebApi", "--no-cache"); Assert.Equal(0, processResult.ExitCode); } -#endif - // todo: the same test should run for .NET 8.0 - currently it fails with - // System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. - // ---> System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. - // Could not find or load a specific file. (0x80131621) - +#endif + +#if NET8_0 + // .NET 8.0 only works with isolated load context + [Fact] + public void ShouldCompileAndExecuteWithWebSdk() + { + var processResult = ScriptTestRunner.Default.ExecuteFixture("WebApi", "--no-cache --isolated-load-context"); + Assert.Equal(0, processResult.ExitCode); + } +#endif + [Fact] public void ShouldThrowExceptionWhenSdkIsNotSupported() { diff --git a/src/Dotnet.Script.Tests/TestFixtures/WebApi/WebApi.csx b/src/Dotnet.Script.Tests/TestFixtures/WebApi/WebApi.csx index ff851bad..29658f1b 100644 --- a/src/Dotnet.Script.Tests/TestFixtures/WebApi/WebApi.csx +++ b/src/Dotnet.Script.Tests/TestFixtures/WebApi/WebApi.csx @@ -1,4 +1,5 @@ #r "sdk:Microsoft.NET.Sdk.Web" +#r "nuget:Microsoft.Extensions.DependencyInjection.Abstractions, 8.0.0-rc.2.23479.6" using Microsoft.AspNetCore.Builder;