2008-09-25 19 views
10

मेरे पास एक वीएस (2008) समाधान है जिसमें कई परियोजनाएं शामिल हैं, सभी एक ही नामस्थान में नहीं। जब मैं समाधान का निर्माण करता हूं, शीर्ष स्तर परियोजना द्वारा उपयोग किए जाने वाले सभी डीएलएस टॉपप्रोजेक्ट को टॉपप्रोजेक्ट \ bin \ debug फ़ोल्डर में कॉपी किया गया है। हालांकि, संबंधित .pdb फ़ाइलों को केवल कुछ अन्य परियोजनाओं के लिए कॉपी किया गया है। यह दर्द है, उदाहरण के लिए जब NDepend का उपयोग करते हैं।विजुअलस्टूडियो बिन डीबग फ़ोल्डर्स में पीडीबी फाइलें

वीएस कैसे तय करता है कि कौन सी .pdb फ़ाइलों को उच्च स्तर के बिन \ डीबग फ़ोल्डरों में कॉपी करने के लिए? मैं दूसरों को कॉपी करने के लिए वीएस कैसे प्राप्त कर सकता हूं?


संपादित करें:

संदर्भ इस प्रकार हैं: सभी DLLs उनके PDBs बिना, एक केंद्रीय स्थान पर कॉपी कर रहे हैं। टॉपप्रोजेक्टकेवल इन कॉपी किए गए डीएलएस के संदर्भ हैं; डीएलएस स्वयं, हालांकि, स्पष्ट रूप से जानते हैं कि उनके पीडीबी कहां हैं, और (उनमें से अधिकतर) डीबग फ़ोल्डर में सही ढंग से कॉपी हो जाते हैं।

+0

क्या सभी परियोजनाएं (प्रोजेक्ट, एक * .dll/* exe फ़ाइल नहीं है) "टॉपप्रोजेक्ट" के संदर्भ में हैं? – TcKs

+0

नहीं, उनमें से कोई नहीं: प्रश्न का मेरा संपादन देखें। –

+0

मेरे पास कई पीडीबी फाइलें हैं जिनमें से मुझे पायथन डाउनलोड पेज से डाउनलोड किया गया है जैसे विज़ुअल स्टूडियो ऐड या कुछ ऐसा है। इसे विजुअलस्टूडियो में आयात करने के लिए? –

उत्तर

11

MSDN से:

एक कार्यक्रम डेटाबेस (PDB) फ़ाइल डिबगिंग और परियोजना राज्य जानकारी है कि अपने कार्यक्रम के एक डीबग विन्यास के वृद्धिशील जोड़ने की अनुमति देता है रखती है। एक पीडीबी फ़ाइल बनाई जाती है जब आप /ZI या/Zi या Visual बेसिक/सी #/जेस्क्रिप्ट .NET प्रोग्राम /डीबग के साथ एक सी/सी ++ प्रोग्राम संकलित करते हैं।

तो यह "मुद्दा" यहाँ (एक बेहतर शब्द की कमी के लिए) की तरह लग रहा है कि अपने DLLs के कुछ (और इसलिए उत्सर्जक PDBs) डिबग मोड में निर्माण किया जा रहा है, और कुछ को रिलीज़ मोड में बनाई जा रही हैं (इसलिए पीडीबी उत्सर्जित नहीं)। यदि ऐसा है, तो इसे ठीक करना आसान होना चाहिए - प्रत्येक प्रोजेक्ट में जाएं और इसकी बिल्ड सेटिंग्स अपडेट करें। यह डिफ़ॉल्ट परिदृश्य होगा, अगर आपने कमांड लाइन विकल्पों का कोई tweaking नहीं किया है।

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

प्रतिक्रिया में

संपादित करने के लिए

हाँ, DLLs "पता" वे PDBs है, और उन्हें पथ, लेकिन यह बहुत ज्यादा मतलब नहीं है। किसी डीएलएल को किसी दिए गए निर्देशिका में कॉपी करना, जैसा कि अन्य ने उल्लेख किया है, इस मुद्दे को साफ़ नहीं करेगा। आपको पीडीबी की भी आवश्यकता है।

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

मैं कहूंगा कि आपके पास केवल एक ही जवाब है जो डीएलएल को उन केंद्रीय स्थानों पर प्राप्त करने के लिए अपनी प्रक्रिया को अपडेट करना है, और पीडीबी शामिल करना ... मुझे उस पर गलत सिद्ध होना अच्छा लगेगा, हालांकि !

+0

नहीं, यह इतना आसान नहीं है। सभी परियोजनाएं डीबग में बनाई गई हैं, और सभी में एक ही शिकायत विकल्प हैं। –

+0

मेरे पास कई पीडीबी फाइलें हैं जो मुझे python डाउनलोड पेज से डाउनलोड की गई हैं, जैसे विजुअल स्टूडियो ऐड या कुछ ऐसा है। इसे विजुअलस्टूडियो में आयात करने के लिए? –

+0

@ जॉन रूडी आप उन सभी सेटिंग्स की जांच करने के बाद, सुनिश्चित करें कि आप समाधान को साफ करें और पुनर्निर्माण करें ... – Nescio

2

सबसे पहले, कभी भी कुछ न मानें। समाधान को साफ करें, इसे डीबग मोड में पुनर्निर्माण करें, और यह देखने के लिए जांचें कि क्या सभी पीडीबी फाइलें बनाई गई हैं या नहीं।यदि नहीं, तो यह आपकी समस्या है।

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

एकमात्र अन्य चीज जो मैं सोच सकता हूं वह यह है कि आपकी समाधान फ़ाइल दूषित हो गई है। आप अपने .sln को xml फ़ाइल के रूप में खोल सकते हैं और सामग्री की जांच कर सकते हैं। उन परियोजनाओं के लिए कॉन्फ़िगरेशन की जांच करें जो अपेक्षित कार्य कर रहे हैं और उनसे तुलना करें जो नहीं हैं। यदि आप कुछ भी नहीं देखते हैं, तो आपको इसे परियोजना स्तर पर दोहराना होगा। काम करने की तुलना करें .csproj (या जो कुछ भी) परियोजना फाइलें और गैर-कामकाजी वाले। संपादित करने के लिए

जवाब में

संपादित करें:

तुम सिर्फ मैन्युअल रूप से चारों ओर सामान कॉपी कर रहे हैं, तो मैन्युअल रूप से PDBs कॉपी के रूप में अच्छी तरह से। डीएल को पीडीबीएस के बारे में कुछ भी नहीं पता होना चाहिए, मुझे विश्वास है। बस गंतव्य निर्देशिका में रहो और एक कप कॉफी जाओ। आराम करें।

+2

वास्तव में, (डीबग) डीएलएस जानते हैं कि उनके पीडीबी कहां हैं, पथ कहीं भी एन्कोड किया गया है। और हाँ, मैं इसे हाथ से कर सकता हूं (या मेरी स्वचालित प्रतिलिपि समायोजित कर सकता हूं), लेकिन मैं जानना चाहता हूं कि क्यों डरावनी चीज इस तरह व्यवहार करती है। और किसने कहा कि मैं आराम से नहीं हूं? मैं आराम से हूं! Dammit! Aaaargh! :) –

2

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

+0

मैंने वीएस को भी ऐसा किया है। एक ऐसी सेटिंग है जो परिभाषित कर सकती है कि एफवाईआई क्या साफ है। – TinyRacoon

3

जैसा कि अन्य पोस्टों ने कहा है, आपके पास एक कंपाइलर/भ्रष्टाचार समस्या हो सकती है।

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

यदि आपकी प्रोजेक्ट फ़ाइल \ SolutionDir \ ProjDir में है, तो पोस्ट-बिल्ड चरण की पहली पंक्ति आउटपुट फ़ाइलों को \ Solution \ Bin \ Release \ \ Solution \ Bin \ Debug पर कॉपी करेगी। दूसरी पंक्ति पीडीबी फ़ाइल की प्रतिलिपि बनाता है यदि यह एक डीबग बिल्ड है। मैं रिलीज बिल्ड के लिए पीडीबी फ़ाइल की प्रतिलिपि नहीं बनाता हूं।

तो, \ SolutionDir \ Bin में अब आपकी सभी आउटपुट फ़ाइलों को एक स्थान पर शामिल किया गया है।

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir) 
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir) 
+0

मेरे पास कई पीडीबी फाइलें हैं जिनमें से मुझे पायथन डाउनलोड पेज से डाउनलोड किया गया है जैसे विज़ुअल स्टूडियो ऐड या कुछ ऐसा है। इसे विजुअलस्टूडियो में आयात करने के लिए? –

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