9

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

उत्तर

7

हम web.config में appSettings और ConnectionStrings तत्वों के लिए configSource विशेषता का उपयोग करें।

असल में, हमारे पास हमारे सभी वातावरण: dev, qa और उत्पादन के लिए एक ही web.config फ़ाइल है।

फिर हम अलग उपयोग "पर्यावरण विशिष्ट" फ़ाइलें .. उदाहरण के लिए ...

web.config में:

<?xml version="1.0"?> 
<configuration> 
    <appSettings configSource="local.appsettings.config" /> 
    <connectionStrings configSource="local.connectionstrings.config" /> 
</configuration> 

फिर हम बनाए रखने के निम्न फ़ाइलें:

local.appsettings.config.development 
local.appsettings.config.qa 
local.appsettings.config.production 
local.connectionstrings.config.development 
local.connectionstrings.config.qa 
local.connectionstrings.config.production 

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

तो, हम देव को तैनाती कर रहे हैं, local.appsettings.config.development -> local.appsettings.config

हम गुणवत्ता आश्वासन के लिए की तैनाती रहे हैं, तो स्थानीय .appsettings.config.qa -> local.appsettings.config

यह हमें हमारे सभी वातावरणों में कोर web.config को रखने की अनुमति देता है।

+0

अरे धन्यवाद, वहाँ एक वातावरण चर हालांकि के आधार पर यह करने के लिए किसी भी तरह से है? मैं इसे इस तरह से करना चाहता हूं लेकिन मेरे क्लाइंट ने पर्यावरण परिवेश के आधार पर ऐसा करने के लिए कहा है, जिसे उन्होंने अपने प्रत्येक अलग वातावरण में स्थापित किया है। अगर ऐसा होता है, तो मुझे वह हिस्सा याद आ रहा है (जहां यह एक पर्यावरण परिवर्तनीय दिखता है)। धन्यवाद – Ryan

+1

आपको एक ही .config फ़ाइल में प्रत्येक वातावरण के लिए कनेक्शन स्ट्रिंग रखना होगा .. कुछ की तरह: <नाम जोड़ने = "dbString_dev" connectionstring = "" /> <जोड़ने नाम = "dbString_qa" connectionstring = "" /> <जोड़ने नाम = "dbString_prod" connectionstring = "" /> फिर, अपने कोड में (मान लें कि आपके पास "कॉन्फ़िगरेशन ऑब्जेक्ट" वर्ग का कुछ प्रकार है, तो आप पर्यावरण चर के आधार पर सही स्ट्रिंग में पढ़ सकते हैं। * प्रमुख * उस के साथ दोष योजना है .. अब आपके पास अपनी सभी डिवीजन कॉन्फ़िगरेशन जानकारी है जो आपके देव और क्यूए – datacop

+0

के रूप में है। मैं इस मेथोड को APP_Data फ़ोल्डर में configSource फ़ाइलों के साथ उपयोग करता हूं। आप बिना अपनी साइट को प्रकाशित कर सकते हैं App_Data फ़ोल्डर, इसे बाद में अपने सर्वर वातावरण की कॉन्फ़िगरेशन के साथ मिलाकर। –

2

अपने web.config में दो कनेक्शन तार और अन्य चर, "isTesting" की तरह होने के बारे में है, तो isTesting पिकअप जो कनेक्शन स्ट्रिंग का उपयोग करने के मूल्य के आधार कैसे?

0

आप कॉन्फ़िगरेशन अनुभागों का भी उपयोग कर सकते हैं, और अनुभागों के बीच सर्वर नाम स्विच के आधार पर। इस तरह आप कुंजी नाम कर सकते हैं।

link text

0

आप प्रीबिल्ड घटनाओं का उपयोग कर कॉन्फ़िगरेशन मैनेजर में प्रत्येक वातावरण के लिए web.config सेट कर सकते हैं। मैंने उत्कृष्ट परिणामों के साथ यह कोशिश की है।

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

आप डिबग है और निर्माण आप स्थानीय/पूर्व/उत्पादन हो सकता है जब ... आदि