سؤال

لدي مقابل (2008) حل تتكون من عدة مشاريع في نفس مساحة الاسم.عندما كنت بناء حل جميع ملفات dll المستخدمة من قبل أعلى مستوى المشروع TopProject يتم نسخ إلى TopProject\bin\debug المجلد.ومع ذلك ، فإن المقابلة .ملفات pdb هي فقط نسخ بعض المشاريع الأخرى.هذا هو الألم ، على سبيل المثال عند استخدام NDepend.

كيف VS تقرر فيها .ملفات pdb إلى نسخ إلى أعلى مستوى bin\debug المجلدات ؟ كيف يمكنني الحصول على مقابل نسخ الآخرين أيضا ؟


تحرير:

المراجع هي كما يلي:جميع ملفات dll يتم نسخها إلى موقع مركزي ، دون pdbs. TopProject فقط وقد الإشارات إلى هذه نسخ dll;dlls أنفسهم ، ومع ذلك ، من الواضح أن أعرف أين pdbs و (معظمهم) يتم نسخها إلى مجلد التصحيح بشكل صحيح.

هل كانت مفيدة؟

المحلول

من MSDN:

برنامج قاعدة البيانات (PDB) يحمل الملف التصحيح و مشروع الدولة المعلومات التي تسمح تدريجي ربط تكوين تصحيح من البرنامج الخاص بك.وهو يتم إنشاء ملف PDB عند التحويل البرمجي C/C++ برنامج مع /زي /أو زي أو البصرية الأساسية/C#/JScript .صافي برنامج مع /debug.

بحيث يبدو مثل "القضية" هنا (لعدم وجود كلمة أفضل) هو أن بعض DLLs الخاصة بك يجري بناؤها في وضع التصحيح (وبالتالي انبعاث PDBs) ، وبعضها يجري بناؤها في وضع الإصدار (وبالتالي لا ينبعث منها PDBs).إذا كان هذا هو الحال ، ينبغي أن يكون من السهل إصلاح -- الذهاب إلى كل مشروع استكمال بناء إعدادات.سيكون هذا السيناريو الافتراضي ، إذا لم تكن قد فعلت أي التغيير والتبديل من خيارات سطر الأوامر.

ومع ذلك ، فإنه سوف تصبح أكثر تعقيدا إذا كان هذا ليس هو الحال.ربما أنت في الإفراج أو وضع التصحيح.الآن أنت بحاجة الى ان ننظر في سطر الأوامر خيارات الترجمة (المحدد في خصائص المشروع) لكل مشروع.تحديث لهم /التصحيح وفقا لذلك إذا كنت تريد المصحح أو إزالته إذا كنت لا.

تحرير ردا على تحرير

نعم ، DLLs "تعرف" أن لديهم PDBs ، مسارات لهم, ولكن هذا لا يعني الكثير.نسخ فقط DLLs إلى دليل معين ، كما ذكر آخرون ، لن واضحة في هذه المسألة.كنت في حاجة إلى PDBs كذلك.

نسخ الملفات الفردية في ويندوز ، باستثناء بعض "حزمة"من نوع الملفات (لا مايكروسوفت المصطلح هذا ، ولكن "HTML كاملة حزم" هي مفهوم) لا نسخ الملفات ذات الصلة.Dll ليست تجميعها في "حزمة" الطريق ، حتى نسخها يترك PDB خلف.

أنا أقول الحل الوحيد عليك هو تحديث عملية الحصول على DLLs إلى تلك المواقع المركزية ، وتشمل PDBs ...أحب أن أثبت الخطأ في ذلك ، على الرغم من!

نصائح أخرى

وغيرها من الوظائف وقال: قد يكون مترجم/قضية الفساد.

ولكن كما قلت إذا كانت ملفات pdb يتم إنشاؤها ، ولكن لا تظهر حيث تريد لهم ، إنشاء وظيفة-بناء الخطوة.هنا هو آخر خطوة بناء يمكنني تحديد كل مشروع في الحل.فإنه يتأكد أن جميع الإخراج يتم نسخ الملفات إلى مشترك dir.

إذا كان الخاص بك proj في \SolutionDir\ProjDir ، ثم السطر الأول بعد بناء الخطوة سيتم نسخ ملفات الإخراج إلى \الحل\Bin elease أو \الحل\Bin\Debug.السطر الثاني نسخ الملف pdb إذا كان هذا هو التصحيح بناء.لا نسخ ملف pdb للإفراج يبني.

لذا \SolutionDir\Bin الآن يحتوي على جميع ملفات الإخراج الخاص بك في مكان واحد.

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

أولا, لا تفترض أي شيء.تنظيف الحل إعادة بنائه في وضع التصحيح ، وتحقق لمعرفة ما إذا كان جميع ملفات pdb يتم إنشاؤها.إذا لم يكن هناك مشكلة.

إذا كان يتم إنشاؤها ، وليس كلهم الحصول على نسخها ، يمكنك الحصول على حول هذا من خلال خلق وظيفة بناء حالة يدويا نسخ ملفات pdb إلى الأماكن المطلوبة.هذا هو الحل بالطبع.

الشيء الوحيد الذي يمكنني أن أفكر في أن حل الملف أصبح الفاسدة.يمكنك فتح الخاص بك .sln كملف xml و فحص محتويات.تحقق من تكوين المشاريع التي تعمل كما هو متوقع ومقارنتها مع تلك التي ليست كذلك.إذا كنت لا ترى أي شيء لديك لتكرار هذا على مستوى المشروع.قارن العامل .csproj (أو أيا كان) ملفات المشروع و غير العاملين منها.


تحرير ردا على تحرير:

إذا كنت مجرد نسخ يدويا الأمور, ثم نسخ pdbs كذلك.Dll لا تعرف أي شيء عن pdbs ، على ما أعتقد.ألصقهم في الدليل الوجهة وتذهب الحصول على كوب من القهوة.الاسترخاء.

تحقق عند تنظيف الحل, هذا هو في الواقع تنظيفها.رأيت مقابل ترك الملفات التسكع في bin\debug الدلائل حتى بعد التنظيف.حذف bin\debug الدليل على جميع المشاريع الخاصة بك وإعادة البناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top