En MSBuild 4.0+, hay a $(MSBuildProgramFiles32)
property por ello, que con confianza puede emplear directamente (especialmente si usted está dispuesto a poner un ToolsVersion="4.0"
en la parte superior del archivo para garantizar que va a estar disponible y Fail Fast si no lo es) .
Si no estás y necesita algo que puede hacer lo correcto, incluso cuando se ejecuta en un entorno de MSBuild 2.0 o posterior (es decir, volver a VS 2005 ambientes), la solución completa es:
<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>
Desafortunadamente Progressive enhancement/polyfill se omite el nombre MSBuild reserved propertyMSBuildProgramFiles32
a través de un <PropertyGroup>
o <CreateProperty>
es rechazado por MSBuild 4.0+ por lo que no se puede hacer más ordenado y todavía es compatible con .NET 2.0.
Muchas de las respuestas se vuelven un poco quisquillosas sobre si una respuesta determinada funcionará en .NET 2.0 y 4.0, pero no lo veo en la pregunta. Quizás nos puede decir qué versión (s) de .NET que planea apuntar? – BrainSlugs83
@ BrainSlugs83 Esta pregunta se realizó en 2008 cuando .net 4.0 aún no existía. Pero en general, siempre preferiría una solución que funcione en cualquier versión, para evitar tener que hacer cambios al cambiar de versión. La respuesta aceptada explica qué usar en las versiones más nuevas de msbuild, pero también proporciona una solución para versiones anteriores que también funciona en versiones más nuevas. Entonces, no veo el punto de limitar mi pregunta a una versión específica. – wimh