2011-03-25 35 views
5

में पुनर्निर्माण के लिए सी # परियोजनाओं के कारणों में मेरे पास 320 परियोजनाओं का एक बड़ा समाधान है, जहां एक वेब फ़ॉर्म में भी छोटे बदलावों के परिणामस्वरूप छोटे बदलाव का परीक्षण/डीबग करने के लिए लंबे समय तक निर्माण होता है। मुझे पोस्ट-बिल्ड फ़ाइल कॉपी कार्यों को 'टचिंग' फ़ाइल डेटाटाइम के लिए संदेह है और कई पुनर्निर्माण का कारण बनता है।दृश्य स्टूडियो

क्या किसी भी मजबूत नामकरण और संस्करण प्रभावों की अनुपस्थिति में, बाइनरी आउटपुट फ़ाइलों की तुलना में स्रोत फ़ाइलों के अलावा पुनर्निर्माण चलाने के लिए वीएस 2010 के लिए कोई अन्य कारण हैं?

अतिरिक्त: स्रोत स्रोत के आकार या आकार पर मेरा कोई तत्काल प्रभाव नहीं पड़ता है। यह स्थिर कोर उत्पाद का ट्रंक है और किसी भी अल्पकालिक "गैर-व्यवसाय" परिवर्तन को जोखिम भरा और महंगा माना जाता है। मैं परियोजना के भविष्य के दिशाओं में इनपुट के रूप में यहां प्राप्त उत्तरों में उल्लिखित अंक उठाऊंगा।

+1

मुझे नहीं पता कि आपकी पुनर्निर्माण समस्या को कैसे ठीक किया जाए, लेकिन समाधान में 320 परियोजनाएं एक अच्छा विचार नहीं है। अगर मैं आप थे तो मैं एक प्रश्न पोस्ट करूंगा कि ये कौन सी परियोजनाएं हैं, उनके बीच सामान्य निर्भरता क्या है, उन्हें प्रबंधनीय बनाने का सबसे अच्छा तरीका मांगना। –

+0

मेरे भगवान, 320 परियोजनाएं? मैंने 10 बार मारा और यह असहनीय था। मैं बहुत बहुत माफी चाहता हूं। इसके साथ मदद करने के लिए आप [psake] (https://github.com/psake/psake) जैसे टूल का उपयोग करके कई समाधान या मैन्युअल बिल्ड प्रक्रिया बना सकते हैं जो किसी दिए गए परिदृश्य के लिए केवल आवश्यक परियोजनाओं को जोड़ता है। –

उत्तर

20

सी # पुनर्निर्माण क्योंकि फ़ाइल बदल दी गई है, या एक निर्भरता बदल दी गई है, लेकिन अक्सर "कोई स्पष्ट कारण" के लिए भी नहीं। आप अक्सर एक ही बदलाव किए बिना पंक्ति में 2 या 3 बार बना सकते हैं और सी # ट्रंडल हो जाएगा और कोड की विशाल मात्रा का पुनर्निर्माण करेगा।

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

बेहतर समाधान, हालांकि, इसे पहले स्थान पर संकलित करने से बचने के लिए है।

  • प्रत्येक प्रोजेक्ट बिल्ड के लिए अतिरिक्त ओवरहेड जोड़ता है। मेरे पीसी पर यह लगभग 3 सेकंड है। दो परियोजनाओं के कोड को एक .csproj फ़ाइलों में विलय करके मैं 3 सेकंड के निर्माण समय को बचाता हूं। तो 300+ परियोजनाओं के लिए आप केवल परियोजनाओं को विलय करके बिल्ड समय से 10 मिनट पहले दस्तक दे सकते हैं - यानी जहां कई असेंबली के बजाय एक असेंबली में कई मॉड्यूल/नेमस्पेस का उपयोग संभव हो। आप पाएंगे कि आपका एप्लिकेशन स्टार्टअप समय भी सुधार हुआ है।

  • कई परियोजनाओं को हर समय निर्माण की आवश्यकता नहीं होती है। लाइब्रेरी प्रोजेक्ट्स के रूप में इन्हें तोड़ें और बस (संदर्भ) बाइनरी के लिए लिंक करें (संदर्भ) बाइनरी

  • भी "स्थानीय कॉपी करें" को अक्षम करें और इसके बजाय सभी आउटपुटपैथ को किसी साझा फ़ोल्डर में इंगित करें - इससे 320 डीएल की 320 प्रतियां बनाने से बचने से ओवरहेड कम हो जाएंगे आपके हार्ड ड्राइव पर।

  • नई बिल्ड कॉन्फ़िगरेशन (उदा। "डीबग फास्टबिल्ड") जोड़ें जो केवल उन असेंबली का निर्माण करें जो आप वास्तव में काम कर रहे हैं।कॉन्फ़िगरेशन मैनेजर के साथ आप उन परियोजनाओं को अनचेक कर सकते हैं जिन्हें आप बनाना नहीं चाहते हैं, और प्रतिष्ठा, उन्हें बिल्ड सिस्टम द्वारा अनदेखा किया जाता है। (के लिए घ: के बाद आप स्रोत नियंत्रण से कोड प्राप्त, एक पूर्ण "डीबग" का निर्माण सब कुछ ताज़ा, और फिर "fastbuild"

+0

के साथ उस आखिरी बिंदु की मदद कर सकते हैं, बुनियादी सुझावों के लिए धन्यवाद, मुझे पता है कि बड़े समाधान बनाने के दौरान छोटे twicks हाथ में आ सकते हैं। – Pimenta

0

320 परियोजनाएं निर्भरता पेड़ में बहुत सी फाइलें हैं: निर्माण इंजन द्वारा किए गए परिवर्तनों के लिए सभी को जांचने की आवश्यकता है। Process Monitor जैसे कुछ का उपयोग करने से आपको यह देखने की अनुमति मिल जाएगी कि यह पुष्टि करने के लिए कौन से फाइल ऑपरेशंस चल रहे हैं।

रन टाइम पर लोड करने के लिए 320 असेंबली (.NET फ्रेमवर्क असेंबली के शीर्ष पर) आपके एप्लिकेशन को धीमा कर देगा, और वास्तव में डीबगर (लोड करने के लिए बहुत सारे प्रतीकों) को धीमा कर देगा। डीबग देखें विंडोज़ | लोड मॉड्यूल देखने के लिए मॉड्यूल)।

साथ ही समाधान में परियोजनाओं की संख्या को कम करने के साथ-साथ परियोजनाओं के सबसेट के साथ कई समाधान होने के लिए काफी संभव है) क्या आपको वास्तव में कई अलग-अलग परियोजनाओं की आवश्यकता है? डीबगर के बाहर .NET लोडर केवल लोड करता है और जेआईटी को असेंबली से कोड की आवश्यकता होती है, इसलिए बड़ी असेंबली का मतलब धीमी लोड समय नहीं होता है और विंडोज लोडर से प्रति असेंबली ओवरहेड से बचता है।

+0

मेरा मानना ​​है कि वे पोस्ट-बिल्ड आईएलएमरे चरण –

2

आप अपने समाधान MSBuild और/v का उपयोग कर निर्माण करने के लिए कोशिश कर सकते हैं पर बदलने में निर्माण निदान लॉगिंग)।

लॉग में संकेत हो सकते हैं कि एक परियोजना अद्यतित क्यों नहीं है।

0

सबसे पहले, यह सुनिश्चित करने के लिए जांचें कि अन्य परियोजनाओं के संदर्भ परियोजना संदर्भ हैं और असेंबली संदर्भ नहीं हैं।

दूसरा, परिपत्र संदर्भों की जांच करें।

तीसरा, लॉगिंग वर्बोसिटी को डायग्नोस्टिक पर सेट करें और पहली पंक्ति देखें और देखें कि यह पहली बार समाधान बनाने के बाद परियोजनाओं का पुनर्निर्माण क्यों कर रहा है।

वहां बहुत अधिक जांच की जा सकती है, लेकिन उन 3 चीजों को पहले देखें।

1

मुझे लगता है कि 320 परियोजनाओं में आप बहुत पहले से ही विजुअल स्टूडियो को आराम से करने के लिए डिज़ाइन की गई सीमा से अधिक हो गए हैं।

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

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

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