Nhận danh sách mã tham chiếu bằng không trong Visual Studio


133

Trong studio trực quan 2013, số lượng tham chiếu của một Mã đặc biệt (phương thức, thuộc tính, trường, ...) được hiển thị bằng Code Lens . Tôi muốn nhận được các mã không sử dụng (không tham chiếu) trong phòng thu trực quan. Có cách nào để có được chúng?

Ý tôi là dưới đây tham khảo:

nhập mô tả hình ảnh ở đây


7
Tôi nghĩ rằng anh ta muốn một danh sách tất cả các phương thức không được tham chiếu, hơn là đưa số lượng tham chiếu của phương thức cụ thể đó về không.
Jurgen Camilleri

1
Nếu bạn làm muốn tìm tài liệu tham khảo không sử dụng, bạn sẽ tìm thấy rất nhiều câu hỏi trùng lặp. Chỉ cần google cho "c # tìm mã không sử dụng"
Panagiotis Kanavos

1
có, tôi muốn tìm tất cả các mã không sử dụng có chứa Phương thức, Thuộc tính, v.v.
Nima Rostami

1
Hãy nhớ rằng bạn không thể chắc chắn rằng a publickhông được sử dụng mà không tìm kiếm toàn bộ cơ sở mã. Tuy nhiên, đối với nội bộ và tư nhân không sử dụng, Phân tích mã sẽ cảnh báo bạn nếu bạn bật cảnh báo phù hợp.
Matthew Watson

2
Nhiều năm sau, ảnh chụp màn hình tiếp tục bị đánh lừa.
Sinjai

Câu trả lời:


184

Có lẽ cách tốt nhất và dễ nhất để đạt được những gì bạn đang có là sử dụng công cụ phân tích mã tích hợp với Visual Studio để tìm và đưa bạn trực tiếp đến mã chết và các thành viên không sử dụng.

Để đạt được hiệu quả này, tôi đã tạo một tệp quy tắc phân tích mã mới (Qua tệp-> Mới-> Tệp , đảm bảo Chung trong khung bên trái đã được chọn và cuộn xuống để tìm Bộ quy tắc phân tích mã , đặt tên tệp, sau đó tìm kiếm và chọn các quy tắc dưới đây). Xem bên dưới để biết nội dung của tệp quy tắc mà bạn có thể sao chép và dán vào một tệp mới có phần mở rộng .ruleset để sử dụng.

Đưa ra một tệp quy tắc, người ta có thể nhấp chuột phải vào tệp dự án trong bảng Solution Explorer và chọn Thuộc tính . Trong các cửa sổ thuộc tính dự án, bấm vào tab Phân tích mã trong bảng điều khiển bên trái, sau đó bấm Mở để duyệt đến vị trí của tệp .ruleset. Nếu bạn đi đến các thuộc tính của tệp giải pháp (trái ngược với tệp dự án), bạn có thể đặt tệp phân tích mã cho từng dự án trong giải pháp ở một nơi (trong Cài đặt phân tích mã và sử dụng trình đơn thả xuống ở đó để chọn tệp quy tắc. LƯU Ý: Tuy nhiên, trước đây bạn phải duyệt tệp quy tắc để hiển thị trong trình đơn thả xuống trong cửa sổ thuộc tính này, tuy nhiên).

Sau đó, bạn chỉ cần chạy phân tích mã trên các dự án / giải pháp (Via Analyze-> Run Mã Phân tích On Giải pháp -HOẶC- Alt + F11 ) và nó sẽ trở lại như cảnh báo, bất kỳ phương pháp unreferenced hoặc thành viên không sử dụng nó tìm thấy. Nó thậm chí sẽ tìm thấy các phương thức được tham chiếu bởi một phương thức, bản thân nó không có tham chiếu nào ở nơi khác.

Tuy nhiên, hãy cẩn thận, vì một trong những cách phân tích mã cho mã chết có thể khiến bạn sai, là nếu tham chiếu bị 'ẩn' bằng cách chỉ gọi phương thức qua các đại biểu, và dĩ nhiên, phản ánh.

Các quy tắc để phát hiện mã chết, cụ thể, là:

  • Các phương thức riêng tư không được gọi từ bất kỳ mã nào khác (CA1811)
  • Biến cục bộ không sử dụng (CA1804)
  • Các trường riêng chưa sử dụng (CA1823)
  • Các tham số không sử dụng (CA1801)
  • Các lớp bên trong không được khởi tạo từ bất kỳ mã nào khác (CA1812).
  • Mã chết trong công tắc giới hạn bit-OR (C6259)

Dưới đây là nội dung của tệp .ruleset có thể có bằng cách làm theo các bước ở trên, để bạn biết được. Bạn có thể chỉ cần sao chép XML bên dưới, dán nó vào notepad ++, lưu ở đâu đó với phần mở rộng .ruleset , duyệt và sử dụng như được giải thích ở trên:

<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="Dead Code Rules" Description=" " ToolsVersion="12.0">
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1801" Action="Warning" />
    <Rule Id="CA1804" Action="Warning" />
    <Rule Id="CA1811" Action="Warning" />
    <Rule Id="CA1812" Action="Warning" />
    <Rule Id="CA1823" Action="Warning" />
  </Rules>
  <Rules AnalyzerId="Microsoft.Analyzers.NativeCodeAnalysis" RuleNamespace="Microsoft.Rules.Native">
    <Rule Id="C6259" Action="Warning" />
  </Rules>
</RuleSet>

30
Tôi không nghĩ rằng điều này hoàn toàn trả lời câu hỏi. Sự khác biệt chính là CodeLens sẽ cho bạn biết rằng một phương thức PUBLIC không có tham chiếu nào trong toàn bộ giải pháp. Đây là chìa khóa. FxCop, R # và phương pháp của bạn tuyệt vời cho mọi thứ không công khai.
Scott Wylie

1
@ScottWylie - Tôi không đồng ý. Tôi vừa thử giải pháp trên và nó không gắn cờ các phương thức công khai không được tham chiếu. CodeLens là đặc biệt trong việc gắn cờ mã chết, nội dung không được ước tính và các biến không được sử dụng. Tôi nghĩ rằng điều này nhận được hầu hết mọi người chính xác những gì họ muốn w / o bằng cách sử dụng công cụ của bên thứ 3.
mike

7
@mike Hãy xem xét điều này: Nếu bạn muốn tìm mã chết với một hoạt động hàng loạt, bạn có xu hướng không quan tâm đến các thành viên riêng tư / được bảo vệ, bởi vì đây là những vấn đề cục bộ. Ví dụ: tôi đang di chuyển dự án 500k + LoC với hơn 100 dự án và hơn 10 giải pháp cho kiến ​​trúc mẫu kho lưu trữ. Sau khi di chuyển một thành phần, tôi cần biết những giao diện cũ nào tôi có thể xóa. Một số IDE như Eclipse có các công cụ cho chính xác điều đó. Các phương thức cục bộ bị loại bỏ đơn giản không phải là mối quan tâm của tôi, tôi muốn một danh sách các lớp / giao diện CÔNG KHAI nơi ống kính mã sẽ cho tôi biết "0".
Oliver Schimmer

0

https://scottlilly.com/c-code-quality-improference/remove-unuse-groupes-properies-and-fifts/

"Thật không may, [trong Phân tích Visual Studio] bạn chỉ có thể phát hiện các thành viên tư nhân không sử dụng. Điều này là do trình phân tích mã giả định các thành viên công cộng có thể được sử dụng bởi các chương trình khác. Điều này có thể đúng nếu bạn xuất bản chúng dưới dạng API thông qua dịch vụ web hoặc phát hành mã của bạn dưới dạng thư viện. ... ReSharper có các chức năng phân tích mã tương tự - với lợi thế là kiểm tra các thành viên công cộng không sử dụng. "


0

Tôi sẽ đi qua từng tệp, thực hiện lệnh Ctrl-MO để thu gọn mọi thứ, sau đó cuộn xung quanh để tìm tham chiếu 0.


-1

Đây là một cách thủ công để thực hiện điều này mà tôi đã sử dụng để tìm các Lớp không sử dụng được đánh dấu công khai.

  1. Tìm kiếm và Thay thế tất cả "lớp công khai" bằng "lớp riêng" cho một dự án trong giải pháp của bạn. Cũng có thể cần phải thay thế "lớp tĩnh công khai" và / hoặc "lớp trừu tượng công cộng".
  2. Xây dựng để tìm tất cả các lỗi
  3. Đối với mỗi lỗi trong bản dựng, hãy sử dụng kiểm soát nguồn của bạn để khôi phục tệp cho lớp được tham chiếu.
  4. Lặp lại cho mọi lỗi cho đến khi quá trình xây dựng thành công.
  5. Bất kỳ tệp nào còn lại chưa được khôi phục đều có khả năng bị xóa.
  6. (tùy chọn) Đổi tên các lớp trong các tệp trên và thực hiện thêm một bản dựng để tìm lỗi.
  7. Thực hiện một Tìm kiếm cuối cùng cho tên của lớp bạn muốn xóa để xác nhận rằng không có bất kỳ trường hợp nào của nó được sử dụng trong chuỗi phản xạ hoặc chuỗi ma thuật.
  8. Loại bỏ các tệp lớp không sử dụng được xác định.
  9. Lặp lại cho mỗi dự án giải pháp bạn muốn làm sạch.

Lưu ý: Nếu bạn không tuân theo quy tắc một lớp cho mỗi tệp, điều này sẽ đòi hỏi nhiều công việc hơn. Ngoài ra, bất kỳ điểm cuối dịch vụ API nào bạn sẽ cần xác minh rằng nó không được sử dụng bởi bất kỳ dự án bên ngoài nào.


14
Điều này hoàn toàn không thực tế.
Don

1
Nó làm việc cho tôi trong một dự án lớn và là một giải pháp. Các trường hợp có thể khác nhau khi khó khăn hơn, nhưng tôi muốn cung cấp điều này như một khả năng.
Ulfius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.