2008-11-20 15 views
163

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

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

मैं एफ़टीपी के माध्यम से उत्पादन सर्वर पर एप्लिकेशन को तैनात करने के लिए Build/Publish कमांड का उपयोग करता हूं और फिर मैन्युअल रूप से दूरस्थ Web.config को मैन्युअल रूप से प्रतिस्थापित करता हूं।

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

उत्तर

132

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

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

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

वे पाते हैं कि करने के लिए

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

अधिक जानकारी के लिए MSDN पर Web.config Transformation Syntax for Web Application Project Deployment देखें।

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

यह लंबे समय तक request on the Visual Studio Uservoice है।

एक extension for Visual Studio 2010 और ऊपर, "SlowCheetah," किसी भी कॉन्फ़िगरेशन फ़ाइल के लिए ट्रांसफॉर्म बनाने की देखभाल करने के लिए उपलब्ध है। विजुअल स्टूडियो 2017.3, SlowCheetah has been integrated into the IDE से शुरू हो रहा है और कोड बेस को माइक्रोसॉफ्ट द्वारा प्रबंधित किया जा रहा है। यह नया संस्करण जेएसओएन रूपांतरण का भी समर्थन करता है।

+6

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

+9

यह भी ध्यान रखें कि web.confg केवल प्रकाशन के लिए काम को बदलता है, यदि आप बस F5 बनाते हैं/चलाते हैं तो वे काम नहीं करते हैं: (((0 ( – Alex

+5

यदि आपके web.config में 'Web.Debug.Config' और ' Web.Release.Config', आपको 'Web.Config' राइट-क्लिक करने की आवश्यकता हो सकती है और' कॉन्फ़िगर ट्रांसफॉर्म जोड़ें 'पर क्लिक करें। –

24

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

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

वहाँ अगर तुम पर 2008

+0

वेब परिनियोजन परियोजनाओं का उपयोग करने के लिए यह एक अच्छी मार्गदर्शिका है: http://johnnycoder.com/blog/2010/01/07/deploy-aspnet-web-applications-with-web-deployment-projects/ –

+0

2005 संस्करण यहां है http://msdn.microsoft.com/en-us/library/aa479568.aspx – Fandango68

+0

वेब परिनियोजन परियोजनाएं अब वीएस "प्रकाशन प्रोफाइल" प्रतीत होती हैं http://www.diaryofaninja.com/blog/2012/08/ 26/विजुअल-स्टूडियो -2012-वेब-परिनियोजन-परियोजनाएं-मृत-ndash-long-live-publishing-profiles – jocull

13

नहीं हैं मुझे पता है, भी करना चाहते हैं, साथ ही VS2005 के लिए एक संस्करण है। यह मैं

 
<connectionStrings configSource="connectionStrings.config"/> 

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

(और मैं वी.एस. btw का उपयोग नहीं करते।)

+0

यदि आप वीएस का उपयोग कर रहे हैं तो आप डीबग.कनेक्शनस्ट्रिंग्स.कॉन्फिग या कॉपी से प्रतिलिपि बनाने के लिए प्रीबिल्ड-इवेंट का उपयोग कर सकते हैं। release.connectionstrings.config की तरह: प्रति $ (ProjectDir) $ (ConfigurationName) ConnectionStrings.config $ (ProjectDir) ConnectionStrings.config रों के रूप में स्कॉट द्वारा सुझाया गया। हंसेलमैन: http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx – Thomas

3

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

3

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

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

6

मैं अपने विभिन्न वातावरण में तैनात करने के लिए एक NAnt बिल्ड स्क्रिप्ट का उपयोग करता हूं। मैंने XPTP के माध्यम से अपनी कॉन्फ़िगरेशन फ़ाइलों को संशोधित किया है, जहां पर उन्हें तैनात किया जा रहा है, और फिर यह स्वचालित रूप से उन्हें Beyond Compare का उपयोग करके उस वातावरण में रखता है।

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

Here's मुझे एक लेख मिला।

3

यह मशीन.कॉन्फिग का उपयोग करने के विशाल लाभों में से एक है। मेरे आखिरी नौकरी में, हमारे पास विकास, परीक्षण और उत्पादन वातावरण थे। हम कनेक्शन स्ट्रिंग्स (उपयुक्त, dev/test/prod SQL मशीन) जैसी चीज़ों के लिए machine.config का उपयोग कर सकते हैं।

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

4

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

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

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

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

71

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

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

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

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

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

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

नोट:

.config को
  • परिवर्तन विशेषता के आधार पर निर्दिष्ट asp.net वर्कर प्रोसेस
+2

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

+1

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

+2

एक विशेषता 'restartOnExternalChanges' है जो उन फ़ाइलों का इलाज करेगी जैसे कि वे web.configs थे। स्रोत: https://learnable.com/books/the-asp-net-2-0-anthology-101-essential-tips-tricks-hacks/preview/how-can-i-simplify-my-web-config- फ़ाइल-ए 64852 बी –

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