2013-01-10 21 views
19

लटकता है मैं वर्तमान में कुछ और अधिक सुरुचिपूर्ण - ऑक्टोपस के साथ हमारे हैक किए गए एक साथ तैनाती प्रणाली को फिर से जोड़ रहा हूं। ऐसा करने में, जब मैं रिलीज बिल्ड चलाता हूं तो मैं एक प्रोजेक्ट को पैकेज करने के लिए वीएस प्राप्त करने की कोशिश कर रहा हूं। खैर मेरे पास यह फैंसी पावरहेल स्क्रिप्ट लिखी और काम कर रही है, लेकिन जब मैं एमएसबिल्ड स्क्रिप्ट से EXEC की कोशिश करता हूं, तो विजुअल स्टूडियो बस लटकता है!Exec powershell.exe msbuild

सबसे पहले मुझे संदेह था कि शैल में सामान से बचने का तरीका था, लेकिन मैंने इसे हास्यास्पद रूप से सरल बना दिया, और यह अभी भी जम गया।

<PropertyGroup> 
     <PowerShellExe Condition=" '$(PowerShellExe)'=='' "> 
     %WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe 
     </PowerShellExe> 
    </PropertyGroup> 

    <Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
     <Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command get-childitem" /> 
    </Target> 

सभी यह करना चाहिए निर्देशिका प्रविष्टि देने है:

यहाँ प्रासंगिक MSBuild कोड है। cmd.exe से इस कॉलिंग ठीक काम करता है:

C:\Users\smithj>%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe -noninteractive -executionpolicy unrestricted -command dir 

इस कोशिश कर रहा है:

msbuild Solution.sln /p:Configuration=Release 

मुझे इस हो जाता है:

AfterBuild: 
    "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\\tf.exe" che 
    ckout Package.nuspec 
    Package.nuspec 

     %WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe 
     -NonInteractive -executionpolicy Unrestricted -command dir 

    Windows PowerShell 
    Copyright (C) 2009 Microsoft Corporation. All rights reserved. 

उसके बाद, यह बस हमेशा के लिए लटका हुआ है। किसी भी सुझाव का स्वागत है।

उत्तर

28

सुनिश्चित नहीं हैं कि आप जवाब पसंद करने के लिए जा रहे हैं। कुछ खेलने के बाद, यह संपत्ति समूह के विस्तार के बारे में प्रतीत होता है। आपने PowerShellExe के मान में एक नई लाइन डाली है। यह ठीक काम करता है:

<PropertyGroup> 
    <PowerShellExe Condition=" '$(PowerShellExe)'=='' ">$(WINDIR)\System32\WindowsPowerShell\v1.0\powershell.exe</PowerShellExe> 
    </PropertyGroup> 

    <Target Name="AfterBuild"> 
    <Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy bypass -command &quot;&amp;{get-childitem}&quot;" /> 
    </Target> 
+0

वैसे मैं निश्चित रूप से यह नहीं देख रहा था। आप बिल्कुल सही हैं। संयोग से यह नहीं है कमांड प्रॉपर्टी में न्यूलाइन की तरह। वैसे भी, आपने सिर पर नाखून मारा। मैंने इस पर घंटों बिताए .. यह अंत में हमेशा बेवकूफ है :) बहुत बहुत धन्यवाद! – monkeybuffer

+0

एनपी मेरी खुशी। –

+0

मैंने इसके साथ घंटों तक लड़ा। मेरी इच्छा है कि "msbuild फ़ाइल में लाइन ब्रेक न डालें" से बेहतर जवाब था। मुझे आश्चर्य है कि क्या एक अतिरिक्त अर्धविराम या कुछ अंततः इस के आसपास हो जाएगा? असल में, मुझे लगता है कि यह टर्मिनल लाइन में प्रवेश करने की प्रतीक्षा कर रहा है जैसे कि पावरहेल में जब आप लाइन ब्रेक के साथ कई लाइनों को फैलाते हैं तो आपको अंत में अतिरिक्त एक रखना होगा। किसी भी तरह से, मुझे कितनी राहत मिलती है कि मैं कम से कम इस पर काम कर सकता हूं। मुझे इस तरह की चीजों पर अपने पहियों को कताई से नफरत है। – EdFred

0

प्रयास करें:

<Exec Command='$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command "& {Get-ChildItem}"' /> 
+1

कोई पासा नहीं। एक सटीक प्रतिलिपि/पेस्ट एक वाक्यविन्यास त्रुटि उत्पन्न करता है, लेकिन "&" के साथ "&" से बचने के बाद भी यह अभी भी लटक रहा है :( – monkeybuffer