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?
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? –
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ộ. –
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 –