2009-08-04 11 views
6

दृश्य एसक्यूएल सर्वर 2008डाटाबेस परियोजना में पूर्व तैनाती

परियोजना पूर्व तैनाती और बाद तैनाती SQL स्क्रिप्ट के लिए प्लेसहोल्डर है के लिए स्टूडियो 2008 डाटाबेस परियोजना। वे काम करते हैं - ठीक है, वैसे भी अधिकांश समय।

प्रोजेक्ट में हमेशा-मनोरंजन-डेटाबेस का विकल्प होता है: मौजूदा डेटाबेस ड्रॉप करें और हर बार एक नया गर्म-से-ओवन डेटाबेस बनाएं।

जब मैं अपना डेटाबेस तैनात करता हूं तो संपूर्ण SQL स्क्रिप्ट एक साथ रखी जाती है और निष्पादित की जाती है।

मेरा डेटाबेस प्रतिकृति के लिए उपयोग किया जाता है, और पोस्ट-परिनियोजन स्क्रिप्ट के एक हिस्से के रूप में, मैं सर्वर को वितरण के रूप में निर्दिष्ट करता हूं, प्रतिकृति बनाता हूं और इसमें लेख जोड़ता हूं।

इसलिए, मुझे प्रतिकृति बंद करना है। और इसे रखने के लिए तार्किक जगह पूर्व-तैनाती में थी।

वीएस 2008 ने मेरे चेहरे को बहुत जल्दी से smug grin मिटा दिया। यदि हमेशा-मनोरंजन-डेटाबेस की जांच की जाती है तो यह स्क्रिप्ट को ड्रॉप और डेटाबेस को फिर से बनाने के लिए रखती है, फिर मेरी प्री-डिप्लॉयमेंट स्क्रिप्ट रखती है, और फिर बाकी सब कुछ।

क्या डेटाबेस प्रोजेक्ट के टेम्पलेट को बदलने के लिए मेरे पास कोई तरीका है ताकि पूर्व-परिनियोजन एसक्यूएल स्क्रिप्ट को निष्पादित किया जा सके जहां वे निष्पादित करने के लिए हैं - से पहले परिनियोजन होता है।

+0

मैं भी नाम प्री-तैनाती द्वारा मूर्ख गया करने के लिए एक रूप देने के लिए भी प्रयास करें। –

उत्तर

3

यह ठीक नहीं हो सकता है कि आप क्या कर रहे हैं लेकिन यह आपको आपकी समस्या के आसपास काम करने में मदद कर सकता है। एक त्वरित रूप से देखने के बाद, मुझे लगता है कि प्री-और पोस्ट-तैनाती स्क्रिप्ट का अनुक्रम बदलना बहुत मुश्किल हो सकता है।

जैसा कि मैं इसे समझता हूं, बिल्ड प्रोजेक्ट में कुछ हुक हैं जो आपको तैनाती शुरू होने से पहले अपने कोड को निष्पादित करने की अनुमति देंगे।

  1. अपनी .dbproj फ़ाइल में PreDeployEvent संपत्ति को परिभाषित करें।
  2. अपनी .dbproj फ़ाइल में BeforeDeploy लक्ष्य को परिभाषित करें।

इनमें से कोई भी समय पर सही बिंदु पर निष्पादित किया जाना चाहिए, मुझे लगता है।

यदि आप PreDeployEvent संपत्ति का उपयोग करते हैं तो आपको निष्पादित करने के लिए एकल कमांड लाइन निर्दिष्ट करने की आवश्यकता होगी। एक कच्चे उदाहरण:

<PropertyGroup> 
    <PreDeployEvent>sqlcmd.exe -i myscript.sql</PreDeployEvent> 
</PropertyGroup> 

आप अधिक नियंत्रण चाहते हैं, BeforeDeploy लक्ष्य जिसमें आप एक या अधिक कस्टम MSBuild कार्य चलाने के लिए अनुमति देगा का उपयोग करें। यहाँ एक और कच्चे उदाहरण है:

<Target Name="BeforeDeploy"> 
    <Message Text="BeforeDeploy" Importance="high" /> 
</Target> 

वैसे, वहाँ स्वतंत्र रूप से उपलब्ध कस्टम कार्यों के बहुत सारे हैं, एक उदाहरण www.msbuildextensionpack.com में उन जा रहा है।

+0

मैंने परियोजना समूह को प्रोजेक्ट में सभी प्रकार के स्थानों में डालने की कोशिश की, लेकिन अब तक कुछ भी काम नहीं किया है। क्या कोई नमूना है जिसके बारे में आप जानते हैं कि मैं साथ खेल सकता हूं? –

+1

http://pastie.org/575352 - पहली कुछ पंक्तियां पर्याप्त होनी चाहिए। तैनाती के बाद आउटपुट विंडो की जांच करें - मेरे VSTS2008 पर मुझे आउटपुट मिलता है कि डेटाबेस पहले से और बाद में मौजूद है (यह इंगित करता है कि कमांड डीबी से पहले चला जाता है और फिर से बनाया जाता है)। –