Visual Studio 프로젝트의 프로젝트에서 사용되지 않은 모든 참조 제거


263

다양한 Visual Studio 버전에서 사용되지 않은 프로젝트에서 모든 참조를 자동으로 제거 할 수 있는지 궁금했습니다.

귀하의 답변에 솔루션이 적용되는 VS 버전을 지정하십시오.


4
일반적으로 궁금합니다. 이러한 DLL을 제거하면 빌드 시간이나 그 밖의 다른 것들이 눈에 띄게 향상됩니까? (물론, 중복 종속성 제거 이외)
monish001

3
VS2015와 비슷한 무료 확장 프로그램이 있습니까?
George Birbilis

1
VB.Net 프로젝트는 VS 2005 이후로 사용되었지만 C # 프로젝트에서는 구현되지 않았습니다. msdn.microsoft.com/en-us/library/7sfxafba
Slai

4
이 기능을 VS의 일부로 포함 시키도록 투표 할 수 있습니다 (있는 그대로).
Mike Lowery 2016 년

2
@ monish001-모든 어셈블리와 자산은 배포 공간을 늘리며 버그를 관리 / 유지하거나 잠재적 인 소스가됩니다.
StingyJack

답변:


55

Resharper (플러그인)가 설치되어 있으면 솔루션 탐색기> 참조 (오른쪽 클릭)> 참조 최적화 ... 를 통해 사용 된 참조를 분석 할 수있는 기능에 액세스 할 수 있습니다 .

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까지를 지원합니다.

컴파일러에는 사용되지 않는 어셈블리가 포함되어 있지 않지만 외부 using 문과 참조는 Visual Studio 및 Intellisense 속도를 저하시킵니다. 도구에 고려해야 할 코드가 많기 때문입니다.


12
그 중 하나는 프로젝트에서 사용되지 않은 참조를 많이 발견했지만 실제로 사용하는 많은 참조를 가지고 있습니다. 따라서 참조와 함께 Resharper를 신뢰하지 않습니다
Offler

5
Resharper는 VS와 충돌하는 참조가 많을 때 큰 프로젝트에서 엄청난 양의 메모리를 소비합니다.
Cemre

2
@eraj VS Express 에디션은 확장 기능을 지원하지 않으며 ReSharper와 같은 확장 기능을 지원하는 무료 Community 에디션을 다운로드하십시오.
codemonkeh 2016 년

4
Pete, 모든 자동화 된 도구는 넘어 질 가능성이 있습니다. 특히 DI와 PCL의 시대에 보지 못한 것처럼 보이는 종속성이 필요할 수 있지만 이는 도구의 결함이 아닙니다. 스크린 샷을 작성하는 대신 버전 관리 소프트웨어를 사용해야합니다. Git 또는 Hg와 같은 최신 시스템을 사용하면 로컬에서 자주 체크인 할 수 있으므로 작업을 잃지 않아도됩니다.
Mathieson

2
내가 말할 수있는 한 Resharper는 어셈블리 참조가 아닌 사용되지 않는 네임 스페이스를 보여줍니다. "프로젝트에서 사용되지 않은 참조"라는 질문이 의미한다고 생각합니다. 나는 또한 후자를 찾고 싶다
Sonic Soul

28

무료 VS2010 확장 프로그램 : Lardite 그룹의 Reference Assistant 를 사용해보십시오 . 그것은 나를 위해 완벽하게 작동합니다. 이 도구는 사용되지 않은 참조를 찾는 데 도움이되며 제거 할 참조를 선택할 수 있습니다.


3
MVC 프로젝트에서 작동하지 않습니다. 그것은 필수 DLL을 .Helpers 및 .WebPage로 제거합니다
User.Anonymous


간단한 트릭을 따르는 경우 작동합니다. devio.wordpress.com/2014/12/03/…
ravi punjwani

5
VS2019?
DARKGuy 19

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 용으로 설치했습니다. -지금까지 잘 작동합니다.
토마스

그것은 빌드 오류가 있다고 말하지만 빌드 할 때 빌드 오류가 없으므로 작동하지 않습니다 vs2015 comm edtion
Raghavendra

github의 페이지에서 문제를 만들 수 있습니다 : github.com/subatta/ResolveUR/issues
Claudiu Constantin

5
2.5 개의 리뷰 중 Visual Studio Marketplace에서 2.5 점 만점에 2.5 점 받음
ECH

MVC 프로젝트에서 시험해 보았고 System.Web.Helpers와 같은 몇 가지 중요한 종속성을 제거하도록 제안하므로 자체적으로 진행하는 것을 꺼려합니다.
Jahaziel

19

돌과 베어 너클 만 있으면 원시인처럼 할 수 있습니다.

  1. 사용하지 않는 네임 스페이스 제거 (각 클래스)
  2. 디버그 빌드 실행
  3. 실행 파일 및 나머지 네임 스페이스 참조를 새 위치로 복사
  4. 실행 파일을 실행
  5. 누락 된 참조 DLL 오류가 발생합니다
  6. 디버그 폴더에서 필요한 DLL 복사
  7. 4-6 반복
  8. 구구가가?
  9. 돌을 던져

빌드 도구를 사용하여 여전히 필요한 참조를 알려줄 수도 있습니다. VS 2017의 시대, 원시인은 여전히 ​​살아 남았습니다.


하하, 여기 약간의 유머 감각이 있습니다. 실제로 Stoneman의 접근 방식은 값 비싼 Enterprise 버전이 없어도 지금 당장 얻은 것 같습니다.
니콜라스 피터슨

16

Visual Studio 2012를 찾는 분이라면 .

Visual Studio 11 용 Reference Assistant 다운로드 및 설치

나중에 할 수있는 일 :

여기에 이미지 설명을 입력하십시오


1
Visual Studio 11의 Reference Assistant는 정확하지 않은 것 같습니다. 실제로 사용중인 Nuget을 통해 설치 된 사용되지 않은 참조가 많이 있음을 보여주었습니다.
Bill Yang

1
MVC 프로젝트에서 작동하지 않습니다. 필수 DLL을 .Helpers 및 .WebPage
User.Anonymous

예, WPF C # 프로그램을 사용하여 엉덩이를 물었습니다.
Charles Clayton

VS2017에는 옵션이 없습니다
Nathan

1
VS2019에는 존재하지 않음
Vin Shahrdar

15

Visual Studio 버전 2017 및 2015에서는 코드 맵 기능 으로이 작업을 수행 할 수 있지만이 기능은 Community 또는 Professional이 아닌 Enterprise Edition 에서만 사용할 수 있습니다. 버전이 있습니다.

솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 버튼으로 클릭하고 '코드 맵에 표시'를 선택하십시오. 빈 그래프에서 .dll을 단일 노드로 표시합니다. 코드 맵 에서 해당 노드를 마우스 오른쪽 버튼으로 클릭 하고 "조립품 표시 참조"를 선택하십시오. 그러면 실제로 참조되는 어셈블리 만 표시하도록 확장 할 수있는 "외부"라는 추가 노드가 추가됩니다.

여기에 이미지 설명을 입력하십시오


1
Enterprise 버전이 있고 상황에 맞는 메뉴에이 옵션이 보이지 않으면 VS 구성 요소의 개별 구성 요소 패널에서 "코드 맵"기능을 설치해야합니다.
StingyJack

이것은 좋은 것입니다, @Glenn 감사합니다. Micosoft.Office.Interop.Excel을 사용 중이며 다른 참조 목록에 포함되지 않았으므로 약간 조심해야한다고 말하고 싶습니다.
Emil Filip

14

Visual Studio 2013에서는이 확장이 작동합니다. ResolveUR


15
@abarisone 일반적인 "응답으로 링크를 사용하지 마십시오"응답은 실제로 답을 찾은 후에 만 ​​사용해야합니다. 링크는이 답변과 관련된 유일한 것입니다. VS 플러그인에 대한 링크이므로 포함 할 다른 것이 없습니다.
찰스 보이 웅

찰스에 동의합니다. 이것은 @abarisone의 중재 남용처럼 보입니다. 이 답변은 실제로 시간을 절약하는 데 도움이되었으며 어떤 개조가 자신의 힘을 남용하여 삭제하는 것을 싫어했을 것입니다.

@ Zun 우선 나는 결코 중재자가 아니었다 고 주장했다. 내 의도는 확장에 대한 자세한 정보를 요청하는 것이 었습니다. 그것은 내 곁에 피상적 이었을지 모르지만, 반드시 학대를 저 지르려는 의도는 아니었다.
abarisone

12

어떤 사람들은 멋진 도구를 사용하라고 제안했습니다-Visual Studio 용 Reference Assistant . 문제는 VS2012가 지원되는 최신 Visual Studio라는 것입니다. 그러나 VS2013에서도 작동하게하는 방법이 있습니다.)

그리고 방법은 다음과 같습니다.

1) Lardite.RefAssistant.11.0.vsix 다운로드

2) 확장자를 zip으로 변경하십시오 Lardite.RefAssistant.11.0.vsix.->Lardite.RefAssistant.11.0.zip

3) 압축을 풀고 extension.vsixmanifest 텍스트 편집기에서 파일의

4) 모든 발행 수를 찾기 InstallationTarget Version="[11.0,12.0)"및로 교체InstallationTarget Version="[11.0,12.0]" ) (닫기 괄호에주의

5) 파일을 저장하고 루트 zip 레벨에 있도록 모든 파일을 압축하십시오

6) 새 확장명 zipvsix

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 버전 :). 개발자는 새로운 VS 버전마다 추가 기능을 테스트하고 숫자를 늘려야하지만 어떤 이유로 든 그렇게하지 않았습니다.
VladL

"복사 및 붙여 넣기"를 중지해야합니다. :)
Rikki

@RikkiRockett 당신은 저를 해결하고 있습니까? 답변에 출처를 연결했습니다. 아니면 정확히 무엇을 의미합니까?
VladL

2
아냐 농담 이었어. 우리를 만든 "]"대신 ")"를 넣은 친구에게 말만하면됩니다. :) 좋은 일이지만, 당신이 말한 것을 모두 잘했습니다! 당신은이 문제로 하루를 저를 구했습니다. (y)
Rikki

7

Visual Studio 확장 갤러리에서 Reference Assistant 확장 을 사용할 수 있습니다 .

Visual Studio 2010에서 사용 및 작동합니다.


2
웹 프로젝트에주의해야합니다. "미사용"으로 사용 된 DLL을보고합니다.
Miro J.

미로에 동의합니다. 나는 이것을 웹 프로젝트와 함께 사용하려고 시도했으며 내 웹 응용 프로그램 (System.Web. *, Ninject. *, EntityFramework)을 실행하는 데 필요한 12 개의 참조를 선택했습니다.
Denis M. Kitchen

MVC 프로젝트에서 작동하지 않습니다. 필수 DLL을 .Helpers 및 .WebPage
User.Anonymous

1

DevExpress를 사용하여 다음 지침을 따릅니다.

  1. VS에서 DevExpress-편집기-코드 정리로 이동하십시오. 규칙에서 '미사용 네임 스페이스 참조 제거'를 선택하십시오. 확인을 클릭하십시오.
  2. 솔루션을 마우스 오른쪽 버튼으로 클릭하고 '코드 정리'를 선택하십시오. 정리가 몇 분 동안 실행되고 완료됩니다.
  3. 응용 프로그램 구축


-3

다음 방법은 '추가 기능'에 의존하지 않으며 매우 고통스럽지 않습니다.

각 소스 파일을 단계별로

  1. 모두 선택 (Ctrl-A)
  2. 윤곽선 확장을 전환합니다 (Ctrl-M, M). 이렇게하면 파일이 두 줄로 줄어 듭니다.
  3. 네임 스페이스의 '+'를 클릭하십시오. 파일의 각 클래스가 한 줄로 표시됩니다. 참조되지 않은 클래스를 찾아 각 클래스의 참조 횟수를 스캔하십시오.
  4. 각 클래스의 '+'를 클릭하십시오. 각 클래스 함수가 ​​한 줄로 표시됩니다. 참조되지 않은 기능을 찾아 각 기능의 참조 카운트를 스캔하십시오.

'0 reference'를 찾는 각 파일을 스캔하는 데 1 초 밖에 걸리지 않습니다.

전체 프로젝트를 스캔하는 데 몇 분 밖에 걸리지 않습니다.


-11

VB2008에서는 다음과 같이 작동합니다.

Project>Add References

그런 다음 최근에 사용한 참조 목록을 볼 수있는 최근 탭을 클릭하십시오. 원하지 않는 것을 찾아서 삭제하십시오. 그런 다음 아무 것도 추가하지 않고 닫습니다.


1
참조가 사용 중인지 확인하지 않습니다
Xavier Poinas

-12

Visual C #에서 참조를 제거하려면 솔루션 탐색기에서 프로젝트 노드 아래의 참조 노드를 엽니 다. 참조를 마우스 오른쪽 단추로 클릭하고 제거를 클릭하십시오.


3
이것은 사용되지 않는 것에 만 국한되거나 작동 중에 자동으로 보이지 않는 것 같습니다.
나단 터기

자동 조작이 아닙니다.
Amir

이전에 말한대로 자동 시도가 아닌 잘 시도했지만 나쁜 대답
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.