2010-03-04 11 views
10

एक .NET/SQLServer एप्लिकेशन में डीबग प्रबंधित करने और कनेक्शन स्ट्रिंग को रिलीज़ करने के लिए एक अच्छा तरीका क्या है?एक डीबग और रिलीज कनेक्शन स्ट्रिंग का प्रबंधन

मेरे पास दो SQL सर्वर, एक उत्पादन और एक बिल्ड/डीबग है और मुझे मेरे एएसपी.NET एप्लिकेशन को तैनात किए जाने पर दोनों के बीच स्विच करने की एक विधि की आवश्यकता है।

वर्तमान में मैं उन्हें बस web.config में संग्रहीत करता हूं और एक या दूसरे को टिप्पणी करता हूं, हालांकि तैनाती के दौरान त्रुटि प्रवण होती है।

उत्तर

13

Web.config फ़ाइल का एक डीबग और रिलीज़ संस्करण बनाएं, उदा। Web.debug.config और Web.release.config। फिर एक पूर्व-संकलन स्थिति जोड़ें जो मौजूदा लक्ष्य के आधार पर प्रासंगिक संस्करण को web.config में कॉपी करता है।

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

@echo off 

echo Configuring web.config pre-build event ... 

if exist "$(ProjectDir)web.config" del /F/Q "$(ProjectDir)web.config" 

if "$(ConfigurationName)" == "Debug Test" goto test 
if "$(ConfigurationName)" == "Debug M" goto M 
if "$(ConfigurationName)" == "Debug BA" goto BA 
if "$(ConfigurationName)" == "Release Test" goto test 
if "$(ConfigurationName)" == "Release M" goto M 
if "$(ConfigurationName)" == "Release BA" goto BA 

echo No web.config found for configuration $(ConfigurationName). Abort batch. 
exit -1 
goto :end 

:test 
copy /Y "$(ProjectDir)web.config.test" "$(ProjectDir)web.config" 
GOTO end 

:BA 
copy /Y "$(ProjectDir)web.config.BA" "$(ProjectDir)web.config" 
GOTO end 

:M 
copy /Y "$(ProjectDir)web.config.M" "$(ProjectDir)web.config" 
GOTO end 

:end 
echo Pre-build event finished 

Project Properties http://img442.imageshack.us/img442/1843/propsa.jpg

+0

मुझे लगता है कि यह एक अच्छा सुझाव है। क्या आप एक वीएस -2008 परियोजना में प्रीकंपाइल स्थिति जोड़ने के बारे में विस्तार से बता सकते हैं? मैं एमएसबिल्ड या किसी अन्य निर्माण प्रक्रिया का उपयोग नहीं कर रहा हूं। मैं बस विजुअल स्टूडियो के भीतर से साफ/पुनर्निर्माण और तैनाती करता हूं। –

+0

@roygbiv: संपादित देखें। – AxelEckenberger

+0

धन्यवाद दोस्त। आपकी विधि और नमूना कोड ने इस कार्य का संक्षिप्त काम किया है। –

2

मैं आमतौर पर अपने उत्पादन सर्वर पर एक पर्यावरण चर सेट करता हूं जो सर्वर को इंगित करता है कि एक उत्पादन सर्वर है। इसके बाद मैं अपने वेब.कॉन्फिग से सही कनेक्शन स्ट्रिंग पढ़ता हूं कि यह पर्यावरण चर मौजूद है या नहीं और उत्पादन मान पर सेट है।

+0

+1 मुझे सर्वर पर कुछ बदलने का विचार पसंद है। यह अन्य दृष्टिकोणों की तुलना में कम त्रुटि-प्रवण लगता है। –

+0

इस सुझाव के लिए धन्यवाद। यह शायद सबसे व्यावहारिक और सुविधाजनक है। –

+0

मैंने कभी इस बारे में सोचा नहीं। –

0

शायद यह थोड़ा पुराना है, लेकिन ODBC DSN इस समस्या को काफी अच्छी तरह से हल करता है - मैं अभी भी उपयोग करता हूं - कठोरता के साथ - डीएनएस सेटिंग्स उत्पादन और डीबग वातावरण के बीच अंतर करने के लिए।

पेज, मुझे उम्मीद है कि डाउन-वोटों के भार की उम्मीद है, शायद यह डेटाबेस पहचानकर्ताओं के लिए संकेत के स्तर के बारे में सोचने का एक गेज होगा।

+0

जबकि मुझे नहीं लगता कि आपका उत्तर डाउनवोट का हकदार है, मैं वास्तव में डीएसएन मार्ग नहीं जाना चाहता हूं। –

8

अच्छी खबर यह है कि .NET4 के पास a provision है, इसके लिए आप प्रत्येक कॉन्फ़िगरेशन (web.Release.config, web.Debug.config) के लिए अलग-अलग कॉन्फ़िगरेशन कर सकते हैं।

बुरी खबर है ... आप शायद अभी तक इसका उपयोग नहीं कर रहे हैं।

+0

आप सही हैं, मैं .NET 4 :( –

+0

का उपयोग नहीं कर रहा हूं ... जल्द ही ... :) – jjxtra

4

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

विजुअल स्टूडियो में आप देखेंगे कि बयान विशेष रूप से प्रोजेक्ट कॉन्फ़िगरेशन (डीबग या रिलीज़) के अनुसार मंद हो गए हैं।

बस अपने कोड में निम्नलिखित की तरह कुछ जोड़ें:

string myConnectionString; 
#if DEBUG 
    myConnectionString = "your debug connection string";//may be read from your debug connection string from the config file 
#else 
    myConnectionString = "your release connection string"; //may be read from your relase connection string from the config file 
#endif 
और अधिक विस्तार के लिए

, जाँच this

1

मैं सैम और ओबेलिक्स की विधि .NET 3.5 में संयोजन का उपयोग करता हूं।

public static class DataConnection 
{ 
#if LOCALDEV 
    public const string Env = "Debug"; 
#endif 
#if STAGING 
    public const string Env="Staging"; 
#endif 
#if RELEASE 
    public const string Env="Release"; 
#endif 
    private static ConnectionStringSettingsCollection _connections; 
    static DataConnection() 
    { 
     _connections = ConfigurationManager.ConnectionStrings; 

    } 

    public static string BoloConnectionString 
    { 
     get 
     { 
      return _connections["DB1."+Env].ConnectionString; 
     } 
    } 
    public static string AOAConnectionString 
    { 
     get 
     { 
      return _connections["DB2."+Env].ConnectionString; 
     } 
    } 
    public static string DocVueConnectionString 
    { 
     get 
     { 
      return _connections["DB3."+Env].ConnectionString; 
     } 
    } 
} 

फिर मेरे प्रोजेक्ट गुणों में, मैं सही सशर्त संकलन प्रतीकों को परिभाषित करता हूं। इस तरह मुझे अपने कनेक्शन स्ट्रिंग को समेह की तरह कोडित रखने की ज़रूरत नहीं है, लेकिन कोड केवल स्ट्रिंग के लिए दिखता है कि यह कैसे बनाया गया था। यह मुझे सभी बिल्डों के लिए एक कॉन्फ़िगरेशन फ़ाइल (यदि मुझे आवश्यकता है) की अनुमति देता है, लेकिन हकीकत में मैं अपनी बिल्ड प्रक्रिया में कॉन्फ़िगरेशन फ़ाइलों को तैनात नहीं करता हूं।यद्यपि सशर्त ऐप। .NET 4 के लिए Relase.config सामान भविष्य में जाने का सही तरीका दिखता है।

0

मैं इस मुद्दे के लिए अन्य समाधान कह सकता हूं। Csproj फ़ाइल फ़ाइल में फोलो बनाएं:

<Content Include="DB.config"> 
    <SubType>Designer</SubType> 
</Content> 
    <Content Include="DB.Debug.config"> 
    <DependentUpon>DB.config</DependentUpon> 
    <SubType>Designer</SubType> 
</Content> 
    <Content Include="DB.Release.config"> 
    <DependentUpon>DB.config</DependentUpon> 
    <SubType>Designer</SubType> 
</Content> 

एक्सएमएल लिखित में रिलीज और डीबग के लिए दो संस्करण सेट किए गए हैं।

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