2009-10-01 19 views
8

मैं एक एमएसबील्ड फ़ाइल स्थापित करने की कोशिश कर रहा हूं जो एक और एमएसबील्ड फ़ाइल का आह्वान करेगा और मैं सोच रहा हूं कि इसे प्राप्त करने का सबसे अच्छा तरीका क्या है।एमएसबिल्ड कार्य बाहरी एमएसबील्ड फ़ाइल को निष्पादित करने के लिए

हम उस परिदृश्य में इसका उपयोग कर रहे हैं जहां एक बिल्ड सर्वर एक MSBuild फ़ाइल डाउनलोड करता है जो तब पैरामीटर के आधार पर उचित 2 फ़ाइल निष्पादित करेगा।

मुझे पता है कि मैं केवल <Exec Command="msbuild.exe ..." /> कार्य का उपयोग कर सकता हूं, लेकिन ऐसा लगता है कि यह हैकी ऐसा करने का तरीका है।

क्या MSBuild को किसी अन्य MSBuild फ़ाइल को निष्पादित करने का उपयोग करने का कोई आसान तरीका है?

उत्तर

13

आप किसी अन्य MSBuild प्रोजेक्ट में लक्ष्य बनाने के लिए MSBuild task का उपयोग कर सकते हैं।

आप एमएसबिल्ड परियोजनाओं दोनों द्वारा आयात की गई बाहरी। लक्ष्य फ़ाइल में भी लक्ष्य डाल सकते हैं और इसे बनाने के लिए CallTarget task का उपयोग कर सकते हैं।

अद्यतन: बाहरी आदेश निष्पादित करने के लिए, Exec task का उपयोग करें।

+0

आह! मुझे पता था कि एक बेहतर तरीका होना चाहिए था। मैं पहले एमएसबिल्ड कार्य में नहीं आया था :) –

+1

बाहरी फ़ाइल निष्पादित करने के लिए आप MSBuild कार्य का उपयोग कैसे करते हैं? क्या आप दिखा सकते हैं कि यह कैसे करें? –

2

एडम ओरेन की टिप्पणी का जवाब: बाहरी फ़ाइल निष्पादित करने के लिए यहां एक उदाहरण दिया गया है - इस मामले में, यह नुनिट लॉन्च करता है। % 22 इसका मतलब है "तो आप अपने निष्पादन योग्य पथ में रिक्त स्थान हो सकता है, से बचने के लिए है।

<Exec Command="%22$(NUnit_Install_Directory)bin\net-2.0\nunit-console.exe%22 
/noshadow @(TestableAssemblies, ' ') /xml 
$(BuildFilesPath)\NCover-NUnit-Results.xml" /> 

आप चर का उपयोग करने के लिए की तरह मैंने किया था की जरूरत नहीं है, लेकिन मैं लगता है कि यह अपनी स्क्रिप्ट अधिक पोर्टेबल बनाता है। $ (NUnit_Install_Directory) यह सिर्फ <Exec Command="msbuild.exe .."/> बजाय <MSBuild> कार्य का उपयोग करने के खूबसूरत नहीं कर रहा है के रूप में

<PropertyGroup> 
    <NUnit_Install_Directory>c:\Program Files\NUnit 2.5.3\</NUnit_Install_Directory> 

7

परिभाषित किया गया है। इसका मतलब है कि एक MSBuild प्रक्रिया जानता है सभी परियोजनाओं के बारे में बनाया जा रहा है, और फिर कोई टकराव नहीं है; एक विशेष परियोजना को दो धागे द्वारा एक बार में बनाया जा सकता है। यदि आप "/ एम" के साथ निर्माण कर रहे हैं तो यह आमतौर पर महत्वपूर्ण है। कुछ अन्य फायदे भी हैं, जैसे पूरे निर्माण के लिए लॉगर्स का एक सेट है।

0
<Target Name="TA"> 
    <CallTarget Targets="TB"/> 
</Target> 

<Target Name="TB"> 
    <Message Text="TB..." /> 
</Target> 
संबंधित मुद्दे