2009-12-29 27 views
6

Đối với một số lý do, dòng sau không có gì trong dự án ASP.NET MVC của tôi:Debug.Assert() đã ngừng làm việc trong dự án của tôi

System.Diagnostics.Debug.Assert(false); 

Tôi có ba kiểm tra kỹ rằng tôi đang sử dụng cấu hình gỡ lỗi và "Xác định hằng số Gỡ lỗi" được chọn trong cài đặt cấu hình Gỡ lỗi.

Vấn đề tương tự cũng xảy ra trong dự án thử nghiệm đơn vị của tôi.

Thực hiện phương pháp xác nhận của riêng tôi có vẻ tầm thường, nhưng hơi khó xử. Bất kỳ gợi ý nào về cách sửa lỗi này sẽ được đánh giá cao.

Chỉnh sửa: Tôi đang sử dụng một số mô-đun của bên thứ ba trong dự án của mình. Điều này có lẽ là do tham chiếu đến một mô-đun được biên dịch trong chế độ phát hành không?

+0

Bạn đã kiểm tra kỹ xem bạn có đang chạy phiên bản phát hành không? – ChrisF

+1

Làm thế nào về mở dll của bạn/exe với Reflector và xem liệu khẳng định là thực sự trong mã? Và lắp ráp của bạn có thực sự được nạp từ vị trí bạn nghĩ không? Có thể kiểm tra thời gian khác mà bạn đang sử dụng phiên bản gỡ lỗi. –

+0

@ Chris: Như tôi đã nói, vâng. Ba lần ... :-) –

Trả lời

0

Vì bạn đang chạy qua ASP.NET MVC, có thể có một debug = false trong web.config của bạn đang gây ra sự cố?

+0

Thật không may là không. Tôi vừa kiểm tra web.config của tôi và gỡ lỗi từ chỉ trong dòng này:

+0

Đồng thời tìm kiếm xem có phần" system.diagnostics "trong tệp cấu hình hay không. Bạn có thể tắt các xác nhận trong tệp cấu hình của mình. –

+0

@Eric: Cảm ơn bạn đã gợi ý, nhưng từ "chẩn đoán" không được đề cập trong web.config của tôi. –

6

Xác nhận ASP.Net được hiển thị trong Bảng điều khiển VS trong khi trang web của bạn được hiển thị qua VisualStudio. Nó không làm gián đoạn luồng để hiển thị một MsgBox hoặc phá vỡ dòng xác nhận như một ngôn ngữ lập trình.

1

Câu hỏi cổ đại nhưng nếu bạn không có người nghe mặc định được xác định, nó sẽ không hiển thị hộp thoại tin nhắn như bình thường. Tôi đã không xác nhận cho dù nó thực sự cháy và chỉ được ăn (tôi nghi ngờ đây là trường hợp) hoặc cho dù nó chỉ không cháy ở tất cả.

Nhưng dù theo cách nào, nó sẽ không hiển thị hộp thoại.

Từ các tài liệu cho DefaultTraceListener

Màn hình hiển thị của hộp tin nhắn cho Khẳng định và Fail phương pháp gọi phụ thuộc vào sự hiện diện của DefaultTraceListener. Nếu DefaultTraceListener không có trong bộ sưu tập Người nghe, hộp thư không được hiển thị.

Các DefaultTraceListener có thể được gỡ bỏ bởi các yếu tố , bởi yếu tố, hoặc bằng cách gọi phương thức rõ ràng trên Listeners tài sản (System.Diagnostics.Trace.Listeners.Clear()).

Bạn có thể kiểm tra thính giả của bạn và nhận được các loại bằng cách sử dụng một số mã như dưới đây:

var listeners = new TraceListener[Debug.Listeners.Count]; 
Debug.Listeners.CopyTo(listeners, 0); 
foreach (var listener in listeners) { 
    Debug.WriteLine("Name : {0} of type : {1}", listener.Name, listener.GetType()); 
} 

Nếu bạn không có một gọi là "Default", Debug.Assert âm thầm sẽ thất bại.

Theo như cấu hình đi, điều này sẽ làm việc giả định một người biết lắng nghe tên mặc định có sẵn:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
     </listeners> 
    </trace> 
</system.diagnostics> 

này SẼ làm việc giả định một người biết lắng nghe tên mặc định có sẵn:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

này sẽ làm việc như chúng tôi khám phá xác định Mặc định của chúng tôi:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <remove name="Default" /> 
      <add name="Default" type="System.Diagnostics.DefaultTraceListener" /> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

Công việc WONT này:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <remove name="Default" /> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

Nếu bạn không có phần chẩn đoán trong web.config của bạn thì có thể xóa hoặc xóa phần mặc định bởi một số tiện ích mở rộng VS vv, vì vậy việc thêm phần này sẽ mang lại hành vi mong đợi.

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