2015-10-26 8 views
22

जब मैं अपने आवेदन केवल एक AppDomain है कि शुरू होता है, AppDomain.CurrentDomain.SetupInformation.PrivateBinPath रिक्त है। यहां तक ​​कि जिन्हें आप नीचे देख रहा रास्तों MyApp.exe.configमें सेट की जांच की है, हालांकि।AppDomain.CurrentDomain.SetupInformation.PrivateBinPath अशक्त

मैं expeceted होगा कि AppDomain.CurrentDomain.SetupInformation.PrivateBinPath स्ट्रिंग "Dir1;Dir2;Dir3" है।

MyApp.exe.config में कॉन्फ़िगर किए गए प्रोबिंग पथ का उपयोग कैसे कर सकता हूं?

<?xml version="1.0" encoding="utf-8"?> 

<configuration> 
    <appSettings> 
    <add key="Foo" value="Bar" /> 
    </appSettings> 
    <startup> 
    <!-- supportedRuntime version="v1.1.4322"/--> 
    </startup> 

    <runtime> 
    <gcConcurrent enabled="true" /> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <publisherPolicy apply="yes" /> 

     <!-- Please add your subdirectories to the probing path! --> 
     <probing privatePath="Dir1;Dir2;Dir3" /> 
    </assemblyBinding> 
    </runtime> 
    <system.windows.forms jitDebugging="true" /> 
</configuration> 

अद्यतन

के रूप में हंस Passant comment below ने कहा, SetupInformation.PrivateBinPath प्राथमिक appdomain के लिए सेट नहीं है। तो उपर्युक्त काम नहीं करता है। प्रोबिंग पथ में असेंबली के लिए फ़्यूज़न खोजों के तरीके को अनुकरण करने के लिए आपका सुझाव क्या होगा या कम से कम <probing privatePath="" /> वर्तमान एप्लिकेशन कॉन्फ़िगरेशन से खाते में ले जाएगा? सबसे अच्छी बात मैं के साथ आ सकते हैं App.config से <probing privatePath="" /> पढ़ने के लिए मैन्युअल रूप से जब वर्तमान डोमेन प्राथमिक appdomain (AppDomain.CurrentDomain.IsDefaultAppDomain()true है) है। क्या कोई बेहतर तरीका है?

अद्यतन 2

यहाँ कुछ अतिरिक्त पृष्ठभूमि जानकारी है कि इस के लिए आवश्यक है: Nancy framework की AppDomainAssemblyTypeScanner.GetAssemblyDirectories() में हुई यह समस्या।

नैन्सी autodiscovers और लोड 3 पार्टी मॉड्यूल और अन्य "प्लग इन"। डिफ़ॉल्ट रूप से यह वैसे ही किया जाना चाहिए जैसा सामान्य रूप से जुड़े असेंबली लोड हो जाएंगे (यानी संलयन के रूप में यह जांच करेगा) जांच पथों को देखकर। सभाओं का उपयोग कर लोड किए गए हैं Assembly.Load (के रूप में Assembly.LoadFrom के खिलाफ) इतनी के रूप में मैं इसे समझते हैं, सभी निर्भर लोड विधानसभाओं के विधानसभाओं पहुंच योग्य आवेदन/appdomain की जांच कर रास्ते में भी होना चाहिए।

+2

यह असेंबली खोजने के लिए "फ्यूजन" नामक एक अलग एपीआई का उपयोग करके सीएलआर का दुष्प्रभाव नहीं है। डेटा प्रवाह app.config => प्राथमिक एपडोमेन और appdomainsetup => आपके द्वारा बनाए गए लोगों के लिए संलयन के लिए संलयन है, अन्य तरीकों से नहीं। –

+8

यह एक बड़ा XY प्रश्न बनने के लिए आकार दे रहा है। वह अत्यधिक बक्षीस "कॉन्फ़िगरेशन फ़ाइल को पार्स" उत्तरों का उत्पादन करने जा रहा है। एक .NET कार्यक्रम में भी फ़्यूज़न आसानी से उपलब्ध है, बहुत संभावना है कि आपको किसी और चीज की आवश्यकता है। लेकिन हम अनुमान नहीं लगा सकते हैं, * वास्तविक * समस्या क्या है, यह क्यों मायने रखती है कि आप जांच पथ जानते हैं? –

+0

आप इसके लिए क्या करने की कोशिश कर रहे हैं? आपको PrivateBinPath की आवश्यकता क्यों है? वास्तव में क्या करने के लिए "क्या कोई बेहतर तरीका है"? – Mick

उत्तर

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