cake icon indicating copy to clipboard operation
cake copied to clipboard

Cake fails on shutdown with .NET 10 preview 1 on Windows

Open martincostello opened this issue 10 months ago • 2 comments

Prerequisites

  • [x] I have written a descriptive issue title
  • [x] I have searched issues to ensure it has not already been reported

Cake runner

Cake .NET Tool

Cake version

5.0.0

Operating system

Windows

Operating system architecture

x64

CI Server

GitHub Actions

What are you seeing?

On Windows (but not macOS or Linux), cake is throwing an exception during teardown when using .NET 10 preview 1 (SDK version 10.0.100-preview.1.25120.13).

What is expected?

The build exits cleanly and successfully.

Steps to Reproduce

  1. Install the latest versions of .NET 8 & 9, plus 10 preview 1
  2. Clone https://github.com/App-vNext/Polly/pull/2531/commits/f814d126bba18f4df46f575eaed0b0464727ecd8
  3. Run build.ps1 from the root of the repository on Windows

Output log

Executing custom teardown action...
Finished running tasks.
Error: Cake.Core.CakeException: .NET CLI: Process returned an error (exit code 1).
   at Cake.Core.Tooling.Tool`1.ProcessExitCode(Int32 exitCode) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 118
   at Cake.Core.Tooling.Tool`1.Run(TSettings settings, ProcessArgumentBuilder arguments, ProcessSettings processSettings, Action`1 postAction) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 103
   at Cake.Common.Tools.DotNet.DotNetTool`1.RunCommand(TSettings settings, ProcessArgumentBuilder arguments) in C:\projects\cake\src\Cake.Common\Tools\DotNet\DotNetTool.cs:line 64
   at Cake.Common.Tools.DotNet.Test.DotNetTester.Test(String project, ProcessArgumentBuilder arguments, DotNetTestSettings settings) in C:\projects\cake\src\Cake.Common\Tools\DotNet\Test\DotNetTester.cs:line 49
   at Cake.Common.Tools.DotNet.DotNetAliases.DotNetTest(ICakeContext context, String project, ProcessArgumentBuilder arguments, DotNetTestSettings settings) in C:\projects\cake\src\Cake.Common\Tools\DotNet\DotNetAliases.cs:line 513
   at Cake.Common.Tools.DotNet.DotNetAliases.DotNetTest(ICakeContext context, String project, DotNetTestSettings settings) in C:\projects\cake\src\Cake.Common\Tools\DotNet\DotNetAliases.cs:line 450
   at Submission#0.DotNetTest(String project, DotNetTestSettings settings)
   at Submission#0.<<Initialize>>b__0_7()
   at Cake.Core.CakeTaskBuilderExtensions.<>c__DisplayClass36_0.<Does>b__0(ICakeContext _) in C:\projects\cake\src\Cake.Core\CakeTaskBuilder.Execution.cs:line 26
   at Cake.Core.CakeTaskBuilderExtensions.<>c__DisplayClass39_0.<Does>b__0(ICakeContext context) in C:\projects\cake\src\Cake.Core\CakeTaskBuilder.Execution.cs:line 81
   at Cake.Core.CakeTask.Execute(ICakeContext context) in C:\projects\cake\src\Cake.Core\CakeTask.cs:line 119
   at Cake.Core.DefaultExecutionStrategy.ExecuteAsync(CakeTask task, ICakeContext context) in C:\projects\cake\src\Cake.Core\DefaultExecutionStrategy.cs:line 69
   at Cake.Core.CakeEngine.ExecuteTaskAsync(ICakeContext context, IExecutionStrategy strategy, Stopwatch stopWatch, CakeTask task, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 318
   at Cake.Core.CakeEngine.ExecuteTaskAsync(ICakeContext context, IExecutionStrategy strategy, Stopwatch stopWatch, CakeTask task, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 341
   at Cake.Core.CakeEngine.ExecuteTaskAsync(ICakeContext context, IExecutionStrategy strategy, Stopwatch stopWatch, CakeTask task, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 353
   at Cake.Core.CakeEngine.RunTask(ICakeContext context, IExecutionStrategy strategy, CakeTask task, String target, Stopwatch stopWatch, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 254
   at Cake.Core.CakeEngine.RunTarget(ICakeContext context, IExecutionStrategy strategy, CakeTask[] orderedTasks, String target, Boolean exclusive, Stopwatch stopWatch, CakeReport report) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 229
   at Cake.Core.CakeEngine.RunTargetAsync(ICakeContext context, IExecutionStrategy strategy, ExecutionSettings settings) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 199
   at Cake.Cli.BuildScriptHost`1.internalRunTargetAsync() in C:\projects\cake\src\Cake.Cli\Hosts\BuildScriptHost.cs:line 87
   at Cake.Cli.BuildScriptHost`1.RunTargetAsync(String target) in C:\projects\cake\src\Cake.Cli\Hosts\BuildScriptHost.cs:line 74
   at Cake.Core.Scripting.ScriptHost.RunTarget(String target) in C:\projects\cake\src\Cake.Core\Scripting\ScriptHost.cs:line 110
   at Submission#0.<<Initialize>>d__0.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.Script`1.RunSubmissionsAsync(ScriptExecutionState executionState, ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, Func`2 catchExceptionOpt, CancellationToken cancellationToken)
   at Cake.Infrastructure.Scripting.RoslynScriptSession.Execute(Script script) in C:\projects\cake\src\Cake\Infrastructure\Scripting\RoslynScriptSession.cs:line 206
   at Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath) in C:\projects\cake\src\Cake.Core\Scripting\ScriptRunner.cs:line 172
   at Cake.Features.Building.BuildFeature.RunCore(ICakeArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 99
   at Cake.Features.Building.BuildFeature.Run(ICakeArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 49
   at Cake.Commands.DefaultCommand.Execute(CommandContext context, DefaultCommandSettings settings) in C:\projects\cake\src\Cake\Commands\DefaultCommand.cs:line 77
Error: Process completed with exit code 1.

martincostello avatar Feb 26 '25 17:02 martincostello

Are you running any powershell in test task see this error in linked log

2025-02-26T17:04:14: Error during rendering summary report (Report type: 'Html'): The process cannot access the file 'D:\a\Polly\Polly\artifacts\coverage-reports\Polly.Specs\index.html' because it is being used by another process.
  Out-File: The process cannot access the file 'D:\a\_temp\_runner_file_commands\step_summary_3a828548-9d2b-466c-af7a-9b2a185dbc67' because it is being used by another process.

devlead avatar Feb 26 '25 17:02 devlead

We use the ReportGenerator MSBuild task, maybe adding an another TFM has made a file-write clash more likely.

Looks like that's what it was on closer inspection, but that was after making changes because Cake was throwing an error on Linux in the first commit on that PR:

Preparing to run build script...
Running build script...
Analyzing build script...
Processing build script...
Installing addins...
Error: Failed to install addin 'Cake.FileHelpers'.
Error: Process completed with exit code 1.

Turning up the verbosity I got to this:

Preparing to run build script...
Running build script...
Looking for modules...
No modules found to install.
Module directory does not exist.
Analyzing build script...
Analyzing /home/runner/work/Polly/Polly/build.cake...
Processing build script...
Installing addins...
Assemblies not found for tfm .NETStandard,Version=v2.0 and rid linux-x64.
No assemblies found after running content resolver.
Error: Cake.Core.CakeException: Failed to install addin 'Cake.FileHelpers'.
   at Cake.Core.Scripting.ScriptProcessor.InstallAddins(IReadOnlyCollection`1 addins, DirectoryPath installPath) in C:\projects\cake\src\Cake.Core\Scripting\ScriptProcessor.cs:line 109
   at Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath) in C:\projects\cake\src\Cake.Core\Scripting\ScriptRunner.cs:line 106
   at Cake.Features.Building.BuildFeature.RunCore(ICakeArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 99
   at Cake.Features.Building.BuildFeature.Run(ICakeArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 49
   at Cake.Commands.DefaultCommand.Execute(CommandContext context, DefaultCommandSettings settings) in C:\projects\cake\src\Cake\Commands\DefaultCommand.cs:line 77
Error: Process completed with exit code 1.

And then I got to the initial error once I also installed the .NET 9 SDK as well as 8 and 10.

For the initial error looks like I need to try and make the MSBuild stuff more resilient to file conflicts, but feels like there's something weird going on here regardless. I wouldn't have expected Cake to error out until dotnet test tried to run the net9.0 tests later on in the script, rather than just terminate almost straight away.

martincostello avatar Feb 26 '25 17:02 martincostello

Is this still an issue?

devlead avatar Jun 22 '25 15:06 devlead