.net - When implementing a microsoft.build.utilities.task how to i get access to the various environmental variables of the build? -


एक microsoft.build.utilities.task को लागू करते समय कैसे मैं बिल्ड के विभिन्न पर्यावरणीय चर तक पहुंच प्राप्त कर सकता हूं?

मुझे पता है कि मैं इसे कार्य एक्सएमएल

  & lt; MyTask TargetPath = "$ (TargetPath) के भाग के रूप में पास कर सकता हूं "/ & Gt;  

लेकिन मैं कार्य के उपभोक्ता को मजबूर नहीं करना चाहता हूं कि अगर मैं कोड में वेरिएबल का उपयोग कर सकता हूं।

< / Div>

मैंने यह कैसे किया है

  सार्वजनिक स्थिर वर्ग BuildEngineExtensions {const BindingFlags bindingFlags = बाइंडिंगफ़्लैग्स। नॉनपॉलिक | बाईंडिंगफ़्लैग्स.फ्लैटनहैरराकी | बाइंडिंगफ़्लैग.इंस्टेंस | BindingFlags.Public; सार्वजनिक स्थिर IEnumerable GetEnvironmentVariable (यह IBuildEngine बिल्ड इंजन, स्ट्रिंग कुंजी, bool throwIfNotFound) {var projectInstance = GetProjectInstance (buildEngine); Var आइटम = प्रोजेक्ट इंस्टेंस। आईटम्स। जहां (एक्स = & gt; स्ट्रिंग। एक्लल्स (एक्स। इटम टाइप, कुंजी, स्ट्रिंग कॉमपारन। इन्वैलरियंट कल्चर इग्नोर केस)।) ToList (); यदि (आइटम। गणना & gt; 0) {वापसी आइटम। चयन (x = & gt; x.EvaluatedInclude); } Var गुण = projectInstance.Properties। जहां (एक्स = & gt; स्ट्रिंग। एक्लॉल्स् (x.Name, कुंजी, स्ट्रिंग कॉमपिरसन। इन्वेरियंट कल्चर इग्नोर केस))। ToList (); अगर (गुण। गणना & gt; 0) {वापसी गुण। चयन (x = & gt; x.EvaluatedValue); } अगर (throwIfNotFound) {नया अपवाद फेंकना (स्ट्रिंग। प्रारूप ("'{0}' पर्यावरण चर से निकाले नहीं जा सका।", कुंजी)); } वापसी गणनीय। खाली (); } स्थिर प्रोजेक्ट इंस्टेंस GetProjectInstance (IBuildEngine buildEngine) {var buildEngineType = buildEngine.GetType (); Var targetBuilderCallbackField = buildEngineType.GetField ("targetBuilderCallback", बाइंडिंगफ़्लैग्स); यदि (targetBuilderCallbackField == नल) {नया अपवाद फेंक ("" लक्ष्य Builder कॉलबैक को "+ buildEngineType.FullName" से निकाला नहीं जा सकता है); } Var targetBuilderCallback = targetBuilderCallbackField.GetValue (buildEngine); Var लक्ष्यकॉलबैकटाइप = लक्ष्यबिल्डरकॉलबैक। गेटटाइप (); Var प्रोजेक्ट इन्स्टेंसफ़िल्ड = लक्ष्य कॉलबैक टाइप। गेटफिल्ड ("प्रोजेक्ट इंस्टेंस", बाइंडिंग फ़्लेग्ज); यदि (projectInstanceField == नल) {नया अपवाद फेंक ("" से लक्ष्य नहीं कर सका projectInstance "+ targetCallbackType.FullName"); } रिटर्न (प्रोजेक्ट इंस्टेंस) प्रोजेक्ट इन्स्टेंसफिल्ड.गेट वैल्यू (लक्ष्यबिल्डर कॉलबैक); }}  

और इसका उपयोग इस तरह किया जा सकता है

  स्ट्रिंग लक्ष्यपथ = बिल्डइंजिन। गेट पर्यावरण परिवेश ("लक्ष्यपैथ", सच)। पहले (); स्ट्रिंग मध्यवर्ती विधानसभा = बिल्डइंजिन। GETEnvironmentVariable ("इंटरमीडिएट विधानसभा", सत्य)। पहले (); IEnumerable & LT; स्ट्रिंग & gt; संदर्भपाठ = बिल्डइंजिन.गेट पर्यावरण परिवेश ("संदर्भपैथ", सच);  

हाँ यह बदसूरत और काले जादू है लेकिन यह काम करता है।


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -