2010-06-11 30 views
15

Chúng ta đều biết rằng Debug.Assert sẽ không được biên dịch thành các dll khi được biên dịch trong chế độ phát hành. Nhưng vì một lý do nào đó, Debug.Assertđã làm xuất hiện trong phiên bản phát hành của một thành phần mà tôi đã viết. Tôi nghi ngờ rằng tôi có thể làm hỏng thiết lập csproject của tôi.Debug.Assert Xuất hiện trong Chế độ Phát hành

Bất kỳ ý tưởng nào tại sao Debug.Assert xuất hiện ở chế độ phát hành?

P/S: Tôi đã kiểm tra kỹ để đảm bảo rằng tôi đã thực sự biên dịch ở chế độ phát hành trước khi đặt câu hỏi này.

Lưu ý 2: Tôi đã kiểm tra kỹ CSproject của mình và thấy rằng trong cấu hình Release, Xác định hằng số DEBUG không được đánh dấu, cho biết phần này là cài đặt của tôi.

Trả lời

13

Tôi đã tìm ra câu trả lời; đó là bởi vì có một bộ tiền xử lý #define DEBUG được xác định khi bắt đầu tệp cs bên trong dự án. Loại bỏ nó giải quyết được vấn đề

+5

Điều đó sẽ làm hỏng ngày của bạn;) –

1

Bạn có sử dụng bất kỳ loại quy trình xây dựng nào, chẳng hạn như Nant hoặc MSBuild hoặc thậm chí là một dự án triển khai web không?

Ngoài ra, hãy đảm bảo rằng ở chế độ phát hành, hãy chuyển đến thuộc tính dự án của bạn và chọn 'Xác định hằng số DEBUG' không được chọn.

26

Kiểm tra DefineConstants sở hữu trong tập tin dự án của bạn, nó phải là:

  • <DefineConstants>DEBUG;TRACE</DefineConstants> cho gỡ lỗi cấu hình
  • <DefineConstants>TRACE</DefineConstants> cho phát hành cấu hình

Kiểm tra xem bạn có không bất kỳ #define DEBUG nào trong mã của bạn.

+0

Tôi đã kiểm tra kỹ; trong 'release' config, hằng số ** DEBUG ** không có ở đó. – Graviton

+0

+1 cho '#define DEBUG' có vẻ là nguyên nhân ... –

4

Bạn đã kiểm tra tệp dự án chưa? Xác định các hằng số KHÔNG được chứa DEBUG

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>bin\Release\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    </PropertyGroup> 
1

Ngoài điểm mà madgnome và rdkleine đã thực hiện, bạn cũng có thể kiểm tra xem khi giải pháp được đặt ở chế độ phát hành, dự án của bạn cũng được thiết lập để xây dựng trong bản phát hành chế độ. Có thể có một dự án xây dựng trong chế độ gỡ lỗi, khi phát hành được thiết lập ở cấp độ dự án.

Đối với điều này, nhấp chuột phải vào trình khám phá giải pháp VS trên giải pháp và chọn Trình quản lý cấu hình. Kiểm tra xem "Cấu hình giải pháp tích cực" của bản phát hành mà bạn dự án có phát hành không phải là gỡ lỗi, vì cấu hình của nó.

Nếu điều này vẫn không có ánh sáng thì bạn có thể thêm một đoạn mã được bao quanh bởi "# DE DEBUG" và xem liệu nó có được biên dịch không?

8

Hãy nhớ rằng "Chế độ phát hành" chỉ là cấu hình xây dựng có tên của "Bản phát hành". Điều đó không nhất thiết ngụ ý bất cứ điều gì về các thiết lập biên dịch đang được sử dụng: nó hoàn toàn có thể tạo ra một cấu hình gọi là "Release" mà thực sự biên dịch mọi thứ với các thiết lập gỡ lỗi. Hoặc, trên thực tế, không biên dịch gì cả!

Các câu trả lời khác gợi ý một số địa điểm cần tìm - nhưng về cơ bản, có vẻ như cài đặt dự án hoặc giải pháp của bạn đã được cấu hình lại "Bản phát hành" để bao gồm thông tin gỡ lỗi.

Về khả năng chưa được đề cập: trong VS, nếu bạn thả xuống hộp tổ hợp cấu hình xây dựng (nơi bạn thường chọn "Gỡ lỗi" hoặc "Phát hành") và chọn "Trình quản lý cấu hình", bạn có thể xem ý nghĩa của từng cấu hình xây dựng giải pháp cho mỗi dự án của bạn. Bạn sẽ lưu ý rằng bạn có thể, ví dụ, cấu hình một "Release" xây dựng trên các giải pháp để vẫn xây dựng một số thành phần trong chế độ Debug nếu bạn muốn.

+0

Bây giờ, tại sao tôi bị downvoted 2 năm sau? –

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