إجبار الاستوديو المرئي على "إعادة بناء الكل" عند تصحيح الأخطاء

StackOverflow https://stackoverflow.com/questions/2376810

سؤال

تحرير: ما أحتاجه في الأساس هو أن يعيد البناء دائمًا بناء كل شيء عندما أصبت بتصحيح الأخطاء.


أنا أستخدم Visual Studio حاليًا لتجميع برامج التجميع الخاصة بي ، باستخدام MASM وبشكل عام يعمل بشكل جيد.

ومع ذلك ، واجهت مشكلة مزعجة:

إذا قمت بتضمين ملف (على سبيل المثال ، ملف له وظائف) مثل هذا

Include functions.inc

وتجميعه ، فهو يعمل في الأصل بشكل جيد. ولكن إذا بعد ذلك يتغيرون محتويات الوظائف.

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

أيه أفكار؟

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

المحلول

يمكنك تغيير السلوك عبر EnvironmentEvents Macro in Visual Studio's Macro Explorer:

Private Enum IDEMode
    Design = 1
    Break = 2
    Run = 3
End Enum

Private _IDEMode As IDEMode = IDEMode.Design

Public Sub DTEDebuggerEvents_OnDebugRun() Handles _
DebuggerEvents.OnEnterRunMode
    If _IDEMode = IDEMode.Design Then
        DTE.ExecuteCommand("Build.RebuildSolution")
    End If
    _IDEMode = IDEMode.Run
End Sub

Public Sub DTEDebuggerEvents_OnDebugDesign() Handles _
    DebuggerEvents.OnEnterDesignMode
    _IDEMode = IDEMode.Design
End Sub

Public Sub DTEDebuggerEvents_OnDebugBreak() Handles _
    DebuggerEvents.OnEnterBreakMode
    _IDEMode = IDEMode.Break
End Sub

هذا تغيير VisualStudio بحيث سيعمل في جميع الحلول بمجرد تعيينه

تحديثيعمل الحل أعلاه ، ومع ذلك ، يحتوي على بعض المزالق المتعلقة بملفات المحتوى حيث ستتغير IDE إلى وضع التصميم حتى لو كان مصحح الأخطاء يعمل. هو - هي إرادة حاول البناء أثناء تشغيل الأخطاء في بعض الحالات. الحل الصحيح هو:

Private _curDebugState As EnvDTE80.dbgProcessState

Public Sub debuggerStateChangedHandler
    (ByVal NewProcess As EnvDTE.Process, 
    ByVal processState As EnvDTE80.dbgProcessState) 
    Handles DebuggerProcessEvents.OnProcessStateChanged
    If _curDebugState = dbgProcessState.dbgProcessStateStop And processState = dbgProcessState.dbgProcessStateRun Then
        DTE.ExecuteCommand("Build.RebuildSolution")
    End If
    _curDebugState = processState
End Sub

نصائح أخرى

تأكد من أنك حددت مشروع بدء التشغيل للبناء في مدير التكوين:

Build -> مدير التكوين -> تحقق من عمود "البناء" لجميع المشاريع ذات الصلة.

دعم رمز ASM في VS ليس تمامًا مثل .NET/C ++ وعليك مساعدته قليلاً. نحن نستخدم ملف Make لتجميع رمز ASM في VS. يحدد ملف Make جميع التبعيات بحيث يتم تجميع التغييرات في ملفات INC في المرة التالية التي يتم فيها تجميع ملف ASM.

يمكن إنشاء برنامج نصي مماثل ببناء باستخدام MSBuild لكننا لم نأخذ وقتًا للقيام بذلك.

قد يكون أحد الاحتمالات هو إنشاء ماكرو يقوم ببساطة بإعادة بناء الكل ثم يطلق النار على تصحيح الأخطاء. ثم قم بتخطيط الماكرو إلى مفتاح. أنا فكر في ال _dte.executecommand يمكن أن تستخدم لهذا. وإذا كنت تريد المزيد من السيطرة على الأخطاء ، Debugger2 الواجهة لديها الكثير من الوظائف المكشوفة.

إذا كانت مسألة عدم قدرة VS IDE على اكتشاف التبعيات (لأنها غير قادرة على تحليل ملف .asm وتحديد موقع التوجيهات هناك) ، فإن حل قوة وحشية يعمل بشكل جيد للغاية مع MASM هو إعادة بناء المشروع أو حتى الحل: Masm سريع جدًا: لدي بعض مشاريع MASM الكبيرة جدًا ، وعشرات من وحدات .ass وأكثر من ذلك يشمل: أكبر من هذا المشروع يعيد بناء هذه البناء في غضون ثوانٍ قليلة للغاية.

تحذير: Kludge مربع إلى الأمام. تحديد prebuild الذي يقوم بلمسة لجميعكم. من شأن ملفات التماثيل إجبار إعادة البناء تلقائيًا ...

  1. انقر بزر الماوس الأيمن على خصائص مشروعك (العمود الأيسر ، مستكشف الحلول) ،
  2. انتقل إلى خصائص التكوين / أحداث الإنشاء / حدث ما قبل المبنى
  3. في "سطر الأوامر" ، اكتب "Touch *.asm" (تأكد من أن لديك أداة لمسة في المسار)

الآن في كل مرة تقوم فيها ببناء ، سيتم لمس جميع ملفات *. ولن تضطر إلى أن تتذكر بعد الآن أنه يتعين عليك إعادة بناء كل شيء ، لأن هذا سيحدث على أي حال. لقد حذرت من أنه كان كلا ، أليس كذلك؟ بالإضافة إلى ذلك ، ستخبرك IDE بأن ملفاتك تم تعديلها خارج المحرر وهل تريد إعادة تحميلها. يمكنك أن تقول نعم!

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