Skip to content

64-bit API clients can wind up with imports that don't match MSBuild.exe/VS's #6681

@rainersigwald

Description

@rainersigwald

(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");

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions