2013-03-26 5 views
12

यह प्रश्न एक में से दो में से एक है, लेकिन दोनों एक ही समस्या से संबंधित हैं।अलग-अलग * .csproj/* .config सेटिंग्स प्रत्येक टीम के सदस्य और शाखा

हम 10 डेवलपर्स की एक टीम हैं, कुछ डेवलपर्स आईआईएस के पूर्ण उदाहरण का उपयोग करना पसंद करते हैं, जबकि अन्य आईआईएस-एक्सप्रेस का उपयोग करना पसंद करते हैं। या तो उपयोग करने के लिए योग्यताएं हैं, उदाहरण के लिए, आईआईएस उत्पादन के समान दिखता है, जबकि आईआईएस-एक्सप्रेस संपादन-और-जारी डिबगिंग की अनुमति देता है।

10 डेवलपर कार्य टीम के अलावा, हम स्रोत नियंत्रण का उपयोग कर रहे हैं, और हमारे पास शाखाकरण संरचना है। प्रत्येक शाखा में अलग-अलग web.config/app.config सेटिंग्स हो सकती हैं, जैसे डेटाबेस कनेक्शन स्ट्रिंग्स। एक डेवलपर एक बार एक से अधिक शाखाओं पर काम कर रहा है, इसलिए हमारे पास आमतौर पर प्रति शाखा एक डेटाबेस होता है, हम स्थानीय डेटाबेस वाले डेवलपर्स को देख रहे हैं, लेकिन नामकरण टकराव अभी भी दृष्टिकोण के बावजूद एक समस्या है (यानी एक डेवलपर के पास 2 हो सकता है स्थानीय डेटाबेस, प्रत्येक शाखा के लिए एक)।

पहला मुद्दा, csproj फ़ाइलों के साथ एक है, विशेष रूप से वेब-सर्वर सेटिंग्स। यदि एक डेवलपर आईएसआई-एक्सप्रेस का उपयोग करने वाली सीस्पोज़ फ़ाइल में जांच करता है, और अन्य डेवलपर नवीनतम प्राप्त करता है, तो यह उनकी कॉन्फ़िगरेशन को ओवरराइट करेगा, समय बर्बाद कर देगा और निराशा पैदा करेगा।

बेशक, सबसे आसान समाधान सभी को एक उपकरण, एक कॉन्फ़िगरेशन का उपयोग करने के लिए मजबूर करना होगा, लेकिन मैं ऐसा नहीं करना चाहूंगा, खासतौर से ऐसा कुछ जिसके लिए परिणामी आउटपुट (संकलित कोड) पर कोई असर नहीं पड़ता है।

दूसरा मुद्दा कॉन्फ़िगरेशन फ़ाइलों के साथ है, कॉन्फ़िगरेशन फ़ाइलों को स्रोत नियंत्रण में संग्रहीत किया जाता है (बस किसी अन्य फ़ाइल की तरह), इसलिए जब हम ब्रांचिंग-विलय करते हैं, तो इन फ़ाइलों को बाद में मैन्युअल रूप से अपडेट किया जाना चाहिए। मुझे पता है कि कॉन्फ़िगरेशन फ़ाइलों के लिए डीबग और रिलीज ट्रांसफॉर्मेशन हैं, जिनके पास दोनों में अलग-अलग कनेक्शन स्ट्रिंग हो सकते हैं, लेकिन यह समस्या को हल नहीं करता है क्योंकि दो अलग-अलग डेवलपर एक ही शाखा पर काम कर रहे हैं लेकिन विभिन्न कनेक्शन स्ट्रिंग्स के साथ।

इसका स्पष्ट समाधान है कि हर किसी के पास हमेशा एक ही सेटिंग होती है, लेकिन कुछ डेवलपर स्थानीय डीबी इंस्टेंस का उपयोग करना चाहेंगे, अन्य एसक्यूएल-एक्सप्रेस का उपयोग करना चाहेंगे, जबकि स्टेजिंग सर्वर पूर्ण-ऑन SQLServer इंस्टेंस का उपयोग करता है। दोबारा, यह एक और सेटिंग है जिसमें अंतिम परिणाम नहीं है।

टीम सदस्यों के बीच कॉन्फ़िगरेशन प्रबंधित करने और शाखा/विलय के बीच में, मैंने अपनी विशेष समस्याओं का कोई समाधान नहीं देखा है।

+0

मैं लोगों को एक ही वातावरण रखने के लिए मजबूर करने की ओर झुकता हूं। वेब सर्वर या डेटाबेस संस्करणों के बीच सूक्ष्म अंतर का मतलब उत्पादन में काम करने या नहीं (एक मशीन "मेरी मशीन पर डरावना" काम करता है) के बीच का अंतर हो सकता है। आईआईएस (या आईआईएस एक्सप्रेस) बनाम कैसिनी एक बड़ा है। लेकिन अगर आप किसी भी पैटर्न से बचते हैं जो संभावित रूप से एक समस्या हो सकती है, तो मुझे लगता है कि आप शायद ठीक रहेगा। –

+0

मैं मानता हूं कि यह सब एक ही चीज़ का उपयोग करने के लिए एक ठोस दृष्टिकोण होगा, अगर हम सभी को यह मानने के लिए मिल सके कि यह क्या होना चाहिए। दुर्भाग्य से मैं दूसरों को यह बताने की स्थिति में नहीं हूं कि कैसे काम करना है। – Matthew

उत्तर

6
वेब सर्वर के लिए विशेष रूप से

, वी.एस. में "सभी उपयोगकर्ताओं के लिए सर्वर सेटिंग्स लागू की एक चेकबॉक्स (दुकान है प्रोजेक्ट फ़ाइल) "- अगर अनचेक किया गया है, तो सेटिंग आपके स्थानीय .csproj.user फ़ाइल में संग्रहीत है, इसलिए हर कोई अपनी सेटिंग्स रख सकता है।

कनेक्शन तारों के लिए, आपके पास "उपयोगकर्ता" हो सकता है।कॉन्फ़िगर करें "प्रत्येक मशीन पर फ़ाइल (स्रोत नियंत्रण में नहीं), जहां डेवलपर अपनी कनेक्शन स्ट्रिंग डाल सकता है। मुख्य कॉन्फ़िगरेशन फ़ाइल कनेक्शन स्ट्रिंग प्राप्त करने के लिए बस इस फ़ाइल को लोड कर सकती है। ऐसा करने के कुछ तरीके हैं, लेकिन मैं 'यह करने की कोशिश की कर दिया है:

App.config or Web.config: 
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings configSource="user.config"></connectionStrings> 
</configuration> 

user.config: 
<connectionStrings> 
    <add name="test" connectionString="Server=.;Database=...;"/> 
</connectionStrings> 

यदि यह एक Windows ऐप था, तो आप संपत्ति "आउटपुट निर्देशिका को कॉपी" user.config फ़ाइल पर है, ताकि दृश्य स्टूडियो अपने बिन निर्देशिका में कॉपी करते हैं सेट करेंगे।

+0

इसके लिए धन्यवाद, मैंने कभी भी "सभी उपयोगकर्ताओं (प्रोजेक्ट फ़ाइल में स्टोर) पर सर्वर सेटिंग्स लागू नहीं किया" चेकबॉक्स। मुझे लगता है कि मैं user.config फ़ाइल सुझाव के आसपास हैक कर सकता हूं। धन्यवाद! – Matthew

2

यदि मैं आपका प्रश्न सही ढंग से समझता हूं, तो आप मूल रूप से अपने app.config/web.config/कुछ अन्य फ़ाइलों को चेक-इन करने से बाहर करना चाहते हैं? किसी कारण से, यह कुछ हद तक एक छिपी हुई विकल्प प्रतीत होता है ...

हमें अंततः समाधान एक्सप्लोरर में .config फ़ाइलों का चयन करके और (विजुअल स्टूडियो) File पर क्लिक करके हमारी इसी समस्या का उत्तर मिला ->Source Control ->Exclude selection from Source Control

यह चयनित फ़ाइलों को अन्य डेवलपर की फ़ाइलों में चेक-इन करने और ओवरराइट करने से रोक देगा।

(नोट: इस VS2010 में काम करता है, मैं किसी भी गारंटी नहीं है कि इस विकल्प को 2012 में मौजूद नहीं कर सकते हैं)

+0

क्रमबद्ध करें, हमारी web.config फ़ाइलें विशाल हैं। नियमित रूप से बदलने वाली एकमात्र चीजें कनेक्शन स्ट्रिंग्स, साथ ही कुछ अन्य सेटिंग्स भी होती हैं। समस्या अगर मैं इन्हें स्रोत नियंत्रण से बाहर कर देता हूं, अगर कोई नया वेब.कॉन्फिग सेटिंग या सेक्शन जोड़ता है, तो वह परिवर्तन किसी और के लिए प्रचारित नहीं होता है, और अगर उन्हें उस शाखा पर काम करना शुरू होता है तो सभी को अपनी कॉन्फ़िगरेशन अपडेट करनी पड़ती है। – Matthew

+0

सभी वैरिएबल web.config सामग्री को अलग-अलग फ़ाइलों में क्यों न डालें, जो मुख्य वेब.कॉन्फिग में संदर्भित होते हैं, और उन फ़ाइलों को केवल स्थानीय रूप से रखें - चेक इन नहीं किया गया। – Floremin

+0

@ मैथ्यू सच, यह एक सही समाधान नहीं है, लेकिन हमारे लिए, यह है एक विशाल सिरदर्द से छुटकारा पा लिया ... अलग .config फ़ाइलें आपके लिए बेहतर समाधान हो सकती हैं, मैंने सोचा कि मैं अपने समाधान के उपयोग पर अपने दो सेंट में पिच करूँगा ... :) –

0

मैं एक ऐसी ही समस्या है जहाँ मैं 3 वातावरण के लिए 3 शाखाओं के लिए 3 डेटाबेस पड़ा है पड़ा है।

उत्पादन सर्वर ==> प्रोडक्शन डीबी ==> prod शाखा ==> प्रोड कनेक्शन स्ट्रिंग परीक्षण सर्वर ==> मास्टर डीबी ==> मास्टर शाखा ==> मास्टर कनेक्शन स्ट्रिंग स्थानीय विकास ==> स्थानीय डीबी ==> डेवलपर शाखा ==> डेवलपर कनेक्शन स्ट्रिंग ...

.git फ़ोल्डर के अंदर, गिट हुक हैं जहां आप किसी भी शाखा को चेकआउट करते समय स्क्रिप्ट को निष्पादित करने के लिए रख सकते हैं। !

/bin/bash

: मैं के बाद चेकआउट स्क्रिप्ट जो अपने आप हर बार जब मैं चेकआउट और मेरे लिए कि अद्यतन कनेक्शन स्ट्रिंग ताकि मुझे web.config फ़ाइल में मैन्युअल परिवर्तन से बचाता है निष्पादित करता है। config eval $ (Git शाखा | grep "" | sed "s/ //")

एसईडी -es/{सर्वर}/$ सर्वर/जी -es/{डेटाबेस}/$ डेटाबेस/जी - es/{USER}/$ user/g -es/{PASS}/$ pass/g -es/{SITE_TYPE}/$ site_type/g \

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