.NET प्लेटफ़ॉर्म पर वेब एप्लिकेशन के असेंबली का स्वचालन

NAnt लोगो

शुभ दोपहर



मैंने यहां .NET अनुप्रयोगों की असेंबली को स्वचालित करने के अपने अनुभव का वर्णन करने की कोशिश की (मुख्य रूप से, हम वेब अनुप्रयोगों के बारे में बात कर रहे हैं)।



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







निम्नलिखित कार्यों को मान लें



  1. 1. संस्करण नियंत्रण प्रणाली में स्रोत कोड से एक वेब एप्लिकेशन का निर्माण करना आवश्यक है, इसे एक निश्चित तरीके से कॉन्फ़िगर करें और इसे सर्वर पर रखें (साथ ही डेटाबेस संरचना को अपडेट करें जिसके साथ एप्लिकेशन काम करता है। उदाहरण के लिए, ऐसा कार्य विकास के दौरान हो सकता है, जब आवश्यक हो। परीक्षकों के लिए वर्तमान संस्करण को रखना।
  2. 2. कंपनी के कई ग्राहक हैं, जिनमें से प्रत्येक के लिए आपको विशेष रूप से इस क्लाइंट के लिए कॉन्फ़िगर किए गए वेब एप्लिकेशन का एक अलग वितरण तैयार करने की आवश्यकता है।


आमतौर पर, एक बार दिखाई देने वाले ये कार्य, समय-समय पर (और कभी-कभी बहुत बार दोहराए जाते हैं) दोहराए जाने लगते हैं। आइए NAnt का उपयोग करके इन समस्याओं के समाधान को स्वचालित करने का प्रयास करें।



बस कुछ टिप्पणियाँ:

- लंबे समय तक .NET प्लेटफ़ॉर्म पर एक विकास प्रक्रिया के निर्माण पर उत्कृष्ट लेख का लिंक था। हालाँकि यह थोड़ी अलग समस्या के समाधान का वर्णन करता है, लेकिन यह NAnt के बारे में बहुत अच्छी तरह से कहता है। इसके अलावा, इस लेख में विकास प्रक्रिया के अन्य चरणों के बारे में बहुत सारी रोचक और उपयोगी जानकारी है। अत्यधिक पढ़ने की सलाह देते हैं।

- एक उपयोगिता है MsBuild - Microsoft से NAnt का एक एनालॉग - इसमें लगभग समान सुविधाएं हैं। स्वचालन के निर्माण के लिए उपकरणों का विकल्प प्रत्येक डेवलपर के लिए एक व्यक्तिगत मामला है। मैं वैकल्पिक रूप से NAnt पसंद करता हूं। मुझे टिप्पणियों में फायदे और नुकसान पर चर्चा करने में खुशी होगी।



सबसे पहले, मैं आपको संक्षेप में बताऊंगा कि NAnt क्या है।



Nant सॉफ़्टवेयर बिल्ड प्रक्रिया को स्वचालित करने के लिए कंसोल उपयोगिता है। XML में NAnt द्वारा किए जाने वाले कार्य एक विशेष कॉन्फ़िगरेशन फ़ाइल (आमतौर पर ऐसी फ़ाइल में एक .build एक्सटेंशन) में निर्दिष्ट होते हैं।

NAnt शुरू करते समय, इच्छित बिल्ड फ़ाइल के लिए पथ को -buildfile कमांड लाइन पैरामीटर से गुजारा जाता है। यदि वर्किंग डायरेक्टरी में केवल एक बिल्ड फाइल है, तो -buildfile पैरामीटर को छोड़ा जा सकता है।



NAnt चलाने के लिए उदाहरण कमांड लाइन

NAnt -buildfile: .. \ main.build

.Build फ़ाइल का मूल तत्व "प्रोजेक्ट" है। परियोजना में "लक्ष्य" का एक सेट होता है, जिनमें से प्रत्येक में कार्यों के एक निश्चित अनुक्रम का विवरण होता है।



सामग्री बनाएँ

उदाहरण बिल्ड संरचना:

<project>

<target>

<_1 />

<_2 />

<_3 />

</target>

<target>

<_1 />

<_2 />

</target>

</project>








("कार्यों" की एक सूची यहां पाई जा सकती है )



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



<property name="zip.filename" value="..\build\application.zip" />







NAnt शुरू करते समय संपत्ति मान कमांड-लाइन विकल्पों के माध्यम से पारित किया जा सकता है (पैरामीटर: -D: संपत्ति = मूल्य)



NAnt -buildfile:..\main.build -D:zip.filename=..\build\application.zip







किसी कार्य के लिए, आप उन कार्यों की सूची निर्दिष्ट कर सकते हैं जिन पर यह निर्भर करता है (निष्पादन के सही क्रम के लिए) और उन शर्तों के तहत जिनके निष्पादन की अनुमति है। अधिकांश कार्यों के लिए, आप उनके निष्पादन के लिए शर्त भी निर्दिष्ट कर सकते हैं।



<target name="pack" depends="compile, configure" "${property::exists('zip.filename')}" >

...

</target>








जैसा कि आप पिछले उदाहरण में देख सकते हैं, अंतर्निहित अभिव्यक्तियाँ कॉन्फ़िगरेशन फ़ाइल के तत्वों के पैरामीटर के रूप में उपयोग की जा सकती हैं। उदाहरण के लिए, अभिव्यक्ति "$ {संपत्ति :: मौजूद है ('zip.filename')}" जाँचता है कि क्या संपत्ति "zip.filename" परिभाषित है। भावों की एक सूची यहां पाई जा सकती है

यह भी ध्यान देने योग्य है कि जब दृश्य स्टूडियो (2008, 2010) में फ़ाइलों का निर्माण किया जाता है, तो सिंटैक्स हाइलाइटिंग (एक्सएलएम फ़ाइलों के समान) और इंटेलीसेनस काम करता है (अंतर्निहित अभिव्यक्तियों के लिए भी)।



चलो एक बिल्ड फ़ाइल लिखें।



एप्लिकेशन बनाने के लिए यहां हमारी कार्य योजना है:

1. स्रोत कोड से आवेदन संकलित करें;

2. "अतिरिक्त" फ़ाइलें हटाएं (उदाहरण के लिए, * .aspx.cs, * .csproj, आदि) और लापता की प्रतिलिपि बनाएँ (विकास के दौरान उपयोग नहीं की गई);

3. एप्लिकेशन को कॉन्फ़िगर करें;

4. डेटाबेस को एप्लिकेशन के लिए वांछित स्थिति में लाने के लिए स्क्रिप्ट चलाएँ;

5. यूनिट परीक्षण चलाएं

6. एप्लिकेशन को कार्यशील निर्देशिका में कॉपी करें।



1. स्रोत से एक आवेदन का निर्माण



NAnt का उपयोग करके किसी एप्लिकेशन को संकलित करने के कई तरीके हैं। उनमें से सबसे सुविधाजनक संकलन के लिए MsBuild का उपयोग करना है (केवल संकलन के लिए)।

तथ्य यह है कि, किसी भी स्थिति में, कंपाइलर (उदाहरण के लिए, Csc.exe for C #) का उपयोग करके आवेदन संकलित किया जाएगा। एक प्रोजेक्ट बनाने के लिए, कंपाइलर को प्रोजेक्ट में शामिल सभी फाइलों के लिए रास्तों को पास करना होगा, सभी कनेक्टेड एक्सटर्नल असेंबली (रेफरेंस) की सूची, रिसोर्स फाइल्स की लिस्ट आदि। यानी संकलक को यह पता नहीं है कि * .sln और * .csproj जैसी फाइलों को कैसे प्रोसेस करना है और सभी पैरामीटर्स को इसे हाथ से पास करने की जरूरत है।

* .Sln फाइलें और प्रोजेक्ट फाइलें MsBuild विन्यास फाइल से ज्यादा कुछ नहीं हैं जो विजुअल स्टूडियो स्वचालित रूप से प्रोजेक्ट के साथ काम करते समय उत्पन्न करता है। तदनुसार, जब आप Ctrl + Shift + B दबाते हैं या किसी अन्य तरीके से VS में प्रोजेक्ट बनाते हैं, तो विज़ुअल स्टूडियो आवश्यक मापदंडों के साथ कंपाइलर को शुरू करने के लिए MsBuild का उपयोग करता है।

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



- EXEC कमांड के साथ



<property name="msbuild.path" value="C:/WINDOWS/Microsoft.NET/Framework/v3.5/MSBuild.exe" />

<exec program="${msbuild.path}">

<arg value="src\test.sln" />

<arg value="/p:Configuration=Release" />

<arg value="/p:WarningLevel=0" />

</exec>








EXEC कमांड आपको कोई भी प्रोग्राम चलाने की अनुमति देता है। आर्ग तत्व कमांड लाइन विकल्पों के अनुरूप हैं।



- NABContrib परियोजना में स्थित MSBUILD टीम की मदद से। इस पद्धति का उपयोग करने के लिए, आपको NAnt.Contrib.Tasks.dll लाइब्रेरी + लाइब्रेरीज़ डालनी होगी, जिस पर यह NAnt फ़ाइलों के साथ फ़ोल्डर में निर्भर करता है।



<msbuild project="src\test.sln">

<property name="Configuration" value="Release" />

<property name="Platform" value="Any CPU" />

</msbuild>








इस स्थिति में, आपको MsBuild का पथ निर्दिष्ट करने की आवश्यकता नहीं है। NAnt सेटिंग्स में, .NET (MsBuild सहित) के संस्करण के आधार पर, विभिन्न उपयोगिताओं के लिए पथ हैं। जब MsBuild कमांड निष्पादित की जाती है, तो सही पथ का स्वचालित रूप से उपयोग किया जाएगा। संपत्ति तत्व कमांड लाइन मापदंडों के अनुरूप हैं।



- आप कमांड सीएससी (सी # के लिए), वीबीसी (वीबी के लिए), आदि का भी उपयोग कर सकते हैं, जो मैन्युअल रूप से कंपाइलर शुरू करने के समान होगा। इन आदेशों का विवरण NAnt प्रलेखन में पाया जा सकता है (उदाहरण के लिए, csc कमांड यहां पाया जा सकता है )।



मेरी राय में, सबसे सुविधाजनक तरीका है NABContrib लाइब्रेरी से MSBUILD कमांड का उपयोग करना। प्रश्न तुरंत उठता है: यदि हम एप्लिकेशन बनाने के लिए MsBuild का उपयोग करते हैं, तो इसके साथ बाकी सब क्यों नहीं करते हैं। जैसा कि मैंने कहा, MsBuild और NAnt के बीच अंतर बहुत बड़ा नहीं है और विकल्प मोटे तौर पर डेवलपर की प्राथमिकताओं पर निर्भर करता है। व्यक्तिगत रूप से, मैं NAnt का उपयोग करके अधिक आरामदायक हूं। टिप्पणियों में इस मुद्दे पर चर्चा करने के लिए तैयार हैं।



2. गणना के लिए साइट तैयार करना



संकलन करते समय, एक निश्चित संख्या में फाइलें वेब एप्लिकेशन के साथ फ़ोल्डर में रहती हैं, जो विकास के दौरान आवश्यक होती हैं, लेकिन एप्लिकेशन ऑपरेशन के दौरान आवश्यक नहीं होती हैं (उदाहरण के लिए, * .csproj, * .cspx.cs, * .pdb, आदि)। बिछाने से पहले, आपको इन फ़ाइलों से एप्लिकेशन को साफ करने की आवश्यकता है। फिर, ऐसा करने के कई तरीके हैं।



- WebDeploymentProject प्रोजेक्ट का उपयोग करें ( VS2008 के लिए , VS2010 के लिए )। WebDeploymentProject प्रकार की एक परियोजना केवल एक मौजूदा वेब अनुप्रयोग परियोजना के लिए बनाई जा सकती है। Visual Studio में, WebDeploymentProject प्रोजेक्ट के गुणों में, आप विभिन्न एप्लिकेशन सेटिंग्स कॉन्फ़िगर कर सकते हैं (उदाहरण के लिए, असेंबली पर हस्ताक्षर करना, स्वचालित रूप से IIS, आदि में एक वर्चुअल निर्देशिका बनाना)। यदि आप WebDeploymentProject में एक प्रकार की परियोजना बनाने की कोशिश करते हैं, तो आपको एक रेडी-टू-यूज़ एप्लिकेशन मिलेगा, जिसके साथ WebDeploymentProject डेटा जुड़ा हुआ है और जिसमें विकास के लिए आवश्यक फाइलें नहीं हैं।



- aspnet_compiler.exe उपयोगिता का उपयोग करें।

WebDeploymentProject, अन्य VS प्रोजेक्ट्स की तरह, अनिवार्य रूप से MsBuild के लिए केवल एक कॉन्फ़िगरेशन फ़ाइल है। WebDeploymentProject प्रोजेक्ट के निर्माण के दौरान, वर्क के लिए एप्लिकेशन की तैयारी aspnet_compiler.exe यूटिलिटी का उपयोग करके की जाती है। कुछ भी हमें इस उपयोगिता को अपने हाथों से चलाने से रोकता है। NAnt में, इसे निम्नलिखित तरीके से किया जा सकता है:



<property name="aspnet_compiler.dir" value="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\" />

<property name="publish.project.dir" value="C:\Work\MyWebSite\" />

<property name="publish.output.dir" value="C:\Published\MyWebSite\" />

<exec program="aspnet_compiler.exe" basedir="${aspnet_compiler.dir}" >

<arg value="-p" />

<arg value="${publish.project.dir}" />

<arg value="${publish.output.dir}" />

</exec>






इस पद्धति का नुकसान यह है कि आपको aspnet_compiler.exe के लिए पथ को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है।



यहां aspnet_compiler.exe उपयोगिता के बारे में अधिक जानें।

ASP.NET कमांड लाइन टूल्स का विवरण यहां है



- अतिरिक्त फ़ाइलों को हटाने के लिए अपने हाथों का उपयोग करें (या अनावश्यक फ़ाइलों के अपवाद के साथ एप्लिकेशन को किसी अन्य फ़ोल्डर में कॉपी करें, ताकि स्रोत फ़ोल्डर को खराब न करें)। NAnt के साथ, यह COPY कमांड के साथ किया जा सकता है:

<copy todir = "$ {गंतव्य .ir}">

<fileset basedir = "$ {app.dir}">

<नाम = "** \ *" /> शामिल हैं

<नाम छोड़ दें = "** \ *। सीएस" />

<नाम छोड़ दें = "** \ *। scc" />

<नाम = "** \ *। pdb" /> को बाहर करें

<नाम का नाम = "** \ *। csproj" />

<नाम छोड़ दें = "** \ *। vspscc" />

<नाम छोड़ दें = "** \ PageList.xml *" />

<नाम का नाम = "** \ *। csproj.user" />

</ फ़ाइलसेट>

</ कॉपी>

एक ओर, यह विधि WebDeploymentProject की तुलना में कम सुविधाजनक है, दूसरी ओर, हमारे पास यहां अधिक नियंत्रण है। सामान्य तौर पर, यह आपके ऊपर है कि सबसे अच्छा क्या काम करता है।



जारी रखा जाए ..?



All Articles