2016-11-09 14 views
6

Tôi đang sử dụng công cụ FxCopCmd để phân tích mã tĩnh. Vì chúng tôi đã có một codebase khổng lồ, chúng tôi đã baselined các vấn đề hiện tại bằng cách sử dụng công cụ baseline.exe đi kèm với FxCop.FxCop: Thông báo triệt tiêu cho phương thức không đồng bộ

Tôi đang quan sát rằng nếu tôi thêm một phương thức mới vào lớp C# của tôi, thì một số thông báo triệt tiêu trong tệp GlobalSuppression.cs ngừng hoạt động và tôi gặp vấn đề với mã mà tôi chưa chạm vào.

Ví dụ:

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public async Task<string> method1() 
     { 
      string a = ""; 
      a.Equals("abc", StringComparison.InvariantCultureIgnoreCase); 
      return a; 
     } 

     static void Main(string[] args) 
     { 

     }   
    } 
} 

này ném lỗi sau:

CA1031 : Microsoft.Design : Modify 'Program.d__0.MoveNext()' to catch a more specific exception than 'Exception' or rethrow the exception

Để ngăn chặn vấn đề này 'CA1309 UseOrdinalStringComparison', tôi đã thêm sau nhắn ức chế trong GlobalSuppression.cs nộp

[module: SuppressMessage("Microsoft.Globalization", "CA1309:UseOrdinalStringComparison", Scope="member", Target="ConsoleApplication1.Program.d__0.MoveNext()", MessageId="System.String.Equals(System.String,System.StringComparison)", Justification="")]

Nhưng nếu tôi thêm một phương thức nữa vào lớp, thì phần này trên tin nhắn ngừng hoạt động. Điều này là bởi vì method1 là không đồng bộ và do đó, một lớp mới được tạo ra (refer this) trong mã được biên dịch (là <method1>d__0 trong trường hợp đầu tiên). Nhưng khi tôi thêm một phương thức khác trước phương thức1, thì lớp mới được tạo trong mã được biên dịch có tên là <method1>d__1. Do đó, thông điệp triệt tiêu không được áp dụng và FxCop lại bắt đầu hiển thị lỗi trong mã.

Có cách nào để chặn lỗi FxCop cho các phương pháp không đồng bộ vĩnh viễn không?

+0

Tôi chưa bao giờ thấy hành vi này ngay cả trong các dự án có vấn đề 15k + FxCop sử dụng phân tích Visual Studio. Bạn đã thử với điều đó chưa? –

+0

Bạn có chắc chắn dự án liên quan đến các phương pháp không đồng bộ không? Hành vi này là do biên dịch mã của các phương thức không đồng bộ. –

+0

Vâng, nó có hàng trăm phương pháp không đồng bộ. EDIT: Tôi đã chỉ chạy FxCop một lần nữa, hành vi đó không thể tái sản xuất trên Visual Studio phân tích –

Trả lời

2

Vì vậy, ngay cả sau khi đặt tiền thưởng, câu hỏi vẫn chưa được trả lời. Tuy nhiên, tôi tìm thấy cách giải quyết (nếu không phải là giải pháp).

Vấn đề được đề cập là do mã tạo trình biên dịch cho các phương thức không đồng bộ. Kể từ khi FxCopCmd chạy trên dll, như mã trình biên dịch tạo ra được thay đổi, các thông điệp đàn áp hiện có trở nên vô ích. Tuy nhiên, Visual Studio không chạy phân tích mã bằng cách chỉ sử dụng FxCopCmd. Nó chạy phân tích mã thông minh bỏ qua các phương thức async. (Theo điều tra của tôi, nó không chạy bất kỳ loại phân tích mã nào trên các phương thức không đồng bộ. Nó phải do vấn đề được đề cập.)

Để có được hành vi tương tự như Visual Studio trong CI, chúng ta có thể sử dụng fxcoptask.dll để chạy phân tích FxCop trên mã. Tham khảo this answer để biết cách tích hợp FxCop trong bản dựng. Điều này sẽ giải quyết các vấn đề được đề cập trong bài toán. Ngoài ra, nó cung cấp rất nhiều tùy chọn tùy chỉnh.

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