(reported offline by @olgaark)
For a given project, MSBuild.exe (64-bit, the new dev17 default) and a 64-bit API consumer evaluate projects differently because they disagree about $(MSBuildToolsPath).
For instance, here's a template C++ DLL preprocessed with msbuild and with a prefer-64-bit .NET Framework application:
diff --git a/./msbuild.xml b/./apiconsumer.xml
index f7fae39..86c6468 100644
--- a/./msbuild.xml
+++ b/./apiconsumer.xml
@@ -3392,7 +3392,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
============================================================================================================================================
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.Targets">
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.Targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.Targets
============================================================================================================================================
-->
<!--
@@ -3495,7 +3495,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
============================================================================================================================================
<Import Project="$(CommonTargetsPath)">
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets
============================================================================================================================================
-->
<!--
@@ -3547,7 +3547,7 @@ C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Microsoft.
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets
============================================================================================================================================
-->
<!--
@@ -3562,7 +3562,7 @@ C:\Users\raines\source\repos\Dll1\Dll1\Dll1.vcxproj.user
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets
============================================================================================================================================
-->
<!-- VS10 without SP1 and without VS11 will not have VisualStudioVersion set, so do that here -->
@@ -8270,7 +8270,7 @@ C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Microsoft\VisualSt
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets
============================================================================================================================================
-->
<!--<Import Project="$(ReportingServicesTargets)" Condition="Exists('$(ReportingServicesTargets)')" />-->
@@ -8282,7 +8282,7 @@ C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\
============================================================================================================================================
<Import Project="$(MSBuildToolsPath)\Microsoft.Xaml.targets" Condition="('$(ImportXamlTargets)' == 'true')">
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Xaml.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Xaml.targets
============================================================================================================================================
-->
<!--
@@ -8560,14 +8560,14 @@ Copyright (C) Microsoft Corporation. All rights reserved.
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Xaml.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Xaml.targets
============================================================================================================================================
-->
<!--
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets
============================================================================================================================================
-->
<!-- imports Microsoft.WorkflowBuildExtensions.targets only if TargetFrameworkVersion is v4.5 or above or TargetFrameworkfVersion specified does not conform to the format of vX.X[.X.X] -->
@@ -8606,7 +8606,7 @@ C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Microsoft\VisualSt
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets
============================================================================================================================================
-->
<!-- App packaging support -->
@@ -9472,7 +9472,7 @@ Copyright (c) .NET Foundation. All rights reserved.
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets
============================================================================================================================================
-->
<!--<Import Project="$(CustomAfterMicrosoftCommonTargets)" Condition="'$(CustomAfterMicrosoftCommonTargets)' != '' and Exists('$(CustomAfterMicrosoftCommonTargets)')" />-->
@@ -10274,7 +10274,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets
============================================================================================================================================
-->
<!--<Import Project="$(MSBuildUserExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.targets\ImportAfter\*" Condition="'$(ImportUserLocationsByWildcardAfterMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildUserExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.targets\ImportAfter')" />-->
@@ -10282,7 +10282,7 @@ C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\
============================================================================================================================================
</Import>
-C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.Targets
+C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\Microsoft.Common.Targets
============================================================================================================================================
-->
<!--
This is happening because the BuildEnvironmentHelper tries to use the TryFromMSBuildAssembly strategy, which finds an MSBuild.exe next to the currently executing assembly, but that is not necessarily the right folder--it's perfectly legit and even encouraged (MSBuild.exe does it via binding redirects!) to use the "bin" copies of MSBuild libraries.
|
var buildAssembly = s_getExecutingAssemblyPath(); |
|
if (buildAssembly == null) return null; |
|
|
|
// Check for MSBuild.[exe|dll] next to the current assembly |
|
var msBuildExe = Path.Combine(FileUtilities.GetFolderAbove(buildAssembly), "MSBuild.exe"); |
(reported offline by @olgaark)
For a given project, MSBuild.exe (64-bit, the new dev17 default) and a 64-bit API consumer evaluate projects differently because they disagree about
$(MSBuildToolsPath).For instance, here's a template C++ DLL preprocessed with msbuild and with a prefer-64-bit .NET Framework application:
This is happening because the BuildEnvironmentHelper tries to use the
TryFromMSBuildAssemblystrategy, which finds anMSBuild.exenext to the currently executing assembly, but that is not necessarily the right folder--it's perfectly legit and even encouraged (MSBuild.exe does it via binding redirects!) to use the "bin" copies of MSBuild libraries.msbuild/src/Shared/BuildEnvironmentHelper.cs
Lines 178 to 182 in dfd2be7