2008-08-03 30 views
14

मैं इस समय क्रूज़ कंट्रोल.net स्थापित करने की कोशिश कर रहा हूं। अब तक यह अच्छा काम करता है, लेकिन मुझे एमएसबिल्ड टास्क के साथ समस्या है।CruiseControl.net, msbuild,/p: आउटपुटपैथ और CCNetArtifactDirectory

Documentation के अनुसार, यह MSBuild को CCNetArtifactDirectory पास करता है। लेकिन मैं इसका उपयोग कैसे करूं?

<buildArgs> 
    /noconsolelogger /p:OutputPath=$(CCNetArtifactDirectory)\test 
</buildArgs> 

लेकिन वह काम नहीं करता:

मैं इस कोशिश की।

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Reference to unknown symbol CCNetArtifactDirectory

प्रलेखन बल्कि विरल है, और गूगल अंड मुख्य रूप से .sln परियोजना फ़ाइल है, जो कि मैं क्या मैन्युअल रूप से निर्माण करने के लिए सक्षम होने के लिए आदेश में से बचना चाहते हैं को संशोधित करने देता है: वास्तव में, यह इस त्रुटि के साथ सेवा को मारता है बाद में यह परियोजना - मैं वास्तव में /p:OutputPath पसंद करूंगा।

उत्तर

6

CCNetArtifactDirectory डिफ़ॉल्ट रूप से एमएसबिल्ड को पास कर दिया जाता है, इसलिए आपको इसके बारे में चिंता करने की आवश्यकता नहीं है। एमएसबिल्ड आपके द्वारा निर्दिष्ट कार्यशील निर्देशिका से प्रासंगिक "बिन स्थान" में बिल्ड आउटपुट रखेगा।

<executable>c:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable> 
<workingDirectory>C:\data\projects\FooSolution\</workingDirectory> 
<projectFile>FooSolution.sln</projectFile> 
<buildArgs>/noconsolelogger /p:Configuration=Debug </buildArgs> 

इसलिए उपरोक्त उदाहरण में अपने निर्माण उत्पादन सी ​​में रखा जाएगा: \ डेटा \ परियोजनाओं \ FooSolution [ProjectName] \ बिन \ डिबग। क्या आप एक अलग स्थान पर आउटपुट करना चाहते हैं, जिसे आप सीसीएनईटी में टैग को देखना चाहते हैं।

<publishers> 
    <xmllogger /> 
    <buildpublisher> 
    <sourceDir>C:\data\projects\FooSolution\FooProject\bin\Debug</sourceDir> 
    <publishDir>C:\published\FooSolution\</publishDir> 
    <useLabelSubDirectory>false</useLabelSubDirectory> 
    </buildpublisher> 
</publishers> 

यह आपको अपने आउटपुट को एक अलग स्थान पर प्रकाशित करने की अनुमति देगा।

5

आप एमएसबील्ड स्क्रिप्ट के अंदर आर्टिफैक्ट निर्देशिका चर का उपयोग कर सकते हैं। यहां एक उदाहरण दिया गया है कि मैं अपने CC.Net MSBuild स्क्रिप्ट से अभी FxCop कैसे चला रहा हूं (यह स्क्रिप्ट सीसी.Net क्या है - स्क्रिप्ट में एक "बिल्ड" लक्ष्य भी है जिसमें एसएलएन के खिलाफ एमएसबिल्ड कार्य शामिल है वास्तविक संकलन करते हैं):

<Exec 
    Command='FxCopCmd.exe /project:"$(MSBuildProjectDirectory)\FXCopRules.FxCop" /out:"$(CCNetArtifactDirectory)\ProjectName.FxCop.xml"' 
    WorkingDirectory="C:\Program Files\Microsoft FxCop 1.35" 
    ContinueOnError="true" 
    IgnoreExitCode="true" 
/> 
2

पैरामीटर CCNetArtifactDirectory की तरह वातावरण चर का उपयोग कर बाहरी प्रोग्राम करने के लिए पारित कर रहे हैं। वे बाहरी कार्यक्रम में उपलब्ध हैं लेकिन वे CCNET कॉन्फ़िगरेशन के अंदर नहीं हैं। यह अक्सर भ्रम की ओर जाता है।

आप के बजाय लगातार एक पूर्वप्रक्रमक का उपयोग कर सकते हैं:

<cb:define project.artifactDirectory="C:\foo"> 
<project> 
    <!-- [...] --> 
    <artifactDirectory>$(project.artifactDirectory)</artifactDirectory> 
    <!-- [...] --> 
    <tasks> 
    <!-- [...] --> 
    <msbuild> 
     <!-- [...] --> 
     <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs> 
     <!-- [...] --> 
    </msbuild> 
    <!-- [...] --> 
    </tasks> 
    <!-- [...] --> 
</project>