Xóa các tham chiếu không sử dụng (! = “Using”)


100

Làm cách nào để tìm và xóa các tham chiếu không sử dụng trong các dự án của tôi?

Tôi biết bạn có thể dễ dàng loại bỏ các câu lệnh using trong so với năm 2008, nhưng điều này không loại bỏ tham chiếu thực tế trong các dự án của bạn. Dll được tham chiếu sẽ vẫn được sao chép trong gói bin / thiết lập của bạn.


cảm ơn. Đáng buồn thay, không có câu trả lời tôi đang tìm kiếm ...
Boris Callens

Câu trả lời:


55

* Lưu ý: xem http://www.jetbrains.net/devnet/message/5244658 để biết phiên bản khác của câu trả lời này.

Đọc qua các bài viết, có vẻ như có một số nhầm lẫn với câu hỏi ban đầu. Hãy để tôi đâm một nhát vào nó.

Bài đăng ban đầu thực sự đặt câu hỏi: "Làm cách nào để xác định và xóa các tham chiếu từ một dự án Visual Studio tới các dự án / tổ hợp khác không được sử dụng?" Người đăng muốn các hội đồng không còn xuất hiện như một phần của đầu ra bản dựng.

Trong trường hợp này, ReSharper có thể giúp bạn xác định chúng, nhưng bạn phải tự gỡ bỏ chúng.

Để thực hiện việc này, hãy mở Trình duyệt tham chiếu trong Giải pháp, nhấp chuột phải vào từng cụm được tham chiếu và chọn "Tìm mã phụ thuộc". Xem:

http://www.jetbrains.com/resharper/features/navigation_search.html#Find_ReferencedDependent_Code

Bạn sẽ nhận được:

  1. Danh sách các phần phụ thuộc vào Tham chiếu đó trong cửa sổ trình duyệt hoặc

  2. Một hộp thoại cho bạn biết "Không tìm thấy mã phụ thuộc vào mô-đun XXXXXXX.".

Nếu bạn nhận được kết quả thứ hai, bạn có thể nhấp chuột phải vào Tài liệu tham khảo, chọn Xóa và xóa nó khỏi dự án của bạn.

Trong khi bạn phải làm điều này "thủ công", tức là một tham chiếu tại một thời điểm, nó sẽ hoàn thành công việc. Nếu có ai đó đã tự động điều này theo một cách nào đó, tôi muốn nghe cách nó được thực hiện.

Bạn có thể bỏ qua khá nhiều những cái trong .Net Framework vì chúng thường không được sao chép vào đầu ra bản dựng của bạn (thông thường - mặc dù không nhất thiết phải đúng với các ứng dụng Silverlight).

Một số bài đăng dường như đang trả lời câu hỏi: "Làm cách nào để xóa bằng cách sử dụng mệnh đề (C #) khỏi tệp mã nguồn không cần thiết để giải quyết bất kỳ tham chiếu nào trong tệp đó".

Trong trường hợp này, ReSharper thực hiện trợ giúp theo một số cách:

  1. Xác định các mệnh đề không sử dụng bằng cách sử dụng cho bạn trong quá trình phát hiện lỗi đang bay. Chúng xuất hiện dưới dạng Cảnh báo kiểm tra mã - mã sẽ xuất hiện màu xám (là mặc định) trong tệp và ReSharper sẽ cung cấp Gợi ý để xóa nó:

    http://www.jetbrains.com/resharper/features/code_analysis.html#On-the-fly_Error_Detection

  2. Cho phép bạn tự động xóa chúng như một phần của Quy trình làm sạch mã:

    http://www.jetbrains.com/resharper/features/code_formatting.html#Optimizing_Namespace_Import_Directives

Cuối cùng, hãy nhận ra rằng ReSharper thực hiện phân tích mã tĩnh trên giải pháp của bạn. Vì vậy, nếu bạn có một tham chiếu động đến hợp ngữ - chẳng hạn như thông qua phản chiếu hoặc một hợp ngữ được tải động trong thời gian chạy và được truy cập thông qua một giao diện - nó sẽ không nhận nó. Không có gì thay thế cho việc hiểu cơ sở mã của bạn và các phụ thuộc của dự án khi bạn làm việc trong dự án của mình. Tôi thấy các tính năng của ReSharper rất hữu ích.


Câu trả lời rộng rãi tốt đẹp. Điều kỳ lạ là mặc dù bạn biết tôi không đề cập đến các câu lệnh sử dụng (rằng dọn dẹp là tiêu chuẩn trong VS, đừng hiểu tại sao R # lại phát minh ra điều đó) bạn trả lời câu hỏi đó trước. Bạn có phiền đổi cả hai không?
Boris Callens

Sẽ làm. Tính năng của ReSharper có trước việc triển khai Visual Studio. Nó vẫn duy trì như đạt được thông qua tính năng "tự động sửa lỗi" của chúng - Thẻ thông minh bị tắt khi bạn có ReSharper.
jlo 28/09/09

1
Bây giờ ~ 4 năm sau ReSharper 6.1 đã có tính năng trực tiếp!
Julien Roncaglia

Không chắc bạn muốn nói gì - ReSharper đã có tính năng này trong nhiều năm.
jlo

8
HÃY NHẬN THỨC: Nếu bạn sử dụng bất kỳ loại phản chiếu nào để tải động từ các tổ hợp, đây sẽ là một điều tồi tệ. Bạn sẽ sử dụng "tham chiếu" để mang lắp ráp đến thùng / nơi sản xuất, nhưng sẽ không có mã tham chiếu trực tiếp đến nó. SỬ DỤNG VỚI CHĂM SÓC!
Casper Leon Nielsen

12

bạn có thể sử dụng tiện ích mở rộng ' Xóa Tài liệu Tham khảo Không được Sử dụng ' mà tôi đã viết:

http://visualstudiogallery.msdn.microsoft.com/9811e528-cfa8-4fe7-9dd1-4021978b5097


tiện ích mở rộng này không được xuất bản
stombeur

1
Tôi thích điều này lúc đầu! Nhưng sau đó với thử nghiệm sâu hơn, nó đã loại bỏ các tài liệu tham khảo mà tôi cần. Thông tin chi tiết về sự cố có tại đây: wpfsharp.com/2012/04/04/…
Rhyous

7

Loại bỏ các tham chiếu không sử dụng là một tính năng Visual Studio 2008 đã hỗ trợ. Thật không may, chỉ dành cho các dự án VB .NET.

Tôi cũng đã mở một đề xuất trên Microsoft Connect để có được tính năng này cho các dự án C #:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=510326

Nếu bạn cũng thích tính năng này thì bạn có thể bỏ phiếu cho đề xuất của tôi.


5

Thử cái này: Reference Assistant

Tóm lược

Hỗ trợ tham chiếu giúp loại bỏ các tham chiếu không sử dụng khỏi các dự án C #, F #, VB.NET hoặc VC ++ / CLI trong Visual Studio 2010.


1
có thể bạn biết một phần mở rộng tương tự cho năm 2012?
isxaker

@isxaker Đây hiện là một tính năng được tích hợp sẵn của resharper
itslittlejohn

4

ReSharper 6.1 sẽ bao gồm các tính năng sau:

  • Tối ưu hóa các tham chiếu : phân tích tham chiếu lắp ráp của bạn và cách sử dụng của chúng trong mã, lấy danh sách các tham chiếu thừa và xóa chúng.

  • Loại bỏ các tham chiếu không được sử dụng : tái cấu trúc nhanh chóng để loại bỏ các tham chiếu lắp ráp thừa.

  • Xóa an toàn trên các tham chiếu lắp ráp : sẽ xóa các tham chiếu lắp ráp nếu tất cả chúng đều dư thừa, nếu không sẽ làm mất tác dụng và chỉ có thể xóa các tham chiếu lắp ráp thừa của danh sách đã chọn.


4

ReSharper sẽ làm điều này cho bạn (và nhiều hơn thế nữa!)


Liệu Resharper có thực sự loại bỏ tham chiếu đến DLL trong thư mục Tham chiếu không? Tôi không nghĩ rằng nó làm được điều này?
tobinharris

1
Tôi không nghĩ rằng nó sẽ ... Tôi nghĩ rằng nó chỉ kéo câu lệnh using cho một vùng tên mà bạn không tham chiếu. FWIW - Coderush cung cấp chức năng tương tự "và hơn thế nữa!" :)
Samurai Ken,

1
Bây giờ ~ 4 năm sau ReSharper 6.1 đã có tính năng!
Julien Roncaglia

3

Tôi đã thực hiện điều này mà không có phần mở rộng trong VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly, nó hiển thị các tập hợp đã sử dụng và loại bỏ các tham chiếu không sử dụng theo cách thủ công.


Tôi không khuyên bạn nên làm điều này cho một dự án lớn hơn. Tôi cảm thấy rất khó để phân biệt những gì được và không được sử dụng. Tuy nhiên, tôi cũng bị mù màu, vì vậy điều đó có thể ảnh hưởng đến tính hữu ích của điều này đối với tôi.
DubiousPusher

2

Tôi có một câu trả lời miễn phí hoạt động trong bất kỳ phiên bản nào của Visual Studio và bất kỳ phiên bản Framework nào. Nó không loại bỏ các tham chiếu không sử dụng, nhưng nó xác định chúng.

Bạn có thể sử dụng Telerik JustDecompile trên dll dự án của mình. Chỉ cần mở dll trong JustDecompile và vào bên dưới Referencesđể xem những gì thực sự được sử dụng trong dll đã biên dịch.

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


1
Tôi nghĩ đó là một giải pháp tuyệt vời! Bạn có viết các plugin VS không? :) ILSpy có một plugin, và tôi sẽ xem nếu nó có thể dễ dàng bán tự động bằng cách nào đó ...
Steven Coco

@StevenCoco Tôi đã lâu không gặp nhưng IDE api khá dễ hiểu với rất nhiều ví dụ điển hình trên internet. Chúc may mắn và cập nhật cho chúng tôi dự án của bạn nếu bạn hoàn thành nó!
toddmo

0

Cho rằng VisualStudio (hoặc là msbuild?) Phát hiện các tham chiếu không sử dụng và không bao gồm chúng trong tệp đầu ra, bạn có thể viết một tập lệnh phân tích cú pháp các tham chiếu ra khỏi csproj và so sánh với các Tập hợp được tham chiếu được phát hiện bằng phản xạ trên đầu ra của dự án.

Nếu bạn có động lực ...


1
Điều này không phải lúc nào cũng chính xác. Ví dụ: nếu bạn có lớp Foo bắt nguồn từ Bar và bạn có thành viên tĩnh Blah trong Bar và bạn gọi nó là Foo.Blah, thì bạn phải có tập hợp Foo trong tham chiếu cho trình biên dịch, nhưng nó sẽ không được phát ra vào đầu ra, vì thành viên tĩnh nằm trong Bar. Còn một số trường hợp như thế này nữa.
Ilya Ryzhenkov

Vâng, tôi đã nhận thấy một số 'lỗ hổng' trong kịch bản của mình, không bao giờ tìm ra lý do tại sao. Cảm ơn bạn về thông tin.
Benjol,

0

Tôi nghĩ rằng nó được sao chép trong bin \, bởi vì trong dự án đã xóa tham chiếu có tham chiếu o dự án khác có cùng tham chiếu ...


0

Nếu bạn biết tài liệu tham khảo nào không được sử dụng, bạn có thể xóa chúng theo cách thủ công.
Trong Giải pháp Explorer, bấm chuột phải vào tham chiếu trong nút Tham chiếu , rồi bấm Loại bỏ.

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.