2010-08-17 12 views
6

में वर्तमान ओएस की "बिट" नेस का पता लगाएं मेरे पास एक बिल्ड स्क्रिप्ट है जिसे निष्पादन योग्य के लिए हार्ड कोड की आवश्यकता है। मार्ग है:MSBuild

  • C: \ Program Files \ Microsoft Visual Studio 9.0 \ SmartDevices \ एसडीके \ SDKTools \ cabwiz.exe

यह ठीक काम किया है, लेकिन अब मैं एक 64 बिट पर चल रहा हूँ ओएस (लेकिन मेरा सहकर्मी और निर्माण सर्वर अभी भी 32 बिट पर है)।

मैं पथ की जरूरत है मेरे लिए यह होने के लिए:

  • सी: \ Program Files (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 9.0 \ SmartDevices \ एसडीके \ SDKTools \ cabwiz.exe

लेकिन दूसरों के लिए सामान्य पथ का उपयोग करें।

यहाँ है कैसे मैं इसे सेट अप:

<PropertyGroup> 
    <CabWiz>"C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe"</CabWiz> 
</PropertyGroup> 

वहाँ एक शर्त है मुझे लगता है कि पर डाल सकते हैं, ताकि मैं यह निर्धारित कर सकते हैं अगर ओएस (नहीं वर्तमान बिल्ड विन्यास) 64 बिट है है?

उत्तर

7

एक रजिस्ट्री कुंजी है जो आपको वर्तमान ओएस की बिट-एडनेस बताएगी। यहाँ गुण का उपयोग मैं मेरी MSBuild फाइलों में हैं:

<PropertyGroup> 
     <MachineProcessorArchitecture>$(registry:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\[email protected]_ARCHITECTURE)</MachineProcessorArchitecture> 
     <Is32Bit>False</Is32Bit> 
     <Is32Bit Condition="'$(MachineProcessorArchitecture)' == 'x86'">True</Is32Bit> 
     <Is64Bit>False</Is64Bit> 
     <Is64Bit Condition="'$(MachineProcessorArchitecture)' == 'AMD64'">True</Is64Bit> 
</PropertyGroup> 
3

64-बिट OS पर, निम्न चर परिभाषित कर रहे हैं:

ProgramFiles=C:\Program Files 
ProgramFiles(x86)=C:\Program Files (x86) 

तो बस परीक्षण ProgramFiles(x86) के लिए और यदि वह रिक्त हो, ProgramFiles का उपयोग करें।

1

यदि आप प्लेटफ़ॉर्म पर ध्यान दिए बिना एमएसबिल्ड के 32-बिट संस्करण को हमेशा चला रहे हैं, तो यह आसान है: 'सी: \ प्रोग्राम फ़ाइलें' के लिए बस '$ (ProgramFiles)' को प्रतिस्थापित करें। चाहे 32-बिट या 64-बिट ओएस पर, '$ (ProgramFiles)' को सही फ़ोल्डर स्थान (सभी 32-बिट प्रोग्रामों का स्थान) में विस्तारित किया जाना चाहिए।

यदि आप 64-बिट प्लेटफार्मों (जो असंभव है) पर MSBuild के 64-बिट संस्करण को चला रहे हैं, तो यह थोड़ा सा ट्रिकियर हो जाता है। '% प्रोग्रामफाइल (x86)%' पर्यावरण चर आप जो चाहते हैं वह प्रतीत होता है, लेकिन उन भाग्य से निपटने में शुभकामनाएं। संभवतः एक शर्त में '% PROCESSOR_ARCHITECTURE%' पर्यावरण चर का उपयोग करना आसान होगा।

+0

एमएसबिल्ड के 64-बिट संस्करण को चलाने की संभावना अब असंभव नहीं है, क्योंकि यह टीम बिल्ड 2010 के लिए डिफ़ॉल्ट है। यहां टिप्पणियां देखें: https://connect.microsoft.com/VisualStudio/feedback/details/591133/msbuild -64-बिट-पिक-अप-गलत-एक्सटेंशन-पथ – Mark

3

आप bitness उपयोग कर रहे हैं की कोशिश करने और सही प्रोग्राम फ़ाइलें फ़ोल्डर लगता है, लेकिन कोई गारंटी नहीं है कि यह सी ड्राइव पर है, या यहाँ तक कि "कार्यक्रम कहा जाता है फ़ाइलें "। आप $(MSBuildProgramFiles32) संपत्ति (एमएसबिल्ड 4.0 में) का उपयोग करके बेहतर होंगे।