เอาการอ้างอิงที่ไม่ได้ใช้ทั้งหมดออกจากโครงการในโครงการ Visual Studio


263

ฉันแค่สงสัยว่าเป็นไปได้หรือไม่ในรุ่น Visual Studio ต่างๆที่จะลบการอ้างอิงทั้งหมดออกจากโครงการที่ไม่เคยใช้งานโดยอัตโนมัติ

ในคำตอบของคุณโปรดระบุเวอร์ชันของ VS ที่ใช้กับโซลูชัน


4
โดยทั่วไปสงสัยว่าการลบ DLLs เหล่านี้ส่งผลให้สามารถปรับปรุงเวลาในการสร้างหรืออย่างอื่นได้หรือไม่? (แน่นอนนอกจากการลบการอ้างอิงซ้ำซ้อน)
monish001

3
มีส่วนขยายฟรีที่คล้ายกันสำหรับ VS2015 หรือไม่
George Birbilis

1
โครงการ VB.Net มีมาตั้งแต่ VS 2005 แต่ไม่เคยนำมาใช้กับโครงการ C # msdn.microsoft.com/en-us/library/7sfxafba
Slai

4
คุณสามารถลงคะแนนเพื่อให้คุณสมบัตินี้รวมเป็นส่วนหนึ่งของ VS (ตามที่ควรจะเป็น)
Mike Lowery

2
@ monish001 - ทุกแอสเซมบลีและสินทรัพย์เพิ่มการใช้งานและเป็นอีกสิ่งหนึ่งในการจัดการ / ดูแลหรือเป็นแหล่งที่มีศักยภาพสำหรับข้อบกพร่อง
StingyJack

คำตอบ:


55

หากคุณติดตั้ง Resharper (ปลั๊กอิน) คุณสามารถเข้าถึงคุณลักษณะที่ช่วยให้คุณวิเคราะห์การอ้างอิงที่ใช้ผ่านSolution Explorer> (คลิกขวา) การอ้างอิง> เพิ่มประสิทธิภาพการอ้างอิง ...

http://www.jetbrains.com/resharper/webhelp/Refactorings__Remove_Unused_References.html

ฟีเจอร์นี้จัดการไม่ถูกต้อง:

  • แอสเซมบลีที่ขึ้นต่อกันของการพึ่งพา
  • แอสเซมบลีที่โหลดแบบไดนามิก (Assembly.LoadFile)
  • แอสเซมบลีของรหัสเนทิฟที่โหลดผ่าน interop
  • ตัวควบคุม ActiveX (COM interop)
  • วิธีการสร้างสรรค์ในการโหลดชุดประกอบอื่น ๆ

ป้อนคำอธิบายรูปภาพที่นี่


1
ข้อความล่าสุดของคุณ "อย่างไรก็ตามยังไม่สมบูรณ์ชุดประกอบใด ๆ ที่ขึ้นอยู่กับชุดประกอบที่อ้างอิงในโครงการปัจจุบันของคุณยังคงถูกทำเครื่องหมายว่าไม่ได้ใช้" ไม่ใช่ปัญหา บิลด์รู้ว่าจะคัดลอกข้อมูลอ้างอิงของข้อมูลอ้างอิงของคุณ ดูคำตอบนี้: stackoverflow.com/a/2290139/26262
Ed Greaves

ในขณะนี้เป็นวิธีที่มีศักยภาพในการทำเช่นนี้ "ในรุ่น Visual Studio ต่างๆ" สำหรับฉันหมายความว่าไม่ใช่อย่างอื่น แต่แล้ว "ภายใน"
Mark Schultheiss

28

ขยาย Resharperจะทำเพื่อคุณ

ส่วนขยายนี้รองรับ Visual Studio 2005 ถึง 2017

ในขณะที่คอมไพเลอร์จะไม่รวมแอสเซมบลีที่ไม่ได้ใช้ภายนอกด้วยการใช้คำสั่งและการอ้างอิงทำให้ Visual Studio และ Intellisense ทำงานช้าลงเนื่องจากมีโค้ดที่ต้องพิจารณาเพิ่มเติม


12
มีคนพบการอ้างอิงที่ไม่ได้ใช้จำนวนมากในโครงการออก - แต่มีกลุ่มของพวกเขาที่ใช้งานอยู่จริง ๆ ... ดังนั้นฉันจึงไม่ไว้วางใจ Resharper ที่มีการอ้างอิง
Offler

5
Resharper ใช้หน่วยความจำจำนวนมากในโครงการขนาดใหญ่เมื่อมีการอ้างอิงจำนวนมากซึ่งในที่สุดก็ล้มเหลว VS
Cemre

2
รุ่น @eraj VS Express ไม่สนับสนุนส่วนขยายรับรุ่นชุมชนฟรีที่สนับสนุนส่วนขยายเช่น ReSharper
codemonkeh

4
Pete เครื่องมืออัตโนมัติใด ๆ ที่มีความเป็นไปได้ที่จะเข้าถึงได้ โดยเฉพาะอย่างยิ่งในยุคของ DI และการพึ่งพา PCL ซึ่งดูเหมือนว่าจะไม่ได้รวมเป็นสิ่งจำเป็น แต่แทบจะไม่เป็นความผิดของเครื่องมือ แทนที่จะทำภาพหน้าจอคุณควรใช้ซอฟต์แวร์ควบคุมเวอร์ชัน ระบบที่ทันสมัยเช่น Git หรือ Hg จะช่วยให้คุณเช็คอินในพื้นที่บ่อยครั้งดังนั้นคุณจะไม่สูญเสียงาน
Mathieson

2
เท่าที่ฉันบอกได้บอก Resharper แสดงเนมสเปซที่ไม่ได้ใช้ไม่ใช่การอ้างอิงแอสเซมบลีซึ่งเป็นสิ่งที่ฉันคิดว่าคำถาม "การอ้างอิงที่ไม่ได้ใช้จากโครงการ" หมายถึง ฉันต้องการหาสิ่งที่ตามมาเช่นกัน
Sonic Soul

28

คุณสามารถลองส่วนขยาย VS2010 ฟรี: ผู้ช่วยอ้างอิงโดยกลุ่ม Lardite มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน เครื่องมือนี้ช่วยในการค้นหาข้อมูลอ้างอิงที่ไม่ได้ใช้และอนุญาตให้คุณเลือกข้อมูลอ้างอิงที่ควรลบ


3
ไม่ทำงานกับโครงการ MVC มันลบ DLL ที่จำเป็นเป็น. ผู้ช่วยและ. WebPage
User.Anonymous


ใช้งานได้หากคุณทำตามเคล็ดลับง่ายๆ: devio.wordpress.com/2014/12/03/…
ravi punjwani

5
และสำหรับ VS2019
DARKGuy

21

ในโครงการ Visual Basic มีการสนับสนุนการลบ "การอ้างอิงที่ไม่ได้ใช้" (โครงการ -> การอ้างอิง -> การอ้างอิงที่ไม่ได้ใช้) ใน C # ไม่มีฟังก์ชั่นดังกล่าว

วิธีเดียวที่จะทำในโครงการ C # (โดยไม่ต้องใช้เครื่องมืออื่น) คือการลบชุดประกอบที่ไม่ได้ใช้ที่เป็นไปได้รวบรวมโครงการและตรวจสอบว่ามีข้อผิดพลาดเกิดขึ้นระหว่างการรวบรวม หากไม่มีข้อผิดพลาดเกิดขึ้นคุณได้ลบชุดประกอบที่ไม่ได้ใช้ ( ดูโพสต์ของฉัน )

หากคุณต้องการที่จะทราบว่าโครงการ (งานประกอบ) ขึ้นอยู่กับการประกอบอื่น ๆ ที่คุณสามารถใช้NDepend


2
ใน VS 2008/2010 มีตัวเลือกเมนูคลิกขวาเพื่อลบหรือลบและเรียงลำดับการใช้
JohnB

11
@JohnB: แน่นอนว่าคุณพูดถูก แต่คำถามของเขาเกี่ยวกับการอ้างอิง (ไปยังการประชุม) ไม่ใช่การใช้
Jehof

VS2012: เมนู: โครงการ -> คุณสมบัติ -> การอ้างอิง -> การอ้างอิงที่ไม่ได้ใช้
LosManos

20

สำหรับ Visual Studio 2013/2015/2017 มีเป็นส่วนขยายที่ไม่ตรงกับสิ่งที่คุณต้องการ: ResolveUR สิ่งนี้โดยทั่วไปคือ:

  • การอ้างอิงถูกลบในโครงการ
  • โครงการถูกคอมไพล์ด้วย msbuild
  • ตรวจสอบข้อผิดพลาดในการสร้าง
  • เรียกคืนการอ้างอิงที่ถูกลบหากมีข้อผิดพลาดในการสร้าง

เพิ่งติดตั้งสำหรับ VS 2017 Community Edt - ใช้งานได้ดีจนถึงตอนนี้
โทมัส

มันบอกว่ามีการสร้างข้อผิดพลาด แต่ไม่มีการสร้างข้อผิดพลาดเมื่อฉันสร้างจึงไม่ทำงาน edtion vs2015 สื่อสาร
Raghavendra

คุณสามารถสร้างปัญหาได้ในหน้าของ github: github.com/subatta/ResolveUR/issues
Claudiu Constantin

5
2.5 จาก 5 ดาวใน Visual Studio Marketplace จาก 52 บทวิจารณ์ทำให้ฉัน
ECH

พยายามใช้ MVC Project และเสนอที่จะลบการพึ่งพาที่สำคัญหลายอย่างเช่น System.Web.Helpers ดังนั้นฉันจึงลังเลที่จะปล่อยให้มันทำงานด้วยตัวเอง
ฮาซีเอล

19

สิ่งที่คุณต้องการคือหินและข้อนิ้วมือจากนั้นคุณสามารถทำได้เหมือนมนุษย์ถ้ำ

  1. ลบเนมสเปซที่ไม่ได้ใช้ (สำหรับแต่ละคลาส)
  2. เรียกใช้การตรวจแก้จุดบกพร่องสร้าง
  3. คัดลอกการอ้างอิงเนมสเปซที่สามารถใช้งานได้และที่เหลืออยู่ไปยังตำแหน่งใหม่
  4. เรียกใช้ปฏิบัติการ
  5. ข้อผิดพลาด DLL อ้างอิงที่หายไปจะเกิดขึ้น
  6. คัดลอก DLL ที่ต้องการจากโฟลเดอร์ดีบั๊ก
  7. ทำซ้ำ 4-6
  8. Gu Gu Ga Ga?
  9. โยนก้อนหินของคุณ

คุณสามารถพึ่งพาเครื่องมือสร้างของคุณเพื่อแจ้งให้คุณทราบว่ายังต้องการการอ้างอิงใดอยู่ มันเป็นยุคของ VS 2017 มนุษย์ถ้ำยังคงรอดชีวิต


ฮ่าฮ่าไม่มีอะไรผิดปกติกับอารมณ์ขันเล็กน้อยที่นี่ วิธีการของสโตนมันดูเหมือนว่าจะไม่มีรุ่น Enterprise แบบที่ใช้อยู่ตอนนี้
Nicholas Petersen

16

สำหรับใครมาที่นี่กำลังมองหาVisual Studio 2012 :

ดาวน์โหลดและติดตั้งผู้ช่วยอ้างอิงสำหรับ Visual Studio 11

หลังจากนั้นคุณสามารถทำได้:

ป้อนคำอธิบายรูปภาพที่นี่


1
ผู้ช่วยอ้างอิงสำหรับ Visual Studio 11 ดูเหมือนจะไม่ถูกต้องมันแสดงให้ฉันเห็นกลุ่มอ้างอิงที่ไม่ได้ใช้ซึ่งฉันรู้ว่ามีการใช้งานจริง (ติดตั้งผ่าน Nuget)
Bill Yang

1
ไม่ทำงานกับโครงการ MVC มันลบ DLL ที่จำเป็นเป็น. ผู้ช่วยและ. WebPage
ระบุชื่อ

ใช่สิ่งนี้กลับมากัดฉันในตูดโดยใช้โปรแกรม WPF C #
Charles Clayton

ไม่ใช่ตัวเลือกใน VS2017
Nathan

1
ไม่มีอยู่ใน VS2019 เช่นกัน
Vin Shahrdar

15

ด้วย Visual Studio เวอร์ชั่น 2017 และ 2015 คุณสามารถทำได้ด้วยฟีเจอร์Code Mapแต่ฟีเจอร์นี้มีเฉพาะในEnterprise Editionไม่ใช่เวอร์ชันCommunityหรือProfessional

คลิกขวาที่โหนดโครงการในตัวสำรวจโซลูชันและเลือก 'แสดงบนแผนที่รหัส' สิ่งนี้จะแสดง. dll ของคุณเป็นโหนดเดียวในกราฟเปล่า คลิกขวาที่โหนดนั้นในรหัสแผนที่และเลือก "แสดงชุดประกอบการอ้างอิงนี้" สิ่งนี้จะเพิ่มโหนดเพิ่มเติมที่เรียกว่า "Externals" ซึ่งสามารถขยายได้เพื่อแสดงเฉพาะแอสเซมบลีที่อ้างอิงจริง

ป้อนคำอธิบายรูปภาพที่นี่


1
หากคุณมีรุ่นองค์กรและไม่เห็นตัวเลือกนี้ในเมนูบริบทคุณจะต้องติดตั้งคุณสมบัติ "รหัสแผนที่" จากตัวติดตั้ง VS ใต้แผงส่วนประกอบแต่ละชิ้น
StingyJack

นี่เป็นสิ่งที่ดีขอบคุณ @Glenn ฉันแค่อยากจะบอกว่าฉันเคยใช้ Micosoft.Office.Interop.Excel และมันไม่ได้อยู่ในรายชื่ออ้างอิงอื่น ๆ ดังนั้นจึงต้องระวังหน่อย
Emil Filip

14

ใน Visual Studio 2013 ส่วนขยายนี้ใช้งานได้: ResolveUR


15
@abarisone คำตอบทั่วไป "อย่าใช้ลิงค์เป็นคำตอบ" ควรใช้จริงๆหลังจากที่คุณได้ดูคำตอบจริง ๆ เท่านั้น ลิงก์เป็นสิ่งเดียวที่เกี่ยวข้องกับคำตอบนี้ มันเป็นลิงก์ไปยังปลั๊กอิน VS ดังนั้นจึงไม่มีอะไรเกี่ยวข้องรวมอยู่ด้วย
Charles Boyung

ฉันเห็นด้วยกับชาร์ลส์ ดูเหมือนว่าจะกลั่นกรองการละเมิดจาก @abarisone คำตอบนี้ช่วยให้ฉันประหยัดเวลาและฉันจะเกลียดถ้า mods ใดใช้อำนาจของพวกเขาในการลบ
Zun

@ จุนก่อนอื่นฉันไม่เคยเป็นผู้ดูแลเลยหรืออ้างว่าเป็น ฉันตั้งใจจะขอข้อมูลเพิ่มเติมเกี่ยวกับส่วนขยาย อาจเป็นเพียงผิวเผินที่อยู่ข้างๆฉัน แต่ฉันก็ไม่ได้ตั้งใจที่จะทำการละเมิด
abarisone

12

บางคนแนะนำให้ใช้เครื่องมือที่น่ากลัว - อ้างอิงผู้ช่วยสำหรับ Visual Studio ปัญหาคือว่า VS2012 เป็น Visual Studio ที่รองรับล่าสุด แต่มีวิธีที่จะทำให้มันทำงานได้ใน VS2013 เช่นกัน;)

และนี่คือวิธี:

1) ดาวน์โหลดLardite.RefAssistant.11.0.vsix

2) เปลี่ยนนามสกุลเป็น zip: Lardite.RefAssistant.11.0.vsix->Lardite.RefAssistant.11.0.zip

3) Unzip และเปิดextension.vsixmanifestไฟล์ใน text editor

4) ค้นหาสิ่งที่เกิดขึ้นทั้งหมดInstallationTarget Version="[11.0,12.0)"และแทนที่ด้วยInstallationTarget Version="[11.0,12.0]"(จดวงเล็บปิด)

5) บันทึกไฟล์และบีบอัดไฟล์ทั้งหมดเพื่อให้อยู่ในระดับซิปรูต

6) เปลี่ยนนามสกุลของใหม่zipเป็นvsix

7) ติดตั้งและสนุก :)

ผมได้ทดสอบกับ VS2013 ขอบคุณแหล่งที่มาสำหรับการกวดวิชา

แก้ไข เพิ่มเพื่อสนับสนุน VS 2015 Community Edition

<InstallationTarget Version="[14.0,15.0]" Id="Microsoft.VisualStudio.Community" />

ความหมายของวงเล็บ

[ – minimum version inclusive.

] – maximum version inclusive. 

( – minimum version exclusive. 

) – maximum version exclusive.

1
มันใช้งานได้ดี! ดูเหมือนนักเขียนที่เรียบง่ายซึ่งอาจได้รับการแก้ไขเมื่อหลายปีก่อนโดยผู้เขียน - แต่ดูเหมือนว่าเขาจะหายไปอย่างน้อยเว็บไซต์ก็มี ...
wexman

มันไม่ใช่การพิมพ์ผิด แต่เป็นรุ่น VS ที่ได้รับการสนับสนุนสูงสุด :) นักพัฒนาควรทดสอบ Add-on ของเขากับทุกเวอร์ชัน VS ใหม่และเพิ่มจำนวน แต่ด้วยเหตุผลบางอย่างที่พวกเขาไม่ได้ทำ
VladL

จำไว้ว่าให้หยุดสิ่งที่ "คัดลอกและวาง" :)
Rikki

@RikkiRockett คุณกำลังพูดถึงฉันอยู่หรือเปล่า ฉันเชื่อมโยงแหล่งที่มากับคำตอบของฉันแล้ว หรือคุณหมายถึงอะไรกันแน่?
VladL

2
Nah man ฉันล้อเล่น. เพียงแค่พูดกับเพื่อนที่ใส่ ")" แทนที่จะเป็น "]" ซึ่งทำให้เราทุกคนผ่านคำแนะนำของคุณ :) ทำได้ดี แต่ทำในสิ่งที่คุณพูดและสบายดี! คุณเพิ่งช่วยชีวิตฉันด้วยการดิ้นรนกับสิ่งนี้ (y)
Rikki

7

คุณสามารถใช้ส่วนขยายผู้ช่วยอ้างอิงได้จากแกลเลอรีส่วนขยายของ Visual Studio

ใช้งานได้กับ Visual Studio 2010


2
คุณต้องระวังโครงการเว็บ มันรายงาน DLLs ที่ใช้เป็น "ไม่ได้ใช้"
Miro J.

ฉันเห็นด้วยกับ Miro ฉันพยายามใช้สิ่งนี้กับโครงการเว็บของฉันและได้เลือกการอ้างอิงสองโหลที่ต้องใช้แอปพลิเคชันเว็บของฉัน (System.Web. *, Ninject. *, EntityFramework, เพื่อตั้งชื่อไม่กี่)
Denis M. Kitchen

ไม่ทำงานกับโครงการ MVC มันลบ DLL ที่จำเป็นเป็นผู้ช่วยและ. WebPage
ระบุชื่อ

1

ใช้ DevExpress ฉันทำตามคำแนะนำเหล่านี้:

  1. ใน VS ให้ไปที่ DevExpress - Editor - Code Cleanup ภายใต้กฎให้ทำเครื่องหมาย 'ลบการอ้างอิงเนมสเปซที่ไม่ได้ใช้' คลิกตกลง
  2. คลิกขวาที่โซลูชันแล้วเลือก 'การล้างรหัส' การล้างข้อมูลใช้เวลาสองสามนาทีและเสร็จสิ้น
  3. สร้างใบสมัครของคุณ


-3

วิธีการต่อไปนี้ไม่ได้ขึ้นอยู่กับ 'ส่วนเสริมและไม่เจ็บปวดมาก

ทำตามขั้นตอนในแต่ละไฟล์ต้นฉบับของคุณและ

  1. เลือกทั้งหมด (Ctrl-A)
  2. สลับการขยายเค้าร่าง (Ctrl-M, M) การทำเช่นนี้จะลดไฟล์เป็นสองบรรทัด
  3. คลิกที่ '+' ในเนมสเปซ สิ่งนี้จะแสดงคลาสของไฟล์แต่ละไฟล์เป็นบรรทัดเดียว สแกนจำนวนการอ้างอิงของแต่ละชั้นโดยมองหาคลาสที่ไม่ได้อ้างถึง
  4. คลิกที่แต่ละคลาส '' + ' สิ่งนี้จะแสดงฟังก์ชั่นของแต่ละคลาสเป็นบรรทัดเดียว สแกนจำนวนการอ้างอิงของแต่ละฟังก์ชั่นโดยมองหาฟังก์ชั่นที่ไม่มีการอ้างอิง

การสแกนแต่ละไฟล์ที่มองหา '0 อ้างอิง' ใช้เวลาเพียงไม่กี่วินาที

การสแกนโครงการทั้งหมดใช้เวลาเพียงไม่กี่นาที


-11

ใน VB2008 มันทำงานด้วยวิธีนี้:

Project>Add References

จากนั้นคลิกที่แท็บล่าสุดที่คุณสามารถดูรายการการอ้างอิงที่ใช้ล่าสุด ค้นหาสิ่งที่คุณไม่ต้องการและลบ จากนั้นคุณปิดโดยไม่ต้องเพิ่มอะไรเลย


1
สิ่งนี้ไม่ได้ตรวจสอบว่ามีการใช้งานข้อมูลอ้างอิงหรือไม่
Xavier Poinas

-12

ในการลบการอ้างอิงใน Visual C # ในโซลูชัน Explorer ให้เปิดโหนดอ้างอิงภายใต้โหนดโครงการ คลิกขวาที่การอ้างอิงและคลิกลบ


3
สิ่งนี้ดูเหมือนจะไม่ถูก จำกัด ให้ใช้งานไม่ได้หรือโดยอัตโนมัติเท่านั้น
นาธาน Tuggy

มันไม่ได้ทำงานโดยอัตโนมัติ
Amir

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