2011-10-23 5 views
8

मैं कमांडलाइन से आने वाली एमएसबिल्ड परियोजना के लिए एक अलग वर्बोजिटिटी चाहता हूं, और एमएसबिल्ड कार्य द्वारा प्रोजेक्ट के भीतर से इन्हें आमंत्रित किया गया है।एमएसबिल्ड कार्य की वर्बोजिटी कैसे बदलें?

my.proj के अंदर::

<Target Name=Foo> 
    <MSBuild Projects="a.csproj;b.csproj;c.csproj"/> 
</Target> 

कमांडलाइन पर: उदाहरण के लिए

msbuild /v:d my.proj 

अब जब MSBuild कार्य .csproj फ़ाइलों बनाता है, यह विस्तृत शब्दाडंबर के साथ करता है और साथ ही। हालांकि मैं इसे न्यूनतम verbosity के साथ बनाना चाहता हूँ।

मैं यह इतना तरह मैन्युअल MSBuild आह्वान करने के लिए संभव है:

<Target Name=Foo> 
    <Exec Command="msbuild /v:m a.csproj"/> 
    <Exec Command="msbuild /v:m b.csproj"/> 
    <Exec Command="msbuild /v:m c.csproj"/> 
</Target> 

या व्यवहार में

<Target Name=Foo> 
    <Exec Command="msbuild /v:m %(Projectlist.Identity)"/> 
</Target> 

और यह अच्छी तरह से बंद पाठ्यक्रम काम करता है, लेकिन फिर मैं BuildInParallel की कार्यक्षमता नहीं मिल सकता है अब स्विच करें (मुझे नहीं लगता कि कमांडलाइन से एमएसबिल्ड को कई परियोजनाओं के साथ समाधान में निहित किए बिना आमंत्रित करना संभव है?)

अद्यतन

मैं लुडवो के विकल्प के साथ गया: मूल रूप से एक कस्टम लॉगर बनाएं जो सदस्य के रूप में दो कंसोल लॉगर रखता है। एक कमांड लाइन पर पारित शब्दशः है, दूसरा एक 'न्यूनतम' है। लॉगर सभी घटनाओं के लिए पंजीकरण करता है और वर्तमान में एक csproj फ़ाइल बना रहा है या नहीं, इस पर निर्भर करता है कि उन्हें लॉगर्स में से एक में भेज दिया जाता है। आउटपुट बिल्कुल सामान्य की तरह दिखता है, सिवाय इसके कि इसमें csproj फ़ाइलों से हजारों लाइनें शामिल नहीं हैं।

+0

इस पोस्ट ProjectFinished स्कॉट हंसेलमैन द्वारा आपको प्रबुद्ध कर सकते हैं। http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx –

+0

+ दिलचस्प पढ़ा।हालांकि मेरी परियोजनाएं समाधान में निहित नहीं हैं, इसलिए '/ m' स्विच समान प्रभाव में परियोजनाओं को प्रभावी ढंग से बनाने के समान प्रभाव नहीं है: वे अभी भी अनुक्रमिक रूप से निर्मित हैं (मैं इसे प्रतिबिंबित करने के लिए प्रश्न अपडेट करूंगा) – stijn

+0

हमारी परियोजनाओं में से एक पर हमने एमएसबिल्ड साइडकिक का उपयोग यह पता लगाने के लिए किया कि हमारे उत्पाद पदानुक्रम को कैसे बनाया जाए, कार्यों के पक्षाघात पर सहायता करने के लिए एक लायक हो सकता है। http://www.attrice.info/msbuild/ अजीब लगता है कि शब्दशः समांतरता के साथ मिलकर है। –

उत्तर

4

आप एबीसी परियोजनाओं "BuildABC.proj" के निर्माण के लिए एक अतिरिक्त MSBuild स्क्रिप्ट बनाएं दो विकल्प (कम से कम) :)

  1. है

    <Target Name="BuildABC"> 
         <MSBuild Projects="a.csproj;b.csproj;c.csproj" BuildInParallel="true"/> 
        </Target> 
    

    अपने माता पिता की स्क्रिप्ट में अमल का उपयोग कर MSBuild कार्य निष्पादन करें और "BuildABC.proj" न्यूनतम verbosity

    <Target Name=Foo> 
         <Exec Command="msbuild /v:m /m:2 BuildABC.proj"/> 
        </Target> 
    

    आपको BuildABC प्रोजेक्ट में msbuild/p पैरामीटर के लिए आवश्यक सभी मूलभूत गुणों को स्पष्ट रूप से पारित करना होगा।

  2. कस्टम लॉगर का उपयोग करें। See this how to do it। इस मामले में आप अपनी मूल स्क्रिप्ट का उपयोग कर सकते हैं:

    <Target Name=Foo> 
        <MSBuild Projects="a.csproj;b.csproj;c.csproj"/> 
    </Target> 
    

    अपने कस्टम लॉगर में उदा। "A.csproj" ProjectStarted के बीच परियोजना और घटनाओं जहां e.ProjectFile == "a.csproj" (नैदानिक ​​शब्दाडंबर के साथ माता-पिता परियोजना के निर्माण, जबकि "a.csproj" परियोजना पर निदान लॉगिंग अक्षम करने के लिए)

+0

का आह्वान करके कोशिश कर रहा है, हाँ, मैंने पहले ही इस दृष्टिकोण की कोशिश की है, साथ ही साथ उसी बिल्डस्क्रिप्ट में कॉल करना (उदाहरण के लिए parent.proj में कॉल करें ' '; यह काम करता है, लेकिन एक * प्रमुख * नुकसान है: अभिभावक निर्माण स्क्रिप्ट से सभी गुण उपलब्ध नहीं हैं दूसरे में स्पष्ट रूप से पारित होने तक। जो बहुत अधिक गुण होते हैं, जो एक प्रमुख पिटा बन जाता है, साथ ही प्रत्येक बार जब भी जोड़ा जाता है तो आपको दो स्थानों पर जोड़ना होता है। – stijn

+0

मैंने अपना उत्तर अपडेट किया;) – Ludwo

+0

धन्यवाद! जब मेरे पास कुछ समय होता है तो मैं कस्टम लॉगर समाधान में देखता हूं, यह आशाजनक दिखता है। – stijn

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