2010-07-22 30 views
10

Tôi đang viết một ứng dụng trong đó tôi có một số mã số gỡ lỗi mà tôi không muốn xóa, nhưng tôi muốn nó được sửa đổi hoặc xóa khi biên soạn để phát hành/xuất bản. Ví dụ, tôi muốn một cái gì đó như thế này trong một debug xây dựng:Tách mã gỡ lỗi và phát hành trong C#

... để trở thành này trong một thông cáo xây dựng:

MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 

Lý tưởng nhất, tôi đã hy vọng để làm một cái gì đó như thế này:

#if DEBUG_BUILD 
    MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
#else 
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
#endif 

tôi muốn để không phải thêm/xóa một Conditional Compilation Symbol trong các thuộc tính dự án mỗi khi tôi thay đổi kiểu xây dựng; nó sẽ xảy ra tự động. Có cách nào để làm điều này trong Microsoft Visual C# 2008 Express Edition? Cảm ơn.

Trả lời

13

Sử dụng:

#if DEBUG 
    // Debug work here 
#else 
    // Release work here 
#endif 

Nếu bạn làm điều đó, chỉ cần đảm bảo để bật "Define DEBUG liên tục" chuyển đổi trong các trang bất động sản (Xây dựng trang thuộc tính của dự án), và nó sẽ làm việc. Điều này được đặt thành true theo mặc định cho các dự án C# mới. DEBUG sẽ được định nghĩa cho bạn (theo mặc định) bởi trình biên dịch C#.

0

Bạn có thể viết một phương pháp khuyến nông có chứa các điều kiện do đó bạn không cần phải tiếp tục sao chép nó mỗi khi

public static class ExceptionExtensions 
{ 
    public static String ToMyString(this Exception ex) 
    { 
#if DEBUG 
     return ex.ToString(); 
#else 
     return ex.Message; 
#endif 
    } 
} 

Đó sẽ là làm thế nào tôi muốn đi về nó

Và sau đó bạn dòng mã sẽ

MessageBox.Show(ex.ToMyString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 

Và DEBUG cần được xác định đã

+1

Ow. Điều này có vẻ như lạm dụng các phương pháp khuyến nông đối với tôi. –

+2

@Robert P, tại sao? – CaffGeek

1

Có một lớp học mà bạn có thể sử dụng để viết các câu lệnh debug của bạn namespace: System.Diagnostics Debug.Assert là những gì bạn muốn sử dụng

http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.assert.aspx

Ngoài ra nhìn vào lớp gỡ lỗi cho tất cả các sửa lỗi: http://msdn.microsoft.com/en-us/library/6x31ezs1.aspx

+0

Debug.Assert phải làm gì với câu hỏi? – CaffGeek

+0

để hiển thị tin nhắn, nhưng không phải là nếu anh ta đang đặt mã vào để gỡ lỗi thì Asserts có thể hữu ích hơn sau đó hiển thị một hộp thông báo. Tôi đang hiển thị các tùy chọn nâng cao hơn bạn có thể sử dụng – greektreat

0

Tôi không biết nếu các ấn bản thể hiện có điều này, nhưng Visual Studio có này đã được xây dựng trong cho bạn trong C#.

Trong thanh công cụ của bạn, bạn chắc chắn có thả xuống cho phép của bạn (theo mặc định) chọn giữa debug và phát hành xây dựng, gỡ lỗi xây dựng định nghĩa các biểu tượng DEBUG, do đó bạn có thể sử dụng:

#ifdef DEBUG 
    // debug code 
#endif 
13

Bạn cũng có thể sử dụng này thuộc tính.

[Conditional("DEBUG")] 

Điều này có một số lợi thế so với chỉ thị tiền xử lý trước.

Tất cả các cuộc gọi đến các phương thức được đánh dấu có điều kiện sẽ được thay thế bằng Nops nếu biểu tượng điều kiện không được xác định, giúp bạn phải sửa đổi tất cả các cuộc gọi đến nó.

Mã của bạn sẽ kiểm tra lỗi ngay cả khi biểu tượng không được xác định. (Không giống như khi sử dụng #if DEBUG, bỏ qua mã trong #else trong khi biên soạn)

+0

Đó là điều tuyệt vời. –

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