fsprojects / FAKE

FAKE - F# Make
https://fake.build
Other
1.28k stars 582 forks source link

Wrong version of MSBuild found if only Visual Studio 2022 is installed #2664

Open NogginBops opened 2 years ago

NogginBops commented 2 years ago

This code only looks in the Program Files (x86) folder for Visual Studio installations, but vs2022 installs in Program Files, so MSBuild provided with vs2022 will not be picked up by Fake.DotNet.MSBuild.

https://github.com/fsprojects/FAKE/blob/e313c3b25a2c3d683d0ceed735a1a2b9b15a4fb4/src/app/Fake.DotNet.MSBuild/MSBuild.fs#L236-L249

github-actions[bot] commented 2 years ago

Welcome to the FAKE community! Thank you so much for creating your first issue and therefore improving the project!

aloisdg commented 2 years ago

Nice catch. Maybe we should hardcoded the program file into each paths or we can write a small logic:

pseudo code

// wont work because visualStudioVersion can be none
let getProgramFilesPath visualStudioVersion = 
    if (float visualStudioVersion) < 17.0
    then Environment.ProgramFilesX86
    else Environment.ProgramFiles

let findOnVSPathsThenSystemPath =
                let visualStudioVersion = Environment.environVarOrNone "VisualStudioVersion"
Environment.ProgramFiles
                let vsVersionPaths =
                    let dict = toDict knownMSBuildEntries
                    defaultArg (visualStudioVersion |> Option.bind dict.TryFind) getAllKnownPaths
                    |> List.map (fun path -> (getProgramFilesPath visualStudioVersion) @@ path)
                let vsWhereVersionPaths =
                    let orderedVersions = MSBuildExeFromVsWhere.getOrdered()
                    let all = orderedVersions |> List.collect (fun e -> e.Paths)
                    let dict = toDict orderedVersions
                    defaultArg (visualStudioVersion |> Option.bind dict.TryFind) all
                let fullList = vsWhereVersionPaths @ vsVersionPaths |> List.distinct

source:

yazeedobaid commented 2 years ago

Thanks for reporting! Would anyone like to send a PR for this issue?

aloisdg commented 2 years ago

@yazeedobaid I am willing to transform my pseudo code into something useful.

yazeedobaid commented 2 years ago

@aloisdg thanks