Resharper- ค้นหาคลาสที่ไม่ได้ใช้ทั้งหมด


122

ฉันรู้วิธีค้นหาการอ้างอิงที่ไม่ได้ใช้ของไฟล์เดียวโดยคลิกขวาที่ไฟล์แล้วเลือกตัวเลือก "ค้นหาการใช้งาน" มีวิธีใด ๆ ที่ฉันสามารถมองเห็นหรือได้รับรายชื่อของทุกชั้นเรียนที่ไม่ได้ใช้หรือไฟล์ในโครงการของฉัน?


2
ฉันเคยใช้ ndepend สำหรับสิ่งนี้ในอดีต
Cine

คำตอบ:


195

ขั้นแรกให้เปิดใช้งาน "วิเคราะห์ข้อผิดพลาดในโซลูชัน" (คลิกขวาที่ไอคอน Resharper ในแถบสถานะ)

จากนั้นคลิกขวาที่โหนดโซลูชันแล้วเลือก "ค้นหาปัญหารหัส" ในหน้าต่างเครื่องมือ "ผลการตรวจสอบ" คุณสามารถจัดกลุ่มตาม "ประเภทปัญหา" และมองหา "ประเภทหรือสมาชิกประเภทไม่เคยใช้" เพื่อรับคลาสที่ไม่ได้ใช้ทั้งหมด (และสัญลักษณ์ที่ไม่ได้ใช้อื่น ๆ อีกมากมาย)

ตัวเลือกที่สอง (หลังจากเปิดใช้งาน "วิเคราะห์ข้อผิดพลาดในโซลูชัน") คือไปที่คลาสที่ไม่ได้ใช้งานให้กด Alt + Enter เลือก "ตัวเลือกสำหรับ" ประเภทหรือสมาชิกประเภท ... "การตรวจสอบ" | ค้นหาปัญหารหัสทั้งหมดของประเภทนี้ | โซลูชันทั้งหมด

ตัวอย่างหน้าต่างผลการตรวจสอบ


41
คลาส / วิธีการที่ไม่ได้ใช้จะปรากฏขึ้นภายใต้ "ประเภทหรือสมาชิกประเภทไม่เคยใช้" ภายใต้ "ความซ้ำซ้อนในการประกาศสัญลักษณ์" ไม่แน่ใจว่าเกิดจากการเปลี่ยนแปลงเวอร์ชันหรือฉันมองว่ามันต่างออกไป
พล่าม

4
สิ่งนี้ยังไม่ส่งคืนคลาสที่ไม่ได้ใช้ในหมวดหมู่ใด ๆ โดยใช้ Resharper 7.1 บน VS2013 บน Windows 8 หรือ VS2012 บน Windows 7
Sam Jones

1
อย่างน้อยใน ReSharper 8 คุณไม่จำเป็นต้องเปิดใช้งาน "วิเคราะห์ข้อผิดพลาดในโซลูชัน" เพื่อให้ได้ผลลัพธ์
Pieter van Ginkel

@SamJones: คุณพูดถูก .. มันจะไม่ส่งคืนคลาสที่ไม่ได้ใช้ใด ๆ ภายใต้ Resharper 8.1 ด้วย ...
ย้อนกลับ

3
Resharper 10: รายงานนี้ไม่แสดงคลาสที่ไม่ได้ใช้ วิธีแก้ปัญหา: ค้นหาคลาสที่ไม่ได้ใช้ในโค้ดและทำ "ค้นหาปัญหาที่คล้ายกันในโซลูชัน"
altumano

17

วิธีแก้ปัญหาโดย @ulrichc ฟังดูสมบูรณ์แบบและใช้งานได้ดีสำหรับโปรเจ็กต์ขนาดเล็กถึงมิดเดิ้ลเวทที่คุณไม่ได้ใช้เฟรมเวิร์กDependency Injectionเช่นCastleหรือ Ninject แต่จะเกิดอะไรขึ้นถ้าคุณใช้ DI container [เช่น Castle เป็นต้น] และคุณมีสิ่งต่อไปนี้:

public class IoC
{
    private WindsorContainer _container;

    private IoC()
    {
         _container = new WindsorContainer();
    }

    public static void RegisterFromAssembly(Assembly assembly, string classEndsWith, LifeTime lifeTime)
    {
        var lifestyle = ConvertLifeStyleType(lifeTime);

        _container.Register(AllTypes.FromAssembly(assembly)
                  .Where(type => type.Name.EndsWith(classEndsWith))
                  .WithService.AllInterfaces()
                  .Configure(c => c.LifeStyle.Is(lifestyle))
                  .WithService.FirstInterface());
    }
}

ดังที่คุณเห็น RegisterFromAssembly ผ่านทุกประเภทภายในแอสเซมบลีและสุ่มสี่สุ่มห้า [ขึ้นอยู่กับพารามิเตอร์วิธีการ] จะเพิ่มลงในคอนเทนเนอร์ที่รันไทม์

คุณจะต้องมีบางอย่างเช่นปลั๊กอินAgent Mulderซึ่งให้การนำทางสำหรับประเภทที่ลงทะเบียนหรือแก้ไขภายในคอนเทนเนอร์ของคุณ อีกครั้งอาจใช้งานได้ [เวลาออกแบบ] แต่คุณจะไม่แน่ใจจริงๆเว้นแต่ทุกครั้งที่คุณลบคลาสที่ไม่ได้ใช้ออกคุณจะทำการทดสอบทั้งหมดในแอปพลิเคชันของคุณ [ทุกเลเยอร์ที่เป็นไปได้] เพื่อให้มั่นใจได้ว่า 80% คุณปลอดภัย คติธรรมของเรื่องราว: คลาสอาจฟังดูไม่ได้ใช้กับ Resharper แต่อาจฟื้นคืนชีพได้เมื่อคุณใช้ Dependency Injection


3
ไม่ใช่แค่ DI เท่านั้นสำหรับการใช้การสะท้อนกลับการแก้ปัญหาอาจล้มเหลว
Mohayemin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.