사용하지 않는 참조 제거 (! = "using")


100

내 프로젝트에서 사용하지 않는 참조를 찾고 삭제할 수 있습니까?

2008 년과 비교하여 using 문을 쉽게 제거 할 수 있다는 것을 알고 있지만 이것이 프로젝트에서 실제 참조를 제거하지는 않습니다. 참조 된 dll은 여전히 ​​bin / setup 패키지에 복사됩니다.


감사. 슬프게도 제가 찾고 있던 대답이 없습니다 ...
Boris Callens 2009-07-23

답변:


55

* 참고 : 이 답변의 다른 버전 은 http://www.jetbrains.net/devnet/message/5244658 을 참조 하십시오 .

게시물을 읽어 보면 원래 질문에 대해 약간의 혼란이있는 것 같습니다. 내가 찔러 보자.

원래 게시물은 실제로 "한 Visual Studio 프로젝트에서 사용하지 않는 다른 프로젝트 / 어셈블리에 대한 참조를 식별하고 제거하려면 어떻게해야합니까?"라는 질문을 던지고 있습니다. 포스터는 어셈블리가 더 이상 빌드 출력의 일부로 나타나지 않기를 원합니다.

이 경우 ReSharper가이를 식별 하는 데 도움을 줄 수 있지만 직접 제거 해야합니다.

이렇게하려면 솔루션 브라우저에서 참조를 열고 참조 된 각 어셈블리를 마우스 오른쪽 단추로 클릭 한 다음 "종속 코드 찾기"를 선택합니다. 보다:

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

다음 중 하나를 얻을 수 있습니다.

  1. 브라우저 창에서 해당 참조에 대한 종속성 목록 또는

  2. "XXXXXXX 모듈에 종속 된 코드를 찾을 수 없습니다."라는 대화 상자가 나타납니다.

두 번째 결과가 나오면 참조를 마우스 오른쪽 버튼으로 클릭하고 제거를 선택한 다음 프로젝트에서 제거 할 수 있습니다.

이 "수동", 즉 한 번에 하나의 참조를 수행해야하는 동안 작업이 완료됩니다. 누군가 이것을 어떤 방식 으로든 자동화했다면 나는 그것이 어떻게 이루어 졌는지 듣고 싶습니다.

.Net Framework의 항목은 일반적으로 빌드 출력에 복사되지 않으므로 무시할 수 있습니다 (일반적으로 Silverlight 앱의 경우에는 해당되지 않음).

일부 게시물은 "해당 파일 내의 참조를 확인하는 데 필요하지 않은 소스 코드 파일에서 using 절 (C #)을 어떻게 제거합니까?"라는 질문에 대답하는 것 같습니다.

이 경우 ReSharper는 다음과 같은 몇 가지 방법으로 도움을줍니다.

  1. 즉석 오류 감지 중에 사용되지 않는 using 절을 식별합니다. 코드 검사 경고로 나타납니다. 코드는 파일에서 회색으로 표시되고 (기본값) ReSharper에서 제거 할 수있는 힌트를 제공합니다.

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

  2. 코드 정리 프로세스의 일부로 자동으로 제거 할 수 있습니다.

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

마지막으로 ReSharper가 솔루션에서 정적 코드 분석을 수행한다는 사실을 인식하십시오. 따라서 어셈블리에 대한 동적 참조 (예 : 리플렉션을 통해 또는 런타임에 동적으로로드되고 인터페이스를 통해 액세스되는 어셈블리)가있는 경우 해당 어셈블리를 선택하지 않습니다. 프로젝트에서 작업 할 때 코드베이스와 프로젝트 종속성을 이해하는 대신 대체 할 수 없습니다. ReSharper 기능이 매우 유용하다고 생각합니다.


광범위한 답변이 있습니다. 이상한 점은 내가 using 문을 언급하지 않는다는 것을 알고 있지만 (그 정리는 VS에서 표준이지만 R #이 그것을 다시 발명 한 이유를 알지 못합니다) 먼저 그 질문에 대답한다는 것입니다. 두 가지를 바꿔 주시겠습니까?
Boris Callens

할 것입니다. ReSharper의 기능은 Visual Studio 구현보다 우선합니다. ReSharper를 사용하면 스마트 태그가 꺼집니다.
jlo

1
이제 ~ 4 년 후 ReSharper 6.1이이 기능을 직접 얻었습니다!
Julien Roncaglia 2012

무슨 뜻인지 잘 모르겠습니다. ReSharper는이 기능을 수년 동안 사용해 왔습니다.
jlo

8
주의 : 어셈블리에서 동적으로로드하기 위해 어떤 종류의 리플렉션을 사용하는 경우 이는 나쁜 일입니다. "참조"를 사용하여 조립품을 빈 / 생산 현장으로 가져 가게되지만이를 직접 참조하는 코드는 없습니다. 조심해서 사용하십시오!
Casper Leon Nielsen



5

이것을 시도하십시오 : 참조 도우미

요약

참조 도우미는 Visual Studio 2010의 C #, F #, VB.NET 또는 VC ++ / CLI 프로젝트에서 사용하지 않는 참조를 제거하는 데 도움이됩니다.


1
2012 년과 비슷한 확장을 알고 계십니까?
isxaker 2014 년

@isxaker이 이제 ReSharper에서의 기능이 내장되어 있습니다
itslittlejohn

4

ReSharper 6.1에는 다음 기능이 포함됩니다.

  • 참조 최적화 : 어셈블리 참조와 코드에서의 사용을 분석하고 중복 참조 목록을 가져와 제거합니다.

  • 사용하지 않는 참조 제거 : 중복 어셈블리 참조를 제거하기위한 빠른 리팩토링.

  • 어셈블리 참조에서 안전한 삭제 : 모든 어셈블리 참조가 중복 된 경우 삭제하고, 그렇지 않으면 사용을 표시하고 선택한 목록의 중복 어셈블리 참조 만 제거 할 수 있습니다.


4

ReSharper 가이 작업을 수행 할 것입니다 (그리고 훨씬 더!)


Resharper는 실제로 References 폴더에서 DLL에 대한 참조를 제거합니까? 나는 이것이 그렇게 생각하지 않는다?
tobinharris

1
나는 그것이 될 것이라고 생각하지 않는다 ... 나는 당신이 참조하지 않는 네임 스페이스에 대한 using 문을 잡아 당긴다 고 생각합니다. FWIW-Coderush는 동일한 기능을 제공합니다. :)
사무라이 켄

1
이제 ~ 4 년 후 ReSharper 6.1에 기능이 추가되었습니다!
Julien Roncaglia 2012

3

VS 2010 Ultimate Architecture-> Generate Dependency Graph-> By Assembly에서 확장없이이 작업을 수행했으며 사용 된 어셈블리를 표시하고 사용하지 않는 참조를 수동으로 제거했습니다.


더 큰 프로젝트에는 이것을 권장하지 않습니다. 나는 무엇이 사용되었고 사용되지 않았는지 식별하는 것이 매우 어려웠다. 그러나 나는 또한 색맹이어서 이것의 유용성에 영향을 미쳤을 것입니다.
DubiousPusher

2

모든 버전의 Visual Studio 및 모든 프레임 워크 버전에서 작동하는 무료 답변이 있습니다. 사용하지 않는 참조를 제거하지는 않지만 식별합니다.

프로젝트 dll에서 Telerik JustDecompile 을 사용할 수 있습니다 . JustDecompile에서 dll을 열고 아래 References로 이동 하여 컴파일 된 dll에서 실제로 사용되는 내용을 확인하십시오.

여기에 이미지 설명 입력


1
그것은 훌륭한 해결책이라고 생각합니다! VS 플러그인을 작성합니까? :) ... ILSpy은 플러그인을 가지고 있으며, 나는 그것을 쉽게 어떻게 든 반 자동화 할 수 있는지거야
스티븐 코코

@StevenCoco 나는 오랫동안 사용하지 않았지만 IDE API는 인터넷에서 많은 좋은 예제를 통해 매우 간단합니다. 프로젝트가 완료되면 행운을 빕니다.
toddmo 2014

0

VisualStudio (또는 msbuild입니까?)가 사용하지 않는 참조를 감지하고 출력 파일에 포함하지 않는 경우 csproj에서 참조를 구문 분석하고이를 참조 된 어셈블리와 비교하는 스크립트를 작성할 수 있습니다. 프로젝트 출력.

동기가 있다면 ...


1
이것은 항상 올바른 것은 아닙니다. 예를 들어, Bar에서 파생 된 Foo 클래스가 있고 Bar에 정적 멤버 Blah가 있고이를 Foo.Blah로 호출하면 컴파일러에 대한 참조에 Foo 어셈블리가 있어야하지만 방출되지 않습니다. 정적 멤버가 Bar에 있기 때문에 출력으로. 이와 같은 경우가 더 있습니다.
Ilya Ryzhenkov

그래, 내 대본에서 '구멍'을 발견했지만 그 이유를 알아 내지 못했다. 정보 주셔서 감사합니다.
Benjol

0

참조를 제거한 프로젝트에서 동일한 참조를 가진 다른 프로젝트에 참조가 있기 때문에 bin \에 복사되었다고 생각합니다.


0

사용되지 않는 참조를 알고있는 경우 수동으로 제거 할 수 있습니다.
솔루션 탐색기에서 참조 노드 의 참조를 마우스 오른쪽 단추로 클릭 한 다음 제거를 클릭합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.