2012-10-18 18 views
5

चलाते समय वर्तमान निर्देशिका को हल करने के लिए कैसे करें मैं एक कोडेडयूआई परीक्षण चला रहा हूं जो एक डीएलएल का संदर्भ देता है और डीएलएल एक प्रकार की "कॉन्फ़िगरेशन" फ़ाइल को पुन: उत्पन्न करता है। वर्तमान निर्देशिका परीक्षण चल रहा है जबकि एक जहां CodedUI परीक्षण के परिणाम फ़ाइलें मैंकोडित यूआई

AppDomain.CurrentDomain.BaseDirectory 

और

System.Reflection.Assembly.GetExecutingAssembly().CodeBase 

और

System.Reflection.Assembly.GetExecutingAssembly().Location 

का उपयोग किया है ये सब मुझे ही देना डालता रिटर्न पथ

मुझे जिस पथ की आवश्यकता है वह प्राप्त करने के लिए है जहां डीएलएल रहता है क्योंकि वह कॉन्फ़िगरेशन फाई है ले बनाया जाएगा।

वह स्थान जहां यह डिबगिंग कर रहा है या यदि मैं केवल परीक्षण चला रहा हूं (स्पष्ट रूप से) तो मैं बदल जाऊंगा, इसलिए मैं इसका उपयोग नहीं कर सकता और पीछे की तरफ या कुछ भी नेविगेट नहीं कर सकता।

क्या आपके द्वारा संदर्भित डीएलएल का स्थान प्राप्त करने के कोई अन्य तरीके हैं ??

संपादित करें:

मैं DLL कि मैं संदर्भित कर रहा हूँ अंदर से इस कॉन्फ़िग फ़ाइल को संदर्भित कर रहा हूँ।

+0

पूर्ण स्रोत कोड के साथ कोई अंतिम समाधान? – Kiquenet

उत्तर

3

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

using System.Reflection; 
    using Microsoft.VisualStudio.TestTools.UnitTesting; 
    public static string CodeBase(
     TestContext testContext) 
    { 
     System.Type t = testContext.GetType(); 
     FieldInfo field = t.GetField("m_test", BindingFlags.NonPublic | BindingFlags.Instance); 
     object fieldValue = field.GetValue(testContext); 
     t = fieldValue.GetType(); 
     PropertyInfo property = fieldValue.GetType().GetProperty("CodeBase"); 
     return (string)property.GetValue(fieldValue, null); 
    } 

मैं इस प्रयोग किया जाता है DLL कि रन हो रही है के लिए पथ और फिर अनुप्रयोग है कि मैं जानता हूँ कि एक ही स्थान के रूप में परीक्षण पर था करने के लिए संकलित किया गया है चलाने के लिए है कि उपयोग करने के लिए।

अगर किसी को यह प्राप्त करने का बेहतर तरीका मिल जाए, तो कृपया मुझे भी बताएं।

+0

के आसपास दूसरी तरफ लोड नहीं किया गया है, मैंने एक ही कार्य को पूरा करने के लिए अभी भी एम्बेडेड संसाधनों को लागू किया है लेकिन यह बहुत अच्छा है! मुझे आश्चर्य है कि क्यों माइक्रोसॉफ्ट ने इस तरह से परीक्षण लागू करने का फैसला किया ... –

+0

मैं बस सभी को यह जानना चाहता हूं कि इसका उपयोग कौन करता है, आमतौर पर आपके द्वारा निर्मित स्थान का उपयोग किया जाता है और यदि आप एक परीक्षण चलाने की प्रक्रिया में हैं जो इस से लौटाए गए पथ का उपयोग करता है, और आप एक ही समय में एक नया निर्माण करने का प्रयास करते हैं , फ़ाइलों को लॉक होने पर लॉक कर दिया जाएगा और आप परीक्षण विफल हो सकते हैं या संकलन विफल हो सकते हैं या दोनों। –

1

किसी दिए गए डीएलएल से लोड की गई निर्देशिका की निर्देशिका प्राप्त करने का सबसे अच्छा तरीका उस असेंबली में परिभाषित एक प्रकार पर निम्न का उपयोग करना है।

var type = typeof(TypeInThatAssembly); 
var path = Path.GetDirectory(type.Location); 

CodeBase और Location संपत्ति अक्सर एक ही जानकारी लौटने लेकिन बहुत अलग

  • codebase हैं: इस विधानसभा के लिए स्थान के रूप में यह लोड
  • स्थान दौरान संदर्भित किया गया था शामिल हैं: यह जहां है विधानसभा वास्तव में

ये डिस्क पर से लोड किया गया था जो छाया पुलिस का उपयोग आवेदन में भिन्नता हो सकती है ied असेंबली (Asp.Net, xUnit, आदि ...)

+0

आपके सुझाव के लिए धन्यवाद लेकिन यह मुझे अन्य दो कार्यों के समान पथ प्राप्त कर रहा है। मुझे और स्पष्टीकरण की आवश्यकता हो सकती है। –

+0

कारण यह काम नहीं करता है क्योंकि इसकी प्रतिलिपि बनाई जा रही है और फिर –

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