2012-06-19 15 views
5

मेरे पास निम्नलिखित exec कार्य है, assemblyinfo.cs फ़ाइलों का चेकइन निष्पादित करता है। मैं निकास कोड वापस करने की कोशिश कर रहा हूं, लेकिन किसी कारण से यह हमेशा खाली रहता है।एमएसबिल्ड निष्पादन कार्य, निकास कोड खाली

<!--Checkin if all succeeded--> 
<Exec Condition=" '$(LocalCompilationSuccess)' != 'Failed' and '$(LocalTestSuccess)' != 'Failed' " ContinueOnError="True" 
       Command='&quot;$(TfCommand)&quot; checkin /recursive /comment:"$(NoCICheckInComment) $(BuildDefinitionName): build succeeded, checkin changes." /override:"TeamBuild $(BuildDefinitionName)" $/SomeProject/Trnk' WorkingDirectory="$(SolutionRoot)" > 
    <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/> 
</Exec> 

मैं 2 तरीकों से बाहर निकलने के कोड को पढ़ने के लिए कोशिश की है:

'%(ErrorCode.Identity)' 
'$(ErrorCode)' 

दोनों खाली हैं। कोई सुझाव?

+0

अजीब, '' की कोशिश – sll

उत्तर

13

सामान्य रूप से यह आपके द्वारा दिखाए गए अनुसार काम करता है।

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 
    <Target Name="help"> 
    <Exec ContinueOnError="True" Command='cmd.exe /c dir'> 
     <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/> 
    </Exec> 
    <Message Importance="high" Text="$(ErrorCode)"/> 
    </Target> 
</Project> 

योग्य कुछ बातें आप फिर भी विचार कर सकते हैं:

  • सुनिश्चित करें कि आपके Exec भी कार्यान्वित करें, वह यह है कि

    संदर्भ के लिए, एक अधिक "selfcontained" उदाहरण है Condition True का मूल्यांकन करता है।

  • ErrorCode संपत्ति Message -Task का उपयोग कर, देखने के लिए कि यह वास्तव में (मूल्य जैसा कि आप उम्मीद करने के लिए) के लिए निर्धारित है आउटपुट। हालांकि, सुनिश्चित करें कि विस्तृत संदेश सक्षम करने के लिए Importance='high' या msbuild.exe /v:d चलाकर MSBuild आउटपुट दिखाएगा।

+0

अंक हालत लागू किए जाने से विधि को रोकने की वजह से <संदेश पाठ =/"बाहर निकलें कोड $ (ERRORCODE) है">। धन्यवाद – jaspernygaard

+2

मोनो/एक्सबिल्ड के तहत मुझे ' 'में संपत्ति के लिए' IgnoreExitCode = "true" 'निर्दिष्ट करना था। – weirdan

संबंधित मुद्दे