अप्रयुक्त संदर्भ निकालें (! = "उपयोग कर")


100

मैं अपनी परियोजनाओं में अप्रयुक्त संदर्भ कैसे खोज और हटा सकता हूं?

मुझे पता है कि आप आसानी से बनाम 2008 में उपयोग किए गए कथनों को हटा सकते हैं, लेकिन यह आपकी परियोजनाओं में वास्तविक संदर्भ को नहीं हटाता है। संदर्भित dll अभी भी आपके बिन / सेटअप पैकेज में कॉपी किया जाएगा।


धन्यवाद। अफसोस की बात है, कोई जवाब नहीं जो मैं ढूंढ रहा था ...
बोरिस कॉल ने

जवाबों:


55

* नोट: इस उत्तर के एक और संस्करण के लिए http://www.jetbrains.net/devnet/message/5244658 देखें ।

पदों के माध्यम से पढ़ना, ऐसा लगता है कि मूल प्रश्न के रूप में कुछ भ्रम है। मुझे एक छुरा ले चलो।

मूल पोस्ट वास्तव में सवाल पूछ रही है: "मैं एक विज़ुअल स्टूडियो प्रोजेक्ट से अन्य प्रोजेक्ट / असेंबली के संदर्भों को कैसे पहचानूं और हटाऊं जो उपयोग में नहीं हैं?" पोस्टर चाहता है कि असेंबली अब निर्माण आउटपुट के हिस्से के रूप में प्रकट न हो।

इस मामले में, ReSharper आपको उनकी पहचान करने में मदद कर सकता है, लेकिन आपको उन्हें स्वयं निकालना होगा।

ऐसा करने के लिए, संदर्भ इनथ सॉल्यूशन ब्राउज़र खोलें, प्रत्येक संदर्भित असेंबली पर राइट माउस क्लिक करें, और "फाइंड डिपेंडेंट कोड" चुनें। देख:

http://www.jetbrains.com/resharper/features/navigation_search.html#Find_ReferencedDependent_Code

आपको या तो मिलेगा:

  1. ब्राउज़र विंडो में उस संदर्भ पर निर्भरता की एक सूची, या

  2. आपको एक संवाद "मॉड्यूल XXXXXXX पर निर्भर कोड नहीं मिला।"

यदि आपको दूसरा परिणाम मिलता है, तो आप संदर्भ पर राइट माउस क्लिक कर सकते हैं, निकालें का चयन कर सकते हैं, और इसे अपने प्रोजेक्ट से हटा सकते हैं।

जबकि आपको यह "मैन्युअल" करना होगा, यानी एक समय में एक संदर्भ, यह काम पूरा करेगा। अगर किसी ने इसे किसी तरह से स्वचालित किया है तो मुझे यह सुनने में दिलचस्पी है कि यह कैसे किया गया था।

आप बहुत अधिक .Net फ्रेमवर्क में लोगों को अनदेखा कर सकते हैं क्योंकि वे आम तौर पर आपके बिल्ड आउटपुट में कॉपी नहीं किए जाते हैं (आमतौर पर - हालांकि सिल्वरलाइट ऐप्स के लिए जरूरी नहीं है)।

कुछ पोस्ट इस प्रश्न का उत्तर देते हुए प्रतीत होते हैं: "मैं एक स्रोत कोड फ़ाइल से क्लॉज़ (C #) का उपयोग करके कैसे निकालूं जो उस फ़ाइल के भीतर किसी भी संदर्भ को हल करने के लिए आवश्यक नहीं हैं"।

इस मामले में, ReSharper कुछ तरीकों से मदद करता है:

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

    http://www.jetbrains.com/resharper/features/code_analysis.html#On-the-fly_Error_Detection

  2. आपको कोड सफाई प्रक्रिया के भाग के रूप में उन्हें स्वचालित रूप से हटाने की अनुमति देता है:

    http://www.jetbrains.com/resharper/features/code_formatting.html#Optimizing_Namespace_Import_Directives

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


अच्छा व्यापक जवाब। यह अजीब बात है कि यद्यपि आप जानते हैं कि मैं उपयोग करने वाले कथनों का उल्लेख नहीं कर रहा हूँ (यह साफ-सुथरा है कि वीएस में मानक है, आर # # का आविष्कार क्यों नहीं किया गया है) आप पहले उस प्रश्न का उत्तर देते हैं। क्या आप दोनों को घुमाना चाहेंगे?
बोरिस ने 13

करूँगा। ReSharper की सुविधा विजुअल स्टूडियो कार्यान्वयन से पहले है। यह तब तक बना रहता है जब यह उनके "स्वतः पूर्ण" फीचर के माध्यम से प्राप्त किया जाता है - जब आपके पास ReSharper होता है तो स्मार्ट टैग बंद हो जाते हैं।
जुल्फिकार 28'09

1
अब ~ 4 साल बाद में ReSharper 6.1 को सीधे सुविधा मिल गई!
जुलिएन रोनाग्लिया

निश्चित नहीं है कि आपका क्या मतलब है - ReSharper में यह सुविधा वर्षों से है।
नमस्ते

8
BE AWARE: अगर आप असेंबली से डायनामिकली लोड करने के लिए किसी भी तरह के रिफ्लेक्शन का इस्तेमाल करते हैं, तो यह एक बुरी बात होगी। आपने बिन / प्रोडक्शन साइट पर असेंबली को ले जाने के लिए "संदर्भ" का उपयोग किया होगा, लेकिन सीधे इसे संदर्भित करने वाला कोई कोड नहीं होगा। देखभाल के साथ उपयोग करें!
कैस्पर लियोन नीलसन

12

मेरे द्वारा लिखे गए ' निकालें अप्रयुक्त संदर्भ ' एक्सटेंशन का उपयोग कर सकते हैं :

http://visualstudiogallery.msdn.microsoft.com/9811e528-cfa8-4fe7-9dd1-4021978b5097


यह एक्सटेंशन प्रकाशित नहीं हुआ है
stombeur

1
मुझे यह पहली बार में पसंद है! लेकिन फिर आगे के परीक्षण के साथ, इसने मेरे लिए आवश्यक संदर्भों को हटा दिया। विफलता के बारे में अधिक जानकारी यहाँ हैं: wpfsharp.com/2012/04/04/…
Rhyous

7

अप्रयुक्त संदर्भों को हटाने के लिए एक फीचर विजुअल स्टूडियो 2008 पहले से ही समर्थन करता है। दुर्भाग्य से, केवल VB .NET प्रोजेक्ट्स के लिए।

मैंने C # प्रोजेक्ट्स के लिए भी यह सुविधा प्राप्त करने के लिए Microsoft Connect पर एक सुझाव दिया है:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=510326

यदि आपको यह सुविधा पसंद है तो आप मेरे सुझाव को वोट कर सकते हैं।


5

इसे आज़माएँ: संदर्भ सहायक

सारांश

संदर्भ सहायक दृश्य स्टूडियो 2010 में C #, F #, VB.NET या VC ++ / CLI परियोजनाओं से अप्रयुक्त संदर्भों को हटाने में मदद करता है।


1
हो सकता है कि आपको 2012 के लिए एक समान एक्सटेंशन पता हो?
isxaker

@isxaker यह अब
रिसर्पर

4

ReSharper 6.1 में ये विशेषताएं शामिल होंगी:

  • संदर्भों का अनुकूलन करें : कोड में अपने विधानसभा संदर्भों और उनके उपयोगों का विश्लेषण करें, निरर्थक संदर्भों की सूची प्राप्त करें और उन्हें हटा दें।

  • अप्रयुक्त संदर्भ निकालें : निरर्थक असेंबली संदर्भों को हटाने के लिए त्वरित रिफैक्टिंग।

  • असेंबली रेफरेंस पर सुरक्षित डिलीट : असेंबली रेफरेंस को डिलीट कर देगा, अगर वे सभी बेमानी हैं, अन्यथा यूजेज डिसाइड करता है और सिलेक्टेड लिस्ट के सिर्फ रिडंड असेंबली रेफरेंस को हटा सकता है।


4

ReSharper आपके लिए ऐसा करेगा (और इतना अधिक!)


क्या Resharper वास्तव में संदर्भ फ़ोल्डर में DLL के संदर्भ को हटा देगा? मुझे नहीं लगता कि यह ऐसा करता है?
०१ पर ०१.४१

1
मुझे नहीं लगता कि यह होगा ... मुझे लगता है कि यह सिर्फ ऐसे नामस्थान के लिए स्टेटमेंट का उपयोग करता है जिसे आप संदर्भित नहीं करते हैं। एफडब्ल्यूआईडब्ल्यू - कोडोरश समान कार्यक्षमता प्रदान करता है "और बहुत अधिक!" :)
समुराई केन

1
अब ~ 4 साल बाद बादशाह 6.1 को सुविधा मिली!
जुलिएन रोनाग्लिया

3

मैंने वीएस 2010 अल्टीमेट आर्किटेक्चर में विस्तार के बिना ऐसा किया-> डिपेंडेंट डिपेंडेंसी ग्राफ-> असेंबली द्वारा, यह असेंबली का उपयोग करता है, और मैन्युअल रूप से अप्रयुक्त संदर्भों को हटा देता है।


मैं एक बड़ी परियोजना के लिए इसकी अनुशंसा नहीं करता। मुझे यह पता लगाना बहुत मुश्किल था कि क्या इस्तेमाल किया गया था और क्या नहीं। हालांकि, मैं कलर ब्लाइंड भी हो जाता हूं, इसलिए इस की उपयोगिता ने मुझे प्रभावित किया है।
डबियसपुशर

2

मेरे पास एक मुफ्त उत्तर है जो विज़ुअल स्टूडियो के किसी भी संस्करण और किसी भी फ्रेमवर्क संस्करण में काम करता है। यह अप्रयुक्त संदर्भों को नहीं हटाता है, लेकिन यह उनकी पहचान करता है।

आप अपने प्रोजेक्ट dll पर Telerik JustDecompile का उपयोग कर सकते हैं । JustDecompile में बस dll खोलें और Referencesयह देखने के लिए नीचे जाएं कि संकलित dll में वास्तव में क्या उपयोग किया गया है।

यहां छवि विवरण दर्ज करें


1
मुझे लगता है कि यह एक महान समाधान है! क्या आप VS प्लगिन लिखते हैं? :) ILSpy में एक प्लगइन है, और मैं यह देखने जा रहा हूं कि क्या यह किसी भी तरह आसानी से अर्ध-स्वचालित हो सकता है ...
स्टीवन कोको

@StevenCoco मैं एक लंबे समय में नहीं है, लेकिन IDE एपीआई इंटरनेट पर बाहर बहुत सारे अच्छे उदाहरणों के साथ बहुत सीधा है। सौभाग्य और अगर आप इसे प्राप्त करते हैं तो हमें अपनी परियोजना के साथ अपडेट करें!
टोडरमो

0

यह देखते हुए कि VisualStudio (या यह msbuild है?) अप्रयुक्त संदर्भों का पता लगाता है और उन्हें आउटपुट फ़ाइल में शामिल नहीं करता है, आप एक स्क्रिप्ट लिख सकते हैं जो कि csproj के संदर्भों को पार्स करता है, और तुलनात्मक संदर्भों के साथ तुलना पर पता चला है परियोजना का उत्पादन।

यदि आप प्रेरित हैं ...


1
यह हमेशा सही नहीं होता है। उदाहरण के लिए, यदि आपके पास वर्ग फू है जो बार से निकलता है, और आपके पास बार में स्थिर सदस्य ब्ला है, और आप इसे फू कहते हैं। तुला, तो आपके पास संकलक के संदर्भ में फू का संयोजन होना चाहिए, लेकिन यह उत्सर्जित नहीं होगा उत्पादन में, क्योंकि स्थैतिक सदस्य बार में है। इस तरह के कुछ और मामले हैं।
इल्या रायजेनकोव

हाँ, मैंने अपनी स्क्रिप्ट में कुछ 'छेद' देखे हैं, कभी भी वर्कआउट करने के चक्कर में नहीं पड़े। जानकारी के लिए धन्यवाद।
बेंजोल

0

मुझे लगता है कि बिन \ _ में कॉपी किए जाते हैं, क्योंकि प्रोजेक्ट में जो संदर्भ हटा दिया गया है, संदर्भ ओ अन्य प्रोजेक्ट है जो एक ही संदर्भ है ...


0

यदि आप जानते हैं कि किन संदर्भों का उपयोग नहीं किया गया है, तो आप उन्हें मैन्युअल रूप से निकाल सकते हैं।
समाधान एक्सप्लोरर में, संदर्भ नोड में संदर्भ को राइट-क्लिक करें , और उसके बाद निकालेंक्लिक करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.