إجبار الاستوديو المرئي على "إعادة بناء الكل" عند تصحيح الأخطاء
-
24-09-2019 - |
سؤال
تحرير: ما أحتاجه في الأساس هو أن يعيد البناء دائمًا بناء كل شيء عندما أصبت بتصحيح الأخطاء.
أنا أستخدم 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 الذي يقوم بلمسة لجميعكم. من شأن ملفات التماثيل إجبار إعادة البناء تلقائيًا ...
- انقر بزر الماوس الأيمن على خصائص مشروعك (العمود الأيسر ، مستكشف الحلول) ،
- انتقل إلى خصائص التكوين / أحداث الإنشاء / حدث ما قبل المبنى
- في "سطر الأوامر" ، اكتب "Touch *.asm" (تأكد من أن لديك أداة لمسة في المسار)
الآن في كل مرة تقوم فيها ببناء ، سيتم لمس جميع ملفات *. ولن تضطر إلى أن تتذكر بعد الآن أنه يتعين عليك إعادة بناء كل شيء ، لأن هذا سيحدث على أي حال. لقد حذرت من أنه كان كلا ، أليس كذلك؟ بالإضافة إلى ذلك ، ستخبرك IDE بأن ملفاتك تم تعديلها خارج المحرر وهل تريد إعادة تحميلها. يمكنك أن تقول نعم!