MSBuild 4.0+ में, वहाँ इसके लिए a $(MSBuildProgramFiles32)
property है, जो आप आत्मविश्वास से सीधे उपयोग कर सकते हैं (खासकर यदि आप फ़ाइल के शीर्ष पर एक ToolsVersion="4.0"
डाल करने के लिए गारंटी करने के लिए यह उपलब्ध है और Fail Fast होने वाला है अगर यह नहीं है तैयार हैं) ।
आप नहीं कर रहे हैं और कुछ है कि सही काम करते हैं कर सकते हैं यहां तक कि जब एक MSBuild 2.0 या बाद के वातावरण में निष्पादित की जरूरत है (यानी, वापस 2005 वातावरण के लिए), पूर्ण समाधान है:
<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>
दुर्भाग्यवश Progressive enhancement/polyfill नाम MSBuildProgramFiles32
का ओवरराइडिंग <PropertyGroup>
या <CreateProperty>
के माध्यम से MSBuild 4.0+ द्वारा अस्वीकार कर दिया गया है, इसलिए इसे साफ नहीं किया जा सकता है और अभी भी .NET 2.0 का समर्थन नहीं किया जा सकता है।
स्रोत
2011-04-13 14:20:11
बहुत से उत्तरों को थोड़ा सा नाइटपीकी मिल रही है कि क्या दिया गया उत्तर .NET 2.0 और 4.0 पर काम करेगा - लेकिन मैं इसे प्रश्न में नहीं देख रहा हूं - शायद आप हमें बता सकते हैं कि किस संस्करण (ओं) .NET आप लक्षित करने की योजना बना रहे हैं? – BrainSlugs83
@ BrainSlugs83 इस प्रश्न को 2008 में पूछा गया था जब .NET 4.0 अभी तक मौजूद नहीं था। लेकिन आम तौर पर, मैं हमेशा एक समाधान पसंद करता हूं जो संस्करण को स्विच करते समय परिवर्तन करने से बचने के लिए किसी भी संस्करण में काम करता है। स्वीकृत उत्तर बताता है कि नए एमएसबिल्ड संस्करणों में क्या उपयोग करना है, बल्कि पुराने संस्करणों के लिए एक समाधान भी प्रदान करता है जो नए संस्करण में भी काम करता है। इसलिए मुझे अपने प्रश्न को एक विशिष्ट संस्करण में सीमित करने का बिंदु नहीं दिख रहा है। – wimh