2009-09-30 25 views
14

मैं एक बहुत बड़ी परियोजना के साथ काम कर रहा हूं (एक समाधान जिसमें 16 परियोजनाएं हैं और प्रत्येक परियोजना में लगभग 100 फाइलें हैं)।मैं अपने प्रोजेक्ट से अनावश्यक संसाधन कैसे हटा सकता हूं?

यह विजुअल स्टूडियो 2005 के साथ सी ++/सी # में लिखा गया है।
परियोजनाओं में से एक में लगभग 2000 संसाधन हैं जिनमें से केवल 400 ही उपयोग किए जाते हैं।
मैं उन अप्रयुक्त संसाधनों को कैसे हटा सकता हूं?

मैंने प्रयुक्त लोगों की खोज करके कार्य को पूरा करने की कोशिश की।
यह काम करता था और मैं समाधान बनाने में सक्षम था, लेकिन यह रनटाइम पर टूट गया।

मुझे लगता है क्योंकि enum एस का उपयोग किया जाता है। (महत्वपूर्ण)

मुझे यकीन है कि यह क्रम में नष्ट नहीं होती है कैसे कर सकते हैं?

संपादित करें:
मैं (जो नहीं मिला है) मक्खी पर क्रम (किसी भी तरह) पर लगता है कि एक विधि संसाधन उत्पन्न करने के लिए हो सकता है।
लेकिन मुझे इस बारे में कोई जानकारी नहीं है ... कुछ भी

नोट: ठीक है अगर कुछ अनावश्यक संसाधन अभी भी हैं।

+1

यदि आपका मतलब है कि resx फ़ाइल साफ़ हो, SharpDevelop में ऐसी सुविधा है। (http://www.sharpdevelop.net) –

+0

क्या यह सी ++ के साथ काम करता है? –

+0

मैं 1600 स्रोत फ़ाइलों के साथ "बहुत बड़ा" सिस्टम नहीं कहूंगा। मामूली, शायद, लेकिन "बहुत बड़ा" नहीं। एक और शून्य जोड़ें, और आप "बहुत बड़ा" आ रहे हैं। – JesperE

उत्तर

4

मैं आपके स्रोत कोड को खोजने के लिए एक कस्टम टूल लिखूंगा।

यदि आप हेडर फ़ाइल से संसाधन आईडी हटाते हैं (यानी संभवतः resource.h कहा जाता है) और फिर पुन: संकलित करें और कोई चेतावनी न दें: तो यह एक अच्छी बात है।

यहां बताया गया है कि मैं ऐप लिखने के बारे में कैसे जाऊंगा। संसाधन फ़ाइल (resource.h) इनपुट के रूप में लें जिसे आप जांचना चाहते हैं। हेडर फ़ाइल (* .h) खोलें और सभी संसाधन स्थिरांक को पार्स करें (या कम से कम उन हिस्सों में जिन्हें आप रुचि रखते हैं)। बाद में त्वरित रूप से देखने के लिए उन्हें हैश तालिका में स्टोर करें। अपनी प्रोजेक्ट में प्रत्येक कोड फ़ाइल के लिए, अपनी प्रत्येक संसाधन आईडी के उदाहरणों के लिए टेक्स्ट खोजें। जब संसाधन आईडी का उपयोग किया जाता है, तो हैश तालिका में मान बढ़ाएं अन्यथा इसे शून्य पर छोड़ दें। अंत में, सभी संसाधन आईडी को डंप करें जो लॉग फ़ाइल या कुछ शून्य हैं। फिर परीक्षण करें कि वास्तव में आप उन निर्दिष्ट संसाधन आईडी को सुरक्षित रूप से हटा सकते हैं। एक बार ऐसा करने के बाद, एक और टूल लिखें जो निर्दिष्ट संसाधन आईडी को आपके लॉग फ़ाइल के परिणामों को हटा देता है।

आप इस तरह के एक उपकरण को perl में लिख सकते हैं और यह लगभग 0.3 सेकंड में निष्पादित होगा: लेकिन डीबग करने में दिन लगेंगे। :) या आप इसे लिख सकते हैं।नेट, और यह थोड़ा धीमा निष्पादित करेगा, लेकिन आपको डीबग करने में एक घंटा लगेगा। :)

+1

बहुत अच्छा :-) + 1 ए –

0

शायद Find Unused Resources in a .NET Solution यहां सहायता करता है? असल में, आपको यह जांचना होगा कि कौन से संसाधनों का उपयोग किया जाता है (उदाहरण के लिए व्यापक कोड कवरेज चेक द्वारा) और अप्रयुक्त लोगों को हटा दें।

और शायद आपको सफाई के लिए ट्रेल-एंड-त्रुटि दृष्टिकोण का उपयोग करके डरना नहीं चाहिए।

+0

मैंने बस यह किया। लेकिन :( –

1

आप विजुअल स्टूडियो के लिए तीसरे पक्ष के प्लग-इन का उपयोग ReSharper के रूप में कर सकते हैं। यह ऐड-इन आपके सी # कोड का विश्लेषण करेगा और अप्रयुक्त संसाधनों को इंगित करेगा। लेकिन यह केवल सी # के साथ काम करता है।

1

सी ++ परियोजनाओं के लिए, रिजॉर्ग रिवरब्लैड से देखें।

"संसाधन आईडी ऑर्गनाइज़र (संक्षिप्त के लिए ResOrg) दृश्य सी ++ के लिए एक ऐड-इन है जो विंडोज अनुप्रयोगों को विकसित/बनाए रखने के सबसे कष्टप्रद (और अनावश्यक) कार्यों में से एक को दूर करने में मदद करने के लिए डिज़ाइन किया गया है - संसाधन प्रतीक आईडी मानों को बनाए रखना"

http://www.riverblade.co.uk/products/resorg/index.html

0

समाधान एक्सप्लोरर में राइट क्लिक करें और एक संदर्भ पर और निर्भर कोड खोजें मेनू आइटम पर क्लिक करें।

यदि यह कोई निर्भर कोड नहीं मिल रहा है तो आप इस संदर्भ को परियोजना से हटा सकते हैं। ( निकालें राइट-क्लिक मेनू के अंतर्गत भी है।)

संपादित करें: एक बड़ी परियोजना के लिए, का पता लगाएं निर्भर कोड आपरेशन एक लंबे समय लगेगा। तो के बाद से 2000 संसाधन हैं और सबसे अधिक संभावना मूल्य अपना समय यह शायद नहीं एक व्यवहार्य विकल्प है ....

1

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

1

आप Reflector (फ्री) टूल पर एक नज़र डालना चाहते हैं, ReSharper (महंगा) के साथ भ्रमित नहीं होना चाहिए। यह आपको दिखा सकता है कि कौन से डीएलएल दूसरे पर निर्भर हैं। फिर यदि आप चाहते हैं कि आप डीएलएल को हटा सकें जिसे किसी और चीज से संदर्भित नहीं किया जा रहा है। देखें कि क्या आप निर्भरता इंजेक्शन या प्रतिबिंब का उपयोग कर रहे हैं जो तब आपके ज्ञान के बिना अपना कोड तोड़ सकता है।

परावर्तक: http://www.red-gate.com/products/reflector/

यह ऐड-इन असेंबली निर्भरता ग्राफ और आईएल ग्राफ खींचता है: http://reflectoraddins.codeplex.com/Wiki/View.aspx?title=Graph

+1

परावर्तक अब (बीयर) मुक्त नहीं है। – Bobby

1

यदि आपके कोड में रनटाइम पर संसाधनों की गतिशील लोडिंग (जैसे स्ट्रिंग्स के माध्यम से) शामिल है, तो स्वचालित रूप से यह निर्धारित करने का कोई तरीका नहीं है कि स्रोत से कौन से संसाधन सुरक्षित रूप से हटाए जा सकते हैं। एक गतिशील लोडिंग कथन किसी संसाधन को लोड कर सकता है।

आपकी सबसे अच्छी शर्त ऐप के अपने छंटनी वाले संस्करण से शुरू करना है, इसे चलाएं, और यह जांचें कि जब आप इसका परीक्षण करते हैं तो कौन से संसाधन गायब हैं। फिर उन्हें वापस जोड़ें और पुनः प्रयास करें।

0

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

enum { IDD = IDD_ABOUTBOX }; 

.. किसी भी अन्य के लिए यह सुरक्षित होना चाहिए।

1

समाधान एक्सप्लोरर के "संसाधन दृश्य" में राइट-क्लिक करें और "संसाधन चिह्न" का चयन करें। अब आपको एक सूची मिलती है जहां आप देख सकते हैं कि आरसी-फाइल में कौन से संसाधन स्थिरांक का उपयोग किया जाता है। यह आपकी संसाधन को साफ़ करने के तरीके पर थोड़ा सा मदद कर सकता है (हालांकि यह आपको नहीं दिखाता है कि वास्तविक सी ++ कोड में कौन से संसाधनों का उपयोग नहीं किया जाता है)।

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

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