Dans MSBuild 4.0+, il y a un $(MSBuildProgramFiles32)
de la propriété , que vous pouvez en toute confiance emploient directement (surtout si vous êtes prêt à mettre un ToolsVersion="4.0"
dans le haut du fichier à garantir que ça va être disponible et Échouer Rapidement si elle n'est pas).
Si vous n'êtes pas et ont besoin de quelque chose qui peut Faire La bonne Chose, même lorsqu'il est exécuté dans un MSBuild 2.0 ou ultérieure de l'environnement (c'est à dire, de retour de VS 2005 environnements), la solution complète est:
<PropertyGroup>
<!--MSBuild 4.0 property-->
<ProgramFiles32>$(MSBuildProgramFiles32)</ProgramFiles32>
<!--Use OS env var as a fallback:- 32 bit MSBuild 2.0/3.5 on x64 will use this-->
<ProgramFiles32 Condition=" '' == '$(ProgramFiles32)'">$(ProgramFiles%28x86%29)</ProgramFiles32>
<!-- Handle MSBuild 2.0/3.5 running in 64 bit mode - neither of the above env vars are available. http://stackoverflow.com/questions/336633
NB this trick (Adding a literal " (x86)" to the 64 bit Program Files path) may or may not work on all versions/locales of Windows -->
<ProgramFiles32 Condition ="'$(ProgramFiles32)'=='' AND 'AMD64' == '$(PROCESSOR_ARCHITECTURE)'">$(ProgramFiles) (x86)</ProgramFiles32>
<!--Catch-all - handles .NET 2.0/3.5 non-AMD64 and .NET 2.0 on x86 -->
<ProgramFiles32 Condition=" '' == '$(ProgramFiles32)' ">$(ProgramFiles)</ProgramFiles32>
</PropertyGroup>
Malheureusement amélioration Progressive / polyfill primordial de la MSBuild réserve de propriété name MSBuildProgramFiles32
par <PropertyGroup>
ou <CreateProperty>
est rejeté par MSBuild 4.0+ donc il ne peut pas être fait plus propre et encore du soutien .NET 2.0.