add probing for x64 msbuild binaries

This commit is contained in:
Chet Husk 2021-11-01 16:34:09 -05:00
parent 0cd944e169
commit 6c2e301a93
2 changed files with 31 additions and 13 deletions

View File

@ -14,6 +14,10 @@ inputs:
vs-prerelease: vs-prerelease:
description: 'Enable searching for pre-release versions of Visual Studio/MSBuild' description: 'Enable searching for pre-release versions of Visual Studio/MSBuild'
required: false required: false
msbuild-architecture:
description: 'The processor architecture to prefer of msbuild. Can be either "x86" or "x64". "x64" is only available from Visual Studio version 17.0 an onwards.'
required: false
default: 'x86'
outputs: outputs:
msbuildPath: msbuildPath:
description: 'The resulting location of msbuild for your inputs' description: 'The resulting location of msbuild for your inputs'

View File

@ -9,6 +9,7 @@ const IS_WINDOWS = process.platform === 'win32'
const VS_VERSION = core.getInput('vs-version') || 'latest' const VS_VERSION = core.getInput('vs-version') || 'latest'
const VSWHERE_PATH = core.getInput('vswhere-path') const VSWHERE_PATH = core.getInput('vswhere-path')
const ALLOW_PRERELEASE = core.getInput('vs-prerelease') || 'false' const ALLOW_PRERELEASE = core.getInput('vs-prerelease') || 'false'
const MSBUILD_ARCH = core.getInput('msbuild-architecture') || 'x86';
// if a specific version of VS is requested // if a specific version of VS is requested
let VSWHERE_EXEC = '-products * -requires Microsoft.Component.MSBuild -property installationPath -latest ' let VSWHERE_EXEC = '-products * -requires Microsoft.Component.MSBuild -property installationPath -latest '
@ -70,6 +71,18 @@ async function run(): Promise<void> {
const installationPath = data.toString().trim() const installationPath = data.toString().trim()
core.debug(`Found installation path: ${installationPath}`) core.debug(`Found installation path: ${installationPath}`)
// x64 only exists in one possible location, so no fallback probing
if(MSBUILD_ARCH === "x64") {
let toolPath = path.join(
installationPath,
'MSBuild\\Current\\Bin\\amd64\\MSBuild.exe'
);
core.debug(`Checking for path: ${toolPath}`)
if (!fs.existsSync(toolPath)) {
return
}
foundToolPath = toolPath
} else {
let toolPath = path.join( let toolPath = path.join(
installationPath, installationPath,
'MSBuild\\Current\\Bin\\MSBuild.exe' 'MSBuild\\Current\\Bin\\MSBuild.exe'
@ -91,6 +104,7 @@ async function run(): Promise<void> {
foundToolPath = toolPath foundToolPath = toolPath
} }
} }
}
// execute the find putting the result of the command in the options foundToolPath // execute the find putting the result of the command in the options foundToolPath
await exec.exec(`"${vswhereToolExe}" ${VSWHERE_EXEC}`, [], options) await exec.exec(`"${vswhereToolExe}" ${VSWHERE_EXEC}`, [], options)