2012-01-09 11 views
12

मैं नियमित PowerShell कंसोल से रेक के माध्यम से msbuild.exe चला रहा हूं। 'डी: /Projects/machine.specifications/Source/Machine: यह आदेश एक नैदानिक ​​स्तर रन से मुद्रित रूप मेंMSBuild x64 प्लेटफॉर्म का चयन क्यों करता है जब मैं इसे किसी भीCPC के बजाय निर्दिष्ट नहीं करता हूं?

"\ Windows \ Microsoft.NET \ फ्रेमवर्क \ v4.0.30319 \ MSBuild.exe सी' है .Specifications/Machine.Specifications.csproj31881140 "/ maxcpucount/लक्ष्य: निर्माण/शब्दाडंबर: नैदानिक ​​/ संपत्ति: विन्यास = डिबग/संपत्ति: TrackFileAccess = false/संपत्ति: BuildInParallel = false/संपत्ति: BuildRunner = रेक

और बिल्ड विफल हो रहा है क्योंकि msbuild x64 को Platform के रूप में चुन रहा है।

C: \ Windows \ Microsoft.NET \ फ्रेमवर्क \ v4.0.30319 \ Microsoft.Common.targets (483,9): त्रुटि: OutputPath संपत्ति परियोजना 'Machine.Specifications.csproj37103470' के लिए सेट नहीं है। कृपया यह सुनिश्चित करने के लिए जांचें कि आपने इस प्रोजेक्ट के लिए कॉन्फ़िगरेशन और प्लेटफ़ॉर्म का मान्य संयोजन निर्दिष्ट किया है। कॉन्फ़िगरेशन = 'डीबग' प्लेटफ़ॉर्म = 'एक्स 64'। आप यह संदेश देख रहे हैं क्योंकि आप एक समाधान फ़ाइल के बिना एक परियोजना बनाने की कोशिश कर रहे हैं, और इस परियोजना के लिए मौजूद एक गैर-डिफ़ॉल्ट कॉन्फ़िगरेशन या प्लेटफ़ॉर्म निर्दिष्ट नहीं किया है।

मैं इसे कमांड लाइन (या स्क्रिप्ट से) में पास नहीं कर रहा हूं। csproj डिफॉल्ट विन्यास

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 

और दो विशिष्ट विन्यास

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 

तो है, मैं AnyCPU मंच चयनित किए जाने की संभावना। लेकिन, किसी कारण से, x64 में कुछ चुनना या भेजना है। मुझे नहीं लगता कि रेक सिस्टम यहां एक समस्या है, मैंने एमएसबिल्ड को कच्चे सीएमडी लाइन कॉल पर पहले यह व्यवहार देखा है (लेकिन मैंने उन्हें दस्तावेज नहीं किया है)।

मैं 64-बिट विंडोज 7 पर हूं, एमएसबिल्ड 4.0 को कॉल कर रहा हूं। मुझे नहीं पता कि यह प्रासंगिक है या नहीं।


मैं loading 64-बिट दृश्य स्टूडियो उपकरण (C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64) मेरी PowerShell प्रोफ़ाइल में Invoke-BatchFile का उपयोग कर रहा हूँ। क्या वह अपराधी हो सकता है?

एमएसबिल्ड जानबूझकर x64 का चयन क्यों करेगा? 32-बिट संस्करण आपके लिए x86 नहीं चुनता है।


* 1: PowerShell कंसोल %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe पर है * 2: मैं MSpec निर्माण

+1

'MSBuild my.sln/p: कॉन्फ़िगरेशन = रिलीज/पी: प्लेटफ़ॉर्म = कोई भी CPU' एक और तरीका है (पावरहेल प्रॉम्प्ट से) –

उत्तर

18

जब आप का शुभारंभ दृश्य स्टूडियो 64 कमांड विंडो (यहाँ rakefile और msbuild call है), यह सेट चल रहा हूँ एक वातावरण चर:

Platform=X64 

यह 32 बिट कमांड विंडो, जहां इस वातावरण चर परिभाषित नहीं है से एक अंतर है, और MSBuild तो सशर्त तर्क का उपयोग करता डिफ़ॉल्ट मंच का उपयोग करने के लिए।

आप या तो अपनी बैच फ़ाइल में प्लेटफ़ॉर्म पर्यावरण चर को हटा सकते हैं, या MSBuild के पैरामीटर के रूप में स्पष्ट प्लेटफ़ॉर्म प्रॉपर्टी में पास कर सकते हैं।

+1

उह, धन्यवाद। पूरी तरह से अप्रत्याशित। एमएसएफटी बेहतर ढंग से अपने x86/x64 टूल्स स्टोरी को सीधा करता है। –

+4

32-बिट प्रॉम्प्ट x86 प्लेटफॉर्म को मजबूर नहीं करता है। –