2010-03-04 30 views
11

Chỉnh sửa: Về cơ bản những gì tôi cần là cho studio trực quan để luôn luôn xây dựng lại tất cả khi tôi nhấn gỡ lỗi.Lực lượng phòng thu trực quan để luôn luôn 'xây dựng lại tất cả' khi gỡ lỗi


Tôi hiện đang sử dụng studio trực quan để biên dịch các chương trình lắp ráp, sử dụng MASM và nói chung nó hoạt động tốt.

Tuy nhiên tôi đã chạy vào một vấn đề gây phiền nhiễu:

Nếu tôi bao gồm một tập tin (ví dụ, một tập tin với các chức năng) như thế này

Include functions.inc 

và biên dịch nó, ban đầu nó hoạt động tốt. Tuy nhiên nếu tôi sau đó thay đổi nội dung của functions.inc, điều này không được nhận dạng và các trình biên dịch bỏ qua các hàm functions.inc và sử dụng phiên bản cũ từ trước khi tôi thay đổi nó.

Tôi không thể tìm thấy tùy chọn ở bất kỳ đâu trong thuộc tính dự án để khắc phục sự cố này. Tuy nhiên, tôi chắc chắn rằng nó có liên quan đến các tùy chọn liên kết hoặc thứ gì đó - nếu tôi thực hiện bất kỳ thay đổi nào trong thuộc tính dự án (ngay cả khi tôi thay đổi thứ gì đó và thay đổi lại, sau đó nhấn OK), nó sẽ biên dịch đúng với phiên bản mới của functions.inc.

Bất kỳ ý tưởng nào?

+4

Thử chỉnh sửa quy tắc xây dựng tùy chỉnh và thêm * .inc vào Phụ thuộc bổ sung. Dự phòng cuối cùng là Build + Rebuild. –

+0

Xây dựng lại là những gì tôi đang sử dụng ngay bây giờ. Loại khó chịu, nhưng tôi đã bản đồ ctrl + r với nó vì vậy nó khá nhanh chóng. Tôi sẽ thử ý tưởng phụ thuộc bổ sung và đăng lại cho dù nó có hoạt động hay không. – Cam

+0

Đồng thời xem câu trả lời này http://stackoverflow.com/questions/1334774/how-do-i-force-a-rebuild-when-the-project-configuration-changes – userSteve

Trả lời

8

Bạn có thể thay đổi hành vi thông qua EnvironmentEvents vĩ mô trong Explorer Macro Visual Studio của:

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 

Đây là một sự thay đổi VisualStudio vì vậy nó sẽ làm việc trên tất cả các giải pháp một lần thiết lập

CẬP NHẬT Trên đây giải pháp hoạt động, tuy nhiên nó có một số cạm bẫy liên quan đến các tập tin nội dung mà IDE sẽ thay đổi sang chế độ thiết kế ngay cả khi trình gỡ lỗi đang chạy. Nó sẽ cố gắng xây dựng trong khi trình gỡ lỗi đang chạy trong một số trường hợp. Các giải pháp thích hợp là thế này:

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 
+0

Haha, tôi không thể tin được điều này. Cuối cùng tôi đã có câu trả lời cho điều này sau _six months_! Cảm ơn rất nhiều :) – Cam

+3

heh tôi đến khi nó vì tôi đã tìm kiếm một giải pháp bản thân mình, tôi đã có cùng một vấn đề (trên một kịch bản khác nhau), và đã tức giận để xem msdn mvp của thúc đẩy ý tưởng xây dựng lại bằng tay mỗi và mọi lúc – Jaguar

+0

chỉ có thể cho một giải pháp cụ thể? – batmaci

1

Hỗ trợ mã ASM trong VS không hoàn toàn là tự động phép thuật như .NET/C++ và bạn phải trợ giúp một chút. Chúng tôi sử dụng một tệp MAKE để biên dịch mã ASM của chúng tôi trong VS. Tệp MAKE định nghĩa tất cả các phụ thuộc để các thay đổi trong tệp INC được biên dịch vào lần sau khi tệp ASM được biên dịch.

Một kịch bản xây dựng tương tự có thể được tạo bằng MSBuild nhưng chúng tôi chưa bao giờ dành thời gian để làm điều đó.

0

Nếu đó là vấn đề của VS IDE không thể tìm ra phụ thuộc (vì nó không thể phân tích cú pháp tệp .asm và định vị chỉ thị INCLUDE ở đó), một giải pháp bạo lực hoạt động rất tốt với MASM MASM là rất, rất nhanh: Tôi có một số dự án MASM rất lớn, vài chục mô-đun .asm và thậm chí nhiều hơn bao gồm: Dự án lớn nhất tái xây dựng chỉ trong vài giây (rất ít) .

Cảnh báo: Kludge bình phương phía trước. Xác định một prebuild mà không một cảm ứng cho tất cả các bạn file .asm sẽ tự động một lực lượng xây dựng lại ...

  1. Nhấp chuột phải vào bất động sản dự án của bạn (cột bên trái, giải pháp explorer),
  2. Đến cấu hình Thuộc tính/ build sự kiện/Pre-build tổ chức sự kiện
  3. trong "dòng lệnh", gõ "touch * .asm" (đảm bảo bạn có một tiện ích liên lạc trong đường dẫn)

Bây giờ mỗi khi bạn xây dựng, tất cả các tệp * .asm sẽ được chạm (tức là xuất hiện đã sửa đổi) và do đó được biên dịch lại. Và bạn sẽ không phải nhớ nữa rằng bạn phải xây dựng lại tất cả, vì điều này sẽ xảy ra anyway. Tôi đã cảnh báo đó là một kludge, phải không? Ngoài ra, IDE sẽ cho bạn biết các tệp của bạn đã được sửa đổi bên ngoài trình chỉnh sửa và bạn có muốn tải lại chúng hay không. Bạn có thể nói có!

+0

Lưu trước không khắc phục được sự cố - cài đặt của tôi đã như vậy. Hiện tại tôi đang sử dụng xây dựng lại tất cả trước mỗi lần tôi chạy nó, nhưng tôi không muốn làm điều đó. – Cam

+0

Và bạn đã xem xét chạy một "touch * .asm" trong bước prebuild? Không tốt đẹp, nhưng bạn ít nhất sẽ không phải suy nghĩ về việc gọi trình tự khóa xây dựng lại bất thường ... – filofel

+0

Bạn có thể mở rộng điều đó không? – Cam

1

Một khả năng có thể là tạo một macro đơn giản thực hiện việc xây dựng lại tất cả và sau đó kích hoạt trình gỡ lỗi. Sau đó ánh xạ macro tới một khóa.Tôi nghĩ rằng các _DTE.ExecuteCommand có thể được sử dụng cho việc này. Và nếu bạn muốn kiểm soát nhiều hơn trình sửa lỗi, giao diện Debugger2 có khá nhiều chức năng được hiển thị.

4

Hãy chắc chắn rằng, bạn đã lựa chọn các dự án khởi động cho xây dựng trong Configuration Manager:

Build -> Configuration Manager -> đánh dấu vào cột 'xây dựng' cho tất cả các dự án có liên quan .

Các vấn đề liên quan