विकास और उत्पादन वातावरण में विभिन्न Web.config का उपयोग करना


194

मुझे अपने ASP.NET एप्लिकेशन में विभिन्न डेटाबेस कनेक्शन स्ट्रिंग और SMTP सर्वर पते का उपयोग करने की आवश्यकता है, यह इस पर निर्भर करता है कि यह विकास या उत्पादन वातावरण में चलाया जाता है।

एप्लिकेशन WebConfigurationManager.AppSettings गुण के माध्यम से Web.config फ़ाइल से सेटिंग पढ़ता है।

मैं एफ़टीपी के माध्यम से उत्पादन सर्वर पर एप्लिकेशन को तैनात करने के लिए बिल्ड / पब्लिश कमांड का उपयोग करता हूं और फिर रिमोट वेब.कॉन्फिग को सही से बदल देता हूं।

क्या किसी तरह तैनाती की प्रक्रिया को सरल बनाना संभव है? धन्यवाद!

जवाबों:


159

दृश्य स्टूडियो 2010 और इसके बाद के संस्करण में, अब आपके पास बिल्ड कॉन्फ़िगरेशन के आधार पर अपने web.config में परिवर्तन लागू करने की क्षमता है।

Web.config बनाते समय, आप समाधान एक्सप्लोरर में फ़ाइल का विस्तार कर सकते हैं, और आपको दो फाइलें दिखाई देंगी:

  • Web.Debug.Config
  • Web.Release.Config

उनमें परिवर्तन कोड होता है जिसका उपयोग किया जा सकता है

  • कनेक्शन स्ट्रिंग बदलें
  • डीबगिंग ट्रेस और सेटिंग्स निकालें
  • त्रुटि पृष्ठ पंजीकृत करें

देखें वेब अनुप्रयोग परियोजना तैनाती के लिए Web.config परिवर्तन सिंटेक्स अधिक जानकारी के लिए MSDN पर।

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

यह Visual Studio Uservoice पर एक लंबे समय के लिए अनुरोध है

दृश्य स्टूडियो 2010 और इसके बाद के संस्करण के लिए एक एक्सटेंशन , " SlowCheetah ," किसी भी विन्यास फाइल के लिए परिवर्तन बनाने का ख्याल रखने के लिए उपलब्ध है। विजुअल स्टूडियो 2017.3 से शुरू होकर, SlowCheetah को IDE में एकीकृत किया गया है और कोड आधार Microsoft द्वारा प्रबंधित किया जा रहा है। यह नया संस्करण JSON परिवर्तन का भी समर्थन करता है।


7
ध्यान दें कि यह पुरानी वेब साइट परियोजनाओं के लिए काम नहीं करता है । केवल वेब अनुप्रयोगों के लिए । मैंने यह देखने की कोशिश नहीं की है कि क्या फिल बोल्ड्यूक का वर्कअवे वेब साइटों के लिए काम करता है, लेकिन मुझे संदेह है कि उनके पास प्रोजेक्ट फाइल नहीं है।
मो।

13
यह भी ध्यान दें कि web.confg केवल पब्लिशिंग के लिए कार्य को रूपांतरित करता है, वे काम नहीं करते हैं यदि आप बस F5 का निर्माण / रन करते हैं: (((
एलेक्स

7
अपने web.config एक नहीं है, तो Web.Debug.Configऔर Web.Release.Config, आप राइट क्लिक करना पड़ सकता है Web.Configऔर क्लिक Add Config Transforms
डग एस

1
@ एलेक्स: हम इसे सरल बिल्ड / एफ 5 के लिए कैसे उपयोग कर सकते हैं?
पंच

1
SlowCheetah के लिए सीधा लिंक: marketplace.visualstudio.com/…
जिओ

83

<appSettings>Web.config में टैग एक फ़ाइल गुण है कि कुंजी / मान का अपने आप सेट के साथ एक बाहरी config लोड होगा समर्थन करता है। ये आपके web.config में मौजूद किसी भी सेटिंग को ओवरराइड कर देंगे या उन्हें जोड़ देंगे।

हम अपने web.config को एक फ़ाइल विशेषता के साथ स्थापित समय पर संशोधित करके इसका लाभ उठाते हैं जो उस साइट से पर्यावरण से मेल खाता है जिसे स्थापित किया जा रहा है। हम अपने इंस्टॉलर पर एक स्विच के साथ ऐसा करते हैं।

जैसे;

<appSettings file=".\EnvironmentSpecificConfigurations\dev.config">

<appSettings file=".\EnvironmentSpecificConfigurations\qa.config">

<appSettings file=".\EnvironmentSpecificConfigurations\production.config">

ध्यान दें:

  • विशेषता द्वारा निर्दिष्ट .config में परिवर्तन asp.net कार्यकर्ता प्रक्रिया के पुनरारंभ को ट्रिगर नहीं करेगा

2
यह एक उत्कृष्ट उत्तर है, खासकर जब आपके पास बड़ी मात्रा में वातावरण होता है और कुछ वातावरणों की कुछ सेटिंग्स में पासवर्ड और समान होते हैं जो आप स्रोत नियंत्रण में ट्रैक नहीं करना चाहते हैं।
फिल

1
क्या फ़ाइल पथ को बदलने का एक गतिशील तरीका है? आप किस सर्वर पर आधारित हैं? बस एक साइड नोट यह एक पुरानी वेबसाइट परियोजना पर काम कर रहा है, न कि एक वेब एप्लिकेशन। इसलिए आपका धन्यवाद!
परिप्रेक्ष्य

2
एक विशेषता है restartOnExternalChangesकि वे उन फ़ाइलों को मानेंगे जैसे कि वे web.configs थीं। स्रोत: learnable.com/books/…
डेविड श्वार्ट्ज

24

क्या आपने वेब परिनियोजन परियोजनाओं में देखा है?

http://www.microsoft.com/downloads/details.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&displaylang=en

यदि आप 2008 में नहीं हैं, तो VS2005 के लिए भी एक संस्करण है।


वेब परिनियोजन परियोजनाओं का उपयोग करने के लिए यह एक अच्छा मार्गदर्शक है: johnnycoder.com/blog/2010/01/07/…
Gary W

वेब परिनियोजन परियोजनाएँ VS "प्रकाशन प्रोफ़ाइल" अब diaryofaninja.com/blog/2012/08/26/…
jocull

13

मैं भी जानना चाहता हूँ। यह मेरे लिए समस्या को अलग करने में मदद करता है

<कनेक्शनस्ट्रीम्स configSource = "connectionStrings.config" />

मैं उसके बाद एक कनेक्शनस्टार्स.कॉन्फिग के साथ-साथ एक "{होस्ट} कनेक्शनस्ट्रेन्स.कॉन्फिग" रखता हूं। यह अभी भी एक समस्या है, लेकिन यदि आप ऐसा उन वर्गों के लिए करते हैं जो दो वातावरणों में भिन्न हैं, तो आप एक ही web.config को तैनात और संस्करण कर सकते हैं।

(और मैं VS, btw का उपयोग नहीं करता।)


यदि आप VS का उपयोग कर रहे हैं, तो आप एक प्रीव्यू-ईवेंट का उपयोग एक debug.connectionstrings.config या एक release.connectionstrings.config से कॉपी करने के लिए कर सकते हैं: कॉपी $ (ProjectDir) $ (configurationName): ConnectionStream.config $ (ProjectDir) ConnectionStrings.config जैसा कि सुझाया गया है। स्कॉट द्वारा। हंसलमैन
थॉमस

6

मैं अपने विभिन्न वातावरणों को परिनियोजित करने के लिए NAnt बिल्ड स्क्रिप्ट का उपयोग करता हूं। मैंने इसे XPath के माध्यम से अपनी कॉन्फिग फाइलों को संशोधित किया है, इस पर निर्भर करते हुए कि वे कहां तैनात हो रहे हैं, और फिर यह ऑटोमैटिक रूप से उन्हें बियॉन्ड तुलना के उपयोग से उस वातावरण में डाल देता है ।

सेटअप करने के लिए एक या दो मिनट का समय लगता है, लेकिन आपको इसे केवल एक बार करना होगा। फिर जब मैं एक और कप कॉफी लेती हूं तो बैच फाइलें खत्म हो जाती हैं। :)

यहाँ एक लेख है जो मुझे मिला।


5

एक परियोजना पर जहां हमारे पास 4 वातावरण (विकास, परीक्षण, मंचन और उत्पादन) थे, हमने एक ऐसी प्रणाली विकसित की जहां एप्लिकेशन ने मशीन नाम के आधार पर उपयुक्त कॉन्फ़िगरेशन का चयन किया जिसे इसे तैनात किया गया था।

यह हमारे लिए काम किया क्योंकि:

  • व्यवस्थापक डेवलपर्स (एक आवश्यकता) को शामिल किए बिना और कॉन्फ़िगरेशन फ़ाइलों के साथ फ़ेल्ड होने के बिना (जिसे वे नफरत करते थे) अनुप्रयोगों को तैनात कर सकते थे;
  • मशीनी नाम एक सम्मेलन का पालन किया। हमने एक नियमित अभिव्यक्ति का उपयोग करके नामों का मिलान किया और एक वातावरण में कई मशीनों पर तैनात किया; तथा
  • हमने कनेक्शन स्ट्रिंग्स के लिए एकीकृत सुरक्षा का उपयोग किया। इसका अर्थ है कि हम बिना किसी पासवर्ड का खुलासा किए, बिना डिज़ाइन के समय पर अपने कॉन्फ़िगरेशन फ़ाइलों में नाम रख सकते हैं।

इस उदाहरण में हमारे लिए अच्छा काम किया, लेकिन शायद हर जगह काम नहीं करेगा।


3

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


3

आप इसे पोस्ट-बिल्ड चरण भी बना सकते हैं। एक नया कॉन्फ़िगरेशन सेट करें जो डिबग और रिलीज़ के अलावा "तैनात" है, और फिर सही web.config पर पोस्ट-बिल्ड स्टेप कॉपी है।

हम अपनी सभी परियोजनाओं के लिए स्वचालित बिल्ड का उपयोग करते हैं, और उन बिल्ड स्क्रिप्ट के साथ सही स्थान को इंगित करने के लिए web.config फ़ाइल अपडेट करते हैं। लेकिन अगर आप VS से सब कुछ कर रहे हैं तो यह आपकी मदद नहीं करेगा।


3

यह मशीन का उपयोग करने के विशाल लाभों में से एक है ।config। मेरी पिछली नौकरी में, हमारे पास विकास, परीक्षण और उत्पादन का माहौल था। हम कनेक्शन स्ट्रिंग्स (उपयुक्त, देव / परीक्षण / ठेस एसक्यूएल मशीन) जैसी चीजों के लिए मशीन का उपयोग कर सकते हैं।

यह आपके लिए एक समाधान नहीं हो सकता है यदि आपके पास वास्तविक उत्पादन मशीन तक पहुंच नहीं है (जैसे, यदि आप एक साझा होस्ट पर होस्टिंग कंपनी का उपयोग कर रहे थे)।


1

आप एक्सटेंशन "कॉन्फ़िगरेशन ट्रांसफ़ॉर्म" का उपयोग "स्लोकशीट" के समान ही कर सकते हैं,


हां यह काम करता है, लेकिन केवल तैनाती पर, संकलन पर नहीं, मैं चाहता हूं कि मैं बस अलग-अलग कॉन्फ़िगरेशन वाले वातावरणों का उपयोग करके संकलन और डिबग कर सकता हूं
Ch'nycos
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.