2012-05-06 12 views
5

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

मैं वर्तमान में नई परियोजना निम्नलिखित तरीके से वर्तमान प्रोजेक्ट फाइल के आधार पर उदाहरण प्राप्त कर सकते हैं:

List projectAssemblies = new List(); 
using (XmlReader projectFileReader = 
    XmlReader.Create(this.BuildEngine.ProjectFileOfTaskNode)) 
{ 
    Project project = new Project(projectFileReader); 
    foreach (ProjectItem item in project.AllEvaluatedItems) 
    { 
     ... woo hoo ... 
    } 
} 

लेकिन यह सिर्फ परेशानी का एक बहुत की तरह लगता है। मैं उस परियोजना तक पहुंच कैसे प्राप्त कर सकता हूं जिससे मेरा कार्य लागू किया जाता है?

उत्तर

5

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

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

+1

आप सही हैं। यहां तक ​​कि कार्य में कुछ मूल ऑब्जेक्ट को संदर्भित करने के बजाय, इसके कंटेनर प्रोजेक्ट से संदर्भित किया गया है। जैसा कि मैं वर्तमान में संदर्भ देने का प्रयास कर रहा हूं, मैं इस मूल कार्य के समान संदर्भ में संदर्भ प्राप्त करना चाहता हूं। – bojolais

+0

वैश्विक संपत्तियों के बारे में क्या? क्या उन्हें कार्य के भीतर एक्सेस किया जा सकता है? – Irek

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