asp.net - Dev, मंच और उत्पादन वातावरण के बीच web.config को विभेदित करना




deployment configuration (6)

वातावरण के बीच web.config सेटिंग्स में मतभेदों को नियंत्रित करने के लिए किसी के पास कोई अच्छी युक्तियां हैं? मैंने अपने स्रोत नियंत्रण प्रणाली में एक 'कॉन्फ़िग फ़ोल्डर' बनाने का सुझाव दिया है, लेकिन वेब पदानुक्रम के बाहर, और परिनियोजन प्रक्रिया को उचित कॉन्फ़िग फाइलों (web.dev.config, web.staging.config, web.production.config की प्रतिलिपि बनाकर) ) तैनाती पर वेब फ़ोल्डर में मैंने ऐप शुरू होने पर कॉन्फ़िग सेटिंग्स (डब्ल्यूसीएफ एंडपॉइंट, कनेक्शन स्ट्रिंग, आदि) को प्रोग्रामेटिक रूप से कैसे बदलना है, इस पर पोस्ट भी देखे हैं I

यहां सबसे अच्छी प्रथाओं को क्या माना जाता है, और इन सभी या अन्य तरीकों से हर किसी के अनुभव क्या हैं?

सितंबर 2010 को अपडेट करें

यह ध्यान देने योग्य है कि विज़ुअल स्टूडियो 2010 वेब। कॉन्फिग रूपांतरण के माध्यम से इस क्षमता को जोड़ता है। जब आप अपने प्रोजेक्ट (डीबग, देव, स्टेजिंग और रिलीज) के लिए अलग-अलग कॉन्फ़िगरेशन बनाने के लिए बिल्ड कॉन्फ़िगरेशन प्रबंधक (बिल्ड | कॉन्फ़िगरेशन प्रबंधक ...) का उपयोग करते हैं, तो वी.एस. वेब। डिफ़ॉल्ट web.config में मूलभूत रूपरेखाएँ हैं जो आप डीबगिंग के लिए उपयोग करेंगे। web.release.config, web.staging.config आदि में XSLT रूपांतरण होते हैं जो कि जब भी आप सक्रिय बिल्ड कॉन्फ़िगरेशन के आधार पर अपनी प्रोजेक्ट को प्रकाशित करेंगे तब लागू किया जाएगा।


मैं क्रूज़ कंट्रोल .नेट / एनएएनटी का उपयोग करता हूं और एक XMLPoke कार्य करता है जो कि आप निर्माण के रूप में जाने की अनुमति देता है और XPath क्वेरी का उपयोग करके कोई भी कॉन्फ़िगरेशन सेटिंग बदल सकता है।

इसलिए मेरे प्रत्येक बिल्ड लक्ष्य (DEV, UAT, STAGING आदि) में मैंने गुणों का एक समूह सेट किया है और फिर मास्टर बिल्ड लक्ष्य को कॉल करें मास्टर बिल्ड लक्ष्य सभी गुणों के मूल्यों को लेता है और XMLPokes उन्हें कॉन्फ़िग में बनाता है और बनाता है।


मैंने देखा और उपयोग किया है एक विधि है जहां आप अपने वेब के अंदर सेटअप कुंजी.config नामों के द्वारा कंप्यूटर अंतर करने के लिए

उदाहरण के लिए:

<add key="comp1.Environment"       value="DEV"/>
<add key="compdb1.Environment"     value="PROD"/>
<add key="compstage.Environment"    value="STAGE"/>

जाहिर comp1, compdb1 वास्तविक कंप्यूटर नाम हैं।

आप तो कुछ निश्चित करेंगे:

<add key="KeyName,DEV"   value="DevEnvironmentValue"/>

आपके कोड में आपको यह पता लगाने की आवश्यकता होगी कि कौन से वातावरण चल रहा है और फिर उचित कुंजी प्राप्त करें, इसलिए उदाहरण के लिए

private string GetKeyValue() {
    string machineName  = String.Concat(System.Environment.MachineName, ".Environment");
    string environment  = ConfigurationManager.AppSettings[machineName];
    string key          = String.Concat("KeyName", ",", environment);
    string keyValue       = ConfigurationManager.AppSettings[key];

    return keyValue;
}

मेरे दृष्टिकोण में कई कॉन्फ़िग फाइल हैं मैं web.config फ़ाइल में सभी पर्यावरण अज्ञेय सामान (अर्थात् अगर dev, staging, या उत्पादन) पर कोई फर्क नहीं पड़ता। कुछ भी जो पर्यावरण के लिए विशिष्ट है (यानी डेटाबेस कनेक्शन जानकारी, लॉगिंग, डीबग सेटिंग्स आदि) मैं पर्यावरण के लिए विशिष्ट स्थानीय। कॉन्फिग फ़ाइल में डाल दिया। आप तब config.ource ( http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx) का उपयोग कर web.config में local.config सेटिंग्स को शामिल कर सकते हैं )

वेब। कॉन्फ़िग को तब स्रोत नियंत्रण में चेक किया जा सकता है स्थानीय। कॉन्फिग फाइलों में जांच न करें - जो आपको अपने परिनियोजित स्क्रिप्टों में सही एक को लागू करने के लिए मजबूर करता है।


जबकि अन्य जवाबों में से कुछ अधिक उपयुक्त हो सकते हैं, मैं सिर्फ इतना जोड़ूंगा कि मैट बेर्सेथ ने 2007 में अपनी पद्धति को अपनाया था ...

संक्षेप में वह सभी मान रखता है जो स्वामित्व पाठ फ़ाइल में वातावरण के बीच भिन्न होता है और .config फ़ाइलों में मानों को मर्ज करने के लिए बिल्ड प्रक्रिया के दौरान कस्टम उपकरण का उपयोग करता है।

उस पोस्ट पर टिप्पणी में डोरोन याकॉबी भी टिप्पणी करते हैं:

"एमएसब्ल्यूइल्ड सामुदायिक कार्य में एक ऐसा कार्य है जो आपके लिए यह (और अधिक) हासिल कर सकता है, जिसे एक्सएमएलएमसअपडेट कहते हैं Ive ने अपने ब्लॉग में लिखा है "


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


VS2012 में अपने परिनियोजन परिवेश के लिए अलग-अलग कॉन्फ़िग्स को अनुकूलित करने के तरीके को यहां बताया गया है

  1. समाधान पर राइट माउस क्लिक करें और कॉन्फ़िगरेशन प्रबंधक चुनें
  2. कॉन्फ़िगरेशन प्रबंधक बटन पर क्लिक करें
  3. कॉन्फ़िगरेशन कॉलम के तहत प्रोजेक्ट के खिलाफ कॉम्बो बॉक्स चुनें जो आप को कॉन्फ़िगरेशन जोड़ना चाहते हैं और चयन करें
  4. परीक्षण जैसे एक नाम के साथ एक नया कॉन्फ़िगरेशन बनाएं और रिलीज़ से कॉपी सेटिंग और नए समाधान कॉन्फ़िगरेशन चेकबॉक्स को चेक करें
  5. वेब पर क्लिक करें। माउस क्लिक करें
  6. कॉन्फ़्रेंस ट्रांसफ़ॉर्म जोड़ें
  7. तब आपको एक अतिरिक्त वेब। कॉन्फ़िग ईजी वेब

इसके बाद आपको अपने टेस्ट पर्यावरण के लिए विशिष्ट कुछ परिवर्तनों के साथ वेब





web-config