c# रखरख क्या बाध्यकारी पुस्तकालयों में app.config को पुनर्निर्देशित करना पुस्तकालय के लिए कुछ भी करता है?




विद्यालय पुस्तकालय के नियम (4)

वीएस समाधान मैं अक्सर एक एकल निष्पादन योग्य परियोजना (कंसोल ऐप, वेब ऐप) और कई कक्षा पुस्तकालय परियोजनाओं से मिलकर काम करता है जो सभी निष्पादन योग्य द्वारा संदर्भित होते हैं।

जब NuGet के साथ काम करते हैं और पैकेज स्थापित करते हैं, तो प्रायः प्रत्येक प्रोजेक्ट के लिए एक app.config फ़ाइल बनाई जाती है, जिसमें आमतौर पर बाइंडिंग पुनर्निर्देश की सूची के अलावा और कुछ नहीं होता है जो संदर्भित असेंबली के संस्करणों को समेकित करता है। कभी-कभी कुछ तृतीय-पक्ष लाइब्रेरी-विशिष्ट सामग्री (जैसे कि एंटिटी फ्रेमवर्क कॉन्फिगरेशन सेक्शन) होती है, लेकिन आइए अब इसके लिए एक तरफ छोड़ दें।

जब मैं समाधान का निर्माण करता हूं और मुख्य निष्पादन योग्य परियोजना के बायनेरिज़ का उपयोग करता हूं, तो मैं निर्माण आउटपुट में सभी क्लास लाइब्रेरी प्रोजेक्ट असेंबली को संबंधित *.config फ़ाइलों के साथ देखता हूं ( app.config फ़ाइल का नाम बदलकर AssemblyName.config नाम *.config हो जाता है) ।

मुख्य निष्पादन योग्य लॉन्च करते समय, क्लास लाइब्रेरी असेंबली की कॉन्फिग फाइल्स क्या कोई प्रभाव डालती हैं? या यह निष्पादन योग्य की सिर्फ app.config फ़ाइल है जिसका इस मामले में प्रभाव है? यदि कुछ लाइब्रेरी लाइब्रेरी प्रोजेक्ट्स पर कुछ बाध्यकारी रीडायरेक्ट्स स्थापित हैं, और मुख्य निष्पादन योग्य प्रोजेक्ट पर कुछ अलग-अलग बाइंडिंग रीडायरेक्ट्स सेट किए गए हैं - ये संयुक्त कैसे हैं, जो प्राथमिकता लेते हैं?

मैंने इस पर ऑनलाइन शोध करने की कोशिश की है और जो मैंने पढ़ा है, उससे मुझे ऐसा लगता है जैसे गैर-निष्पादन योग्य असेंबली के लिए फाइल app.config फाइलें बेकार (बाध्यकारी पुनर्निर्देशन के संबंध में) बेकार हैं। क्या कोई इसकी पुष्टि कर सकता है या विषय पर थोड़ा और विस्तार कर सकता है?

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

मुझे इन मौजूदा स्टैक ओवरफ्लो सवालों के विषय में पता चला, लेकिन उनके स्वीकृत जवाब वास्तव में विरोधाभासी हैं जब वे एक दूसरे के डुप्लिकेट के रूप में चिह्नित होते हैं

पहले प्रश्न के स्वीकृत उत्तर में उल्लेख किया गया है कि app.config फाइलें वास्तव में संकलन-समय के दौरान उपयोग की जाती हैं, जिसका अर्थ है कि उनका प्रभाव हो सकता है। MSDN और MSBuild स्रोत कोड जैसे स्रोतों को एक प्रमाण के रूप में उद्धृत किया जाता है जिसका उपयोग संकलन-समय के दौरान किया जाता है। दुर्भाग्य से, मैं यह समझने के लिए पर्याप्त नहीं हूँ कि यह कैसे उपयोग किया जा रहा है, और यदि यह वास्तव में एक मान्य तर्क है, तो MSBuild में पर्याप्त नहीं है।

क्या कोई भी एक उदाहरण परिदृश्य का वर्णन कर सकता है कि यह साबित करने के लिए कि एक app.config एक पुस्तकालय के लिए बाध्यकारी रीडायरेक्ट के साथ कुछ भी कर सकता है?


मेरे पास एक जैसे सेटअप के साथ कई एप्लिकेशन हैं - वेब एप्लिकेशन में प्रत्येक लाइब्रेरी में प्रत्येक अपने खुद के नगेट पैकेज आदि को संदर्भित करते हुए, मेरे व्यक्तिगत अनुभव के आधार पर लाइब्रेरी प्रोजेक्ट्स में असेंबली बाइंडिंग को रन टाइम के दौरान नहीं माना जाता है।

मूल एप्लिकेशन (वेब ​​/ कंसोल) में वेब या एप्लिकेशन कॉन्फिगर किए गए बाइंडिंग केवल मायने रखते हैं। मेरे सभी लाइब्रेरी प्रोजेक्ट्स "कॉपी टू आउटपुट डायरेक्टरी" सेटिंग के साथ ऐप्पकॉन्फिग फाइल के लिए "कॉपी न करें" के रूप में सेट किए गए हैं - इस तरह मेरा आउटपुट फोल्डर dll और उनके कॉन्फिग फाइल से क्लू नहीं हुआ है।

यहां वह लिंक है जो कहता है कि विधानसभा कैसे भरी हुई है और इसे कहां खोजा जा रहा है और इसका क्रम क्या है। नहीं जहां लेख में वे व्यक्तिगत परियोजना विन्यास फाइल के बारे में बात करते हैं।

उम्मीद है की वो मदद करदे।


आम तौर पर केवल एक कॉन्फ़िगरेशन फ़ाइल होती है और निष्पादन योग्य (.exe.config, web.config) की कॉन्फ़िगरेशन फ़ाइल को thats।

किसी भी असेंबली रीडायरेक्ट को निष्पादन योग्य की कॉन्फ़िगरेशन फ़ाइल में रखा जाना चाहिए।

Dlls की विन्यास फाइल को विन्यासनगर वर्ग का उपयोग करके मैन्युअल रूप से लोड करने की आवश्यकता है। इस प्रश्न को एक पुस्तकालय (DLL) के लिए 'app.config' के समतुल्य देखें


नहीं, केवल निष्पादन योग्य app.config का प्रभाव पड़ेगा। उदाहरण के लिए, यदि आपके पास WCF सेवा की मेजबानी करने वाला कंसोल ऐप है, और आपकी WCF सेवा में, जिसका आप उपयोग करते हैं, उदाहरण के लिए, ConfigurationManager.AppSettings , AppSettings कंसोल होस्ट app.config फ़ाइल से आएगा। यदि आप कंसोल कंसोल से कनेक्ट करने का प्रयास करने के लिए किसी अन्य कंसोल एप्लिकेशन (ConsoleClient) को स्पिन करते हैं, तो उन हिस्सों में जहां कंसोल कंसोल को "निष्पादित करना" कहा जा सकता है (उदाहरण के लिए इसकी मुख्य विधि में), यह कंसोल कंसोल ऐप का उपयोग करेगा। जैसे ही यह WCF सेवा का उपयोग करना शुरू करता है, WCF सेवा ConsoleHost के ऐप का उपयोग करने के लिए प्रतिनिधि होगी app.config । (ध्यान दें कि यह अंतिम बिंदु WCF के पीछे के विवरणों से अधिक प्रासंगिक है, हालांकि)

हैरानी की बात है, msdn ने यह महान स्रोत प्रदान किया: https://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?referrer=http://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?referrer=http://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?forum=wcf


इस पुराने msdn लेख के अनुसार:

एक एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल एक XML फ़ाइल है जिसका उपयोग असेंबली बाइंडिंग को नियंत्रित करने के लिए किया जाता है। यह किसी एप्लिकेशन को साइड-बाय-साइड असेंबली के एक संस्करण का उपयोग करके उसी असेंबली के दूसरे संस्करण में पुनर्निर्देशित कर सकता है। इसे प्रति-एप्लिकेशन कॉन्फ़िगरेशन कहा जाता है। एक एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल केवल एक विशिष्ट एप्लिकेशन मेनिफ़ेस्ट और निर्भर असेंबली पर लागू होती है। एक एम्बेडेड [ ISOLATIONAWARE_MANIFEST_RESOURCE_ID ] मैनिफ़ेस्ट के साथ संकलित घटकों को एक अलग एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल की आवश्यकता होती है। CreateActCtx के साथ प्रबंधित मैनिफ़ेस्ट को एक अलग एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल की आवश्यकता होती है।

इसलिए केवल ISOLATIONAWARE_MANIFEST_RESOURCE_ID सेट के साथ dll वास्तव में एक स्वतंत्र अनुप्रयोग कॉन्फ़िगरेशन का उपयोग करता है, अन्यथा यह मुख्य प्रक्रिया कॉन्फ़िगरेशन फ़ाइल के लिए आस्थगित है।

ISOLATIONAWARE के बारे में अधिक जानकारी के लिए आप इस अन्य MSDN लेख को पढ़ सकते हैं जो अधिक गहराई तक जाता है।

ISOLATIONAWARE_MANIFEST_RESOURCE_ID का उपयोग मुख्य रूप से DLL के लिए किया जाता है। इसका उपयोग किया जाना चाहिए यदि dll प्रक्रिया डिफ़ॉल्ट के अलावा निजी निर्भरता चाहता है। उदाहरण के लिए, यदि कोई dll comctl32.dll संस्करण 6.0.0.0 पर निर्भर करता है। इसके पास संसाधन का प्रकार RT_MANIFEST, ID ISOLATIONAWARE_MANIFEST_RESOURCE_ID को comctl32.dll संस्करण 6.0.0.0 पर निर्भर होना चाहिए, ताकि भले ही प्रक्रिया निष्पादन योग्य comctl32.dll संस्करण 5.1 चाहती हो, dll स्वयं अभी भी comctl32.dll के सही संस्करण का उपयोग करेगा।





assembly-binding-redirect