Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The MSBuild task does not find msbuild.exe from "BuildTools" installs on 64-bit platforms #3708

Closed
2 tasks done
csdahlberg opened this issue Nov 23, 2021 · 2 comments
Closed
2 tasks done

Comments

@csdahlberg
Copy link

Prerequisites

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

Cake runner

Cake .NET Tool

Cake version

1.3.0

Operating system

Windows

Operating system architecture

64-Bit

CI Server

No response

What are you seeing?

On a 64-bit Windows system with both Visual Studio 2019 Community Edition and Visual Studio 2022 Build Tools installed to default locations, the MSBuild command is unable to find the Visual Studio 2022 version of msbuild.exe, even when .UseToolVersion(MSBuildToolVersion.VS2022) is used.

This appears to be due to the BuildTools installs always being installed to the 32-bit Program Files folder, and MSBuildResolver always using the 64-bit Program Files folder on 64-bit platforms: https://github.com/cake-build/cake/blob/v1.3.0/src/Cake.Common/Tools/MSBuild/MSBuildResolver.cs#L219

What is expected?

The MSBuild command should locate msbuild.exe from the Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin (or Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\amd64?) directory on 64-bit Windows systems.

Steps to Reproduce

  • Install Visual Studio 2019 Community Edition (probably optional)
  • Install Visual Studio 2022 Build Tools
  • Run a Cake script that has a task with something like MSBuild("foo.targets", new MSBuildSettings().UseToolVersion(MSBuildToolVersion.VS2022);
  • The build fails with Cake.Core.CakeException: MSBuild: Could not locate executable. exception

Output log

========================================
build-foo
========================================
Executing task: build-foo
An error occurred when executing task 'build-foo'.
Error: System.AggregateException: One or more errors occurred. (MSBuild: Could not locate executable.)
 ---> Cake.Core.CakeException: MSBuild: Could not locate executable.
   at Cake.Core.Tooling.Tool`1.RunProcess(TSettings settings, ProcessArgumentBuilder arguments, ProcessSettings processSettings) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 164
   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 81
   at Cake.Core.Tooling.Tool`1.Run(TSettings settings, ProcessArgumentBuilder arguments) in C:\projects\cake\src\Cake.Core\Tooling\Tool.cs:line 60
   at Cake.Common.Tools.MSBuild.MSBuildRunner.Run(FilePath solution, MSBuildSettings settings) in C:\projects\cake\src\Cake.Common\Tools\MSBuild\MSBuildRunner.cs:line 48
   at Cake.Common.Tools.MSBuild.MSBuildAliases.MSBuild(ICakeContext context, FilePath solution, MSBuildSettings settings) in C:\projects\cake\src\Cake.Common\Tools\MSBuild\MSBuildAliases.cs:line 102
   at Submission#0.MSBuild(FilePath solution, MSBuildSettings settings)
   at Submission#0.<<Initialize>>b__0_22(ContrastContext contrast)
   at Cake.Core.CakeTaskBuilderExtensions.<>c__DisplayClass32_0`1.<Does>b__0(ICakeContext _, TData data) in C:\projects\cake\src\Cake.Core\CakeTaskBuilder.Execution.cs:line 43
   at Cake.Core.CakeTaskBuilderExtensions.<>c__DisplayClass37_0`1.<Does>b__0(ICakeContext context) in C:\projects\cake\src\Cake.Core\CakeTaskBuilder.Execution.cs:line 141
   at Cake.Core.CakeTaskBuilderExtensions.<>c__DisplayClass34_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 72
   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 278
   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 301
   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 311
   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 226
   at Cake.Core.CakeEngine.RunTargetAsync(ICakeContext context, IExecutionStrategy strategy, ExecutionSettings settings) in C:\projects\cake\src\Cake.Core\CakeEngine.cs:line 189
   at Cake.Cli.BuildScriptHost`1.RunTargetAsync(String target) in C:\projects\cake\src\Cake.Cli\Hosts\BuildScriptHost.cs:line 73
   at Cake.Core.Scripting.ScriptHost.RunTarget(String target) in C:\projects\cake\src\Cake.Core\Scripting\ScriptHost.cs:line 105
   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)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at Cake.Infrastructure.Scripting.RoslynScriptSession.Execute(Script script) in C:\projects\cake\src\Cake\Infrastructure\Scripting\RoslynScriptSession.cs:line 90
   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(IRemainingArguments arguments, BuildFeatureSettings settings) in C:\projects\cake\src\Cake\Features\Building\BuildFeature.cs:line 99
   at Cake.Features.Building.BuildFeature.Run(IRemainingArguments 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 73
@augustoproiete
Copy link
Member

augustoproiete commented Nov 23, 2021

Thanks @csdahlberg. I believe this is the same issue reported via #3671, which has been fixed with Cake v2.0.0-rc0001 as per #3678

Could you take it for a spin to confirm it's fixed?

https://cakebuild.net/blog/2021/11/cake-v2.0.0-rc0001-released

@csdahlberg
Copy link
Author

Wow, I'm not sure how I missed that issue when searching. Sorry about that. Yep, that's the same problem.

It worked just fine with 2.0.0-rc0001. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants