21

ठीक है, इसलिए मैं आसानी से स्वीकार करता हूं कि जब मैं निरंतर एकीकरण की बात करता हूं तो मैं नौसिखिया हूं।एमएसबिल्ड - .csproj फ़ाइल का उपयोग करें या अपना खुद का रोल करें?

कहा जा रहा है कि, मैं खुद को शिक्षित करने के लिए एक सीसी.NET पर्यावरण स्थापित करने की कोशिश कर रहा हूं, लेकिन मुझे स्वचालित बिल्ड हिस्से को स्थापित करने के लिए आवश्यक जानकारी ढूंढने में मुझे परेशानी हो रही है।

जैसा कि मैं इसे समझता हूं, वी # 2005 द्वारा उत्पादित सी # द .csproj फ़ाइल में और एक मान्य MSBuild फ़ाइल है। बुद्धि के लिए, मैं .csproj फ़ाइल का उपयोग कर CC.NET में MSBuild कार्य एकीकृत करने में सक्षम किया गया है, लेकिन मैं इस के साथ कुछ मुद्दे हैं:

  1. वहाँ एक बहुत है कि मैं नहीं कर रहा हूँ यहाँ में चल रहा है यकीन है कि मुझे वास्तव में एक स्वचालित निर्माण वातावरण में आवश्यकता है।
  2. मैंने यह फ़ाइल नहीं बनाई है। मैं इसे समझ नहीं पा रहा हूं, और वह मुझे डराता है। (Programming By Coincidence)
  3. क्या हो रहा है फ़ाइल को संशोधित करने MbUnit की तरह कुछ शामिल करने के लिए, 1, 2, और 3 के परिणामस्वरूप के माध्यम से $(MSBuildToolsPath)\Microsoft.CSharp.targets
  4. निकाला जा रहा है में से अधिकांश लगता है घुमावदार और अधिक कठिन की तुलना में यह करने की जरूरत है । मेरा एकमात्र असली विकल्प इसे AfterBuild सेक्शन में शामिल करना है, जो मुझे एक हैक की तरह लगता है।

तो, सीसी.NET लोगों, एमएसबिल्ड लोगों और एमबीयूनिट लोगों के लिए कुछ प्रश्न।

  1. एमएसबिल्ड का उपयोग करते समय, क्या यह वीएस-जेनरेट की गई .csproj फ़ाइल को बिल्ड फ़ाइल के रूप में उपयोग करने की सलाह दी जाती है? या मुझे अपना खुद का बनाना चाहिए?
  2. क्या MbUnit परीक्षण MSBuild फ़ाइल या CC.NET फ़ाइल का हिस्सा होना चाहिए? मेरा शोध यह सुझाव देता है कि वे एमएसबील्ड फ़ाइल में हैं। यदि ऐसा है, तो क्या मैं एक नई MSBuild .proj फ़ाइल बना सकता हूं और उसे .csproj फ़ाइल के अतिरिक्त सीवीएस में जांच सकता हूं? या MbUnit कार्य मेरी .csproj फ़ाइल का हिस्सा बन गया है?
  3. प्रश्न के समान 2. यदि मैं एमएसबिल्ड फ़ाइल में एमबीयूनीट परीक्षण जोड़ता हूं और .csproj फ़ाइल का उपयोग करके समाप्त होता हूं, तो Target Name="AfterBuild" वास्तव में उस जानकारी को जोड़ने के लिए अनुभाग है? Target Name="Test" अनुभाग नहीं होना चाहिए? बनाम वीएस का उपयोग करना .csproj फ़ाइल दूसरे विकल्प को रोकने के लिए प्रतीत होता है।

मुझे पता है कि वहां बहुत कुछ है, लेकिन जो कुछ मैं ऑनलाइन ढूंढने में सक्षम हूं, वह उन विषयों के साथ परिचितता का एक निश्चित स्तर मानता है जो मेरे पास नहीं है - जब तक कि मैं गलत नहीं हूं, इस सामान के लिए सीखने की वक्र बिल्कुल वक्र नहीं है, यह एक कदम समारोह है। :)

संपादित करें 1: मैंने टेक्स्ट को थोड़ा और संक्षेप में अद्यतन किया और जवाब के साथ मेरे कुछ प्रश्नों को हल करने के लिए अद्यतन किया।

उत्तर

13

मैं जेनरेट की गई .csproj फ़ाइलों का उपयोग करने की सलाह दूंगा - वास्तव में उत्पादन के लिए, मुझे लगता है कि उत्पन्न .sln फ़ाइलों का उपयोग करना एक अच्छा विचार है। मैंने पाया है कि आप डेवलपर्स के समान समाधान फ़ाइलों का उपयोग करके लाभ प्राप्त करेंगे।

ध्यान रखें कि .sln फ़ाइलें वास्तव में मान्य msbuild प्रोजेक्ट फ़ाइलों को मान्य नहीं हैं - जब वे इनपुट के रूप में उपयोग की जाती हैं तो उन्हें msbuild द्वारा msbuild परियोजनाओं में परिवर्तित कर दिया जाता है। मुश्किल!

सीखने के प्रयोजनों के लिए, आप एक .csproj के निर्माण को लॉग ऑन करना चाहते हैं और आगे बढ़ने के बारे में एक विचार प्राप्त करने के लिए कदम उठा सकते हैं। हालांकि एमएसबिल्ड नैन की तुलना में थोड़ी अधिक घोषणात्मक है, इसलिए अपना समय लें और थोड़ा प्रयोग करें।

अंत में, मैं आपकी परियोजनाओं को बनाने और अपने यूनिट परीक्षणों को एक साथ चलाने के लिए एमएसबिल्ड कार्यों के साथ एक सतत बिल्ड स्क्रिप्ट प्रोजेक्ट में अपनी .sln या .csproj फ़ाइलों को लपेटूंगा। इस तरह डेवलपर्स को हर बार यूनिट परीक्षण चलाने की ज़रूरत नहीं होती है - लेकिन हर बार जब वे अपना कोड एकीकृत करते हैं तो यूनिट परीक्षण चलाए जाएंगे। और हाँ, सुनिश्चित करें कि वे तेजी से भागते हैं! किसी भी चीज जो एक सेकंड से अधिक समय लेती है उसे निर्धारित समय (रात?) के निर्माण के दौरान चलाना चाहिए। संभावना है कि वे एक यूनिट टेस्ट फ्रेमवर्क के साथ लिखे गए एक यूनिट टेस्ट और अधिक एकीकरण परीक्षण हैं यदि वे एक सेकंड से अधिक समय लेते हैं।

संपादित करें: कुछ अतिरिक्त जानकारी मैं ने पाया है कि मैं उपयोगी पाया है - MSBuild 3.5 का उपयोग कर आप एक .sln फ़ाइल से लक्ष्य आउटपुट प्राप्त करने की अनुमति देगा, जबकि इस जानकारी MSBuild 2.0 में वापस नहीं है (हालांकि मुझे लगता है कि यह दोनों संस्करणों में .csproj फ़ाइलों के लिए काम करना चाहिए)। आप आउटपुट (अपनी निर्मित फाइलें) को अपने यूनिट परीक्षण ढांचे में इनपुट के रूप में उपयोग कर सकते हैं।

0

msbuild के लिए इनपुट के रूप में .csproj का उपयोग करना ठीक है। आप इसके लिए csproj में मैन्युअल रूप से कार्य जोड़ सकते हैं जिसे वीएस से अनुपालन के दौरान अनदेखा किया जाएगा। लेकिन अगर आप कुछ गैर-छोटी चीजें बनाने जा रहे हैं तो अलग एमएसबिल्ड की स्क्रिप्ट बनाने के लिए बेहतर है। और उन्हें csproj फ़ाइलों से संदर्भित किया जा सकता है। क्या आपने एमएस बिल्ड सर्वर पर एक नज़र डाली है जो टीएफएस का हिस्सा है? यह टीएफएस के स्रोत नियंत्रण के साथ एकीकृत करता है और सीआई के लिए इस्तेमाल किया जा सकता है। इसकी परियोजना फाइलें msbuild स्क्रिप्ट हैं।

यदि मैंने एनएएनटी का उपयोग किया है, तो क्या यह आवश्यक है कि सर्वर पर वीएस स्थापित होना चाहिए? क्या आपका मतलब 'एमएसबिल्ड' था? नहीं, csproj फ़ाइलों के साथ msbuild का उपयोग करने के लिए वीएस स्थापित करना जरूरी नहीं है।

1

मुझे व्यक्तिगत रूप से लगता है कि .csproj फ़ाइल के साथ जाना ठीक है। वहां इतना कुछ नहीं चल रहा है कि अगर आप अपनी खुद की एमएसबिल्ड परियोजना को रोल करते हैं तो आपको खुद को जोड़ना नहीं होगा।

हालांकि, जो भी मार्ग आप जाने का फैसला करते हैं, मैं अब भी अपने निर्माण चरण के हिस्से के रूप में MbUnit को जोड़ने की अनुशंसा करता हूं, लेकिन इसे CC.Net में एक अलग चरण के रूप में जोड़ें। रनिंग यूनिट परीक्षण दैनिक सीआई चक्र का हिस्सा होना चाहिए; हालांकि, यह हर निर्माण का हिस्सा नहीं होना चाहिए।

4

csproj फ़ाइल को अकेले छोड़ दें (जैसा कि आप कहते हैं, आप इसे समझ नहीं सकते हैं)।

अपनी खुद की msbuild proj फ़ाइल बनाएं और msbuild कार्य के माध्यम से अपनी मुख्य बिल्ड फ़ाइल से csproj (या sln) को कॉल करें। अपनी सीआई सर्वर को अपनी बिल्ड फ़ाइल बनाने के लिए कहें।

यह पृथक्करण आपके स्वयं के पूर्व और पोस्ट कार्यों (यूनिट परीक्षण, धूम्रपान परीक्षण एसक्यूएल स्क्रिप्ट, fxcop/अन्य स्थिर विश्लेषण इत्यादि) को जोड़ना आसान बनाता है और आप अपने कामकाजी माहौल को तोड़ नहीं देंगे। इसका मतलब यह भी है कि आप जो कुछ भी चाहें (एमएसबिल्ड/चींटी इत्यादि) में अपने कस्टम लक्ष्य कर सकते हैं, अतिरिक्त भलाई के लिए कोडप्लेक्स पर एमएसबिल्ड कॉन्ट्रिब के रूप में देखें।

आप के लिए बाहर देखने के लिए

+0

क्या नई .proj फ़ाइल को .csproj फ़ाइलों के साथ सीवीएस में चेक किया जाता है? या यह केवल बिल्ड सर्वर पर और स्रोत नियंत्रण पर्यावरण के बाहर रहता है? मेरा झुकाव इसे जांचना होगा, लेकिन यदि सर्वोत्तम प्रथाएं हैं, तो मैं उनका पालन करना चाहूंगा। – jerhinesmith

+1

** सब कुछ ** चेक इन हो जाता है। हम कई बिल्ड एजेंटों के साथ टीमसिटी बिल्ड सर्वर का उपयोग करते हैं। बिल्ड सर्वर केवल 2 (ठीक 2 से अधिक) चीजें जानता है। स्रोत कहां है (सीवीएस/एसवीएन/वीएसएस/आदि) और कौन सी फाइल बिल्ड करता है। (कम बटेरी को बचाने के लिए मिला) –

+0

यह वह तरीका है जिसका मैं उपयोग करता हूं। प्रत्येक प्रोजेक्ट (वेबसाइट, वेब एप्लिकेशन, एप्लिकेशन, एक्सटेंशन इत्यादि) के लिए, मेरे पास सबवर्सन में स्वयं का भंडार है, यह स्वयं की .sln फ़ाइल है जिसमें एक या अधिक है। * Proj और one .proj फ़ाइल। एसएसएलएन फ़ाइल का उद्देश्य वीएस में पूरी चीज खोलने और कोड लिखने/डीबग करने की अनुमति देना है। .proj फ़ाइल क्रूज़ कंट्रोल या टीमसिटी को सतत एकीकरण करने की अनुमति देना है। –

0

ठीक है, कुछ चीजें अपने निर्माण सर्वर पर दृश्य stuido की जरूरत नहीं है (unles आप, तैनाती परियोजनाओं जब तक यह भी के बाद से मैं पिछले देखा बदल दिया गया है)। Csproj प्रारूप VS2005 से VS2008 में बदल गया है। अगर आप MSBuild के साथ जा रहे हैं, तो याद रखें कि आप .vproproj (सेटअप) फ़ाइलों को बनाने में सक्षम नहीं होंगे; इसके लिए आपको डेवेनव (वीएस निष्पादन योग्य) की आवश्यकता है। उस ने कहा कि आप हमेशा एक एमएसबिल्ड कार्य बना सकते हैं जो डेवेनव को कॉल करता है और इसे आपके लिए बनाता है।

अपने प्रश्न के लिए कि अपनी खुद की सीस्पोज़ फ़ाइल बनाने या वीएस2005 द्वारा बनाए गए किसी का उपयोग करने के लिए, मैं एक मध्यम सड़क का सुझाव दूंगा: create your own project template, जो आपकी आवश्यकताओं को पूरा करता है और वीएस को बाकी की देखभाल करने देता है।

3

अपनी खुद की प्रोजेक्ट फ़ाइल बनाएं (कुछ भी जो प्रोज़ के साथ समाप्त होता है उसे MSBuild द्वारा प्रोजेक्ट फ़ाइल माना जाता है) और वहां से अपना निर्माण कॉल करें। इस तरह:

<MSBuild Projects="MySolution.sln" Targets="Clean; Rebuild" Properties="Configuration=$(BuildMode);"> 

नोट MSBuild भी (समाधान फ़ाइल) किसी भी बदलाव के बिना, जो आम तौर पर csproj फाइलों का एक समूह होने की तुलना में आसान है ...

+0

मैं सहमत हूं। मैंने इस परियोजना का उपयोग कई परियोजनाओं पर किया है और ऐसा लगता है कि यह अच्छी तरह से काम करता है। –

2

मैं दोनों NAnt और MSBuild का उपयोग .sln निर्माण कर सकते हैं कि । NAnt को NAntContrib के साथ अपग्रेड किया गया था ताकि मुझे msbuild taks मिल सके। मैं अस्थायी सेटअप हो सकता हूं लेकिन अब तक मैंने बड़ी समस्याओं में भाग नहीं लिया है। मैंने कहा कि मैं भी एक नई csproj फ़ाइल नहीं बनाता क्योंकि मैं उसी सीस्पोज/एसएलएन का उपयोग करता हूं जिसका उपयोग मैं वीएस -2008 में करता हूं। एमएसबिल्ड के साथ बिल्डिंग प्रोजेक्ट्स ने सरलीकृत विरासत NANT स्क्रिप्ट को सरल बनाया (हमने csc कार्य का उपयोग किया)।

नोट्स:

  1. आप अपनी परियोजनाओं में विंडोज कार्यप्रवाह फाउंडेशन का उपयोग करते हैं आप प्रमुख कठिनाइयों होगा MSBuild के बिना इस तरह परियोजना का निर्माण।
  2. अपनी बिल्ड मशीन पर VS.NET इंस्टॉल न करें। आप Wix का उपयोग कर सकते हैं स्थापना एमएसआई बनाओ।
  3. @ फ्रांसी पेनोव: रनिंग यूनिट परीक्षण प्रत्येक निर्माण का हिस्सा होना चाहिए। क्या आप वाकई बग खोजने के लिए कल तक इंतजार करना चाहते हैं? एक साइड नोट है: यूनिट परीक्षण बहुत तेजी से चलना चाहिए।