Visual Studio C # 문 축소


180

실제로 긴 코드 블록을 편집 할 때 (어쨌든 리팩토링되어야하지만이 질문의 범위를 벗어납니다), 종종 함수 블록을 축소 할 수있는 것처럼 명령문 블록을 축소 할 수있는 기능을 갈망합니다. 즉, 괄호로 묶인 모든 항목에 대해 마이너스 아이콘이 코드 개요에 표시되면 좋을 것입니다. 함수, 클래스, 영역, 네임 스페이스, 용도에 대해서는 나타나지만 조건부 또는 반복 블록에는 나타나지 않습니다. ifs, switch, foreaches 등과 같은 것들을 접을 수 있다면 환상적 일 것입니다!

그 점을 조금 살펴보면 VS의 C ++ 개요가 이것을 허용하지만 VS의 C # 개요는 허용하지 않는다는 것을 알았습니다. 나는 왜 그런지 모르겠다. C ++ 형식을 선택하면 메모장 ++도 축소되므로 Visual Studio가 그렇지 않은 이유를 알 수 없습니다.

이 동작을 가능하게하는 VS2008 애드 인에 대해 아는 사람이 있습니까? 아니면 숨겨진 설정이 있습니까?

추가하기 위해 편집 : 영역 삽입은 물론 옵션이며 이미 발생했지만 솔직히 말하면 이미 중괄호로 싸인 영역을 래핑 할 필요는 없습니다 ... 기존 코드에서 어쨌든 더 나은 관심사 분리를 위해 리팩터링합니다. (지역 대신 새로운 방법으로 "래핑")


6
BTW : 전환 개요 : Ctrl 키 + M은 M 모든 축소 : Ctrl 키 + M, O 나는이 두 단축키를 아주 쉽게 내 인생을 만든 것을 발견
Gaurav

2
Ctrl + M, L은 재귀 축소 / 확장을 토글합니다. 물론 이것은 한 줄로 남겨 둘 수 있습니다. 그 줄 안에 (Ctrl + M, M)은 요약 된 파일을 남깁니다.
patridge

2
VS 2012의 해당 플러그인은 다음과 같습니다. stackoverflow.com/questions/18388280/…
Glimpse

관련 : 문제를 코드 폴딩 제프 앳 우드, 2008 년
닉 알렉 세 에프

답변:


267

Visual Studio 2017부터는 문 축소가 기본 제공됩니다.

VS 2010 버전부터 2017 이전 버전의 VS에 대해이 작업을 수행하는 몇 가지 확장이 있습니다.

마지막 확장은 VS 2015 및 VS 2017 만 지원하지만 가장 강력합니다.
축소 된 블록 내부의 구문 색상을 지원하며 내결함성이 있으며 최적화되어 있습니다.

브라우저를 사용하여 다운로드 한 후에 확장 프로그램이 설치되지 않으면 기본 제공 Visual Studio 확장 관리자를 사용해보십시오.


대단합니다. 오랫동안 이런 것을 찾고있었습니다. 진정한 답이되어야합니다! (그러나 VS2010 non-express 판을 사용하는 경우에만 ..)
rikoe

이 확장 기능은 훌륭하지만 처리기 (.ashx)에서 작동하지 않습니다.
Jemsworld


3
Visual Studio 용으로이 플러그인이 필요하다는 사실은 혼란스러워합니다. 이것은 표준 동작이어야합니다. 선량.
Ryan Rodemoyer

@Odys, 확장 프로그램을 제거한 다음 다시 설치하여 Ctrl M + O 문제를 해결하십시오.
Shahedur Rahman

21

추가 기능을 알지 못하지만 지역을 언급했으며 이와 같은 일을하는 데 아무런 문제가 없습니다 ...

foreach (Item i in Items)
{
  #region something big happening here
  ...
  #endregion

  #region something big happening here too
  ...
  #endregion

  #region something big happening here also
  ...
  #endregion
}

편집 : 질문의 편집에 대한 응답으로 : 당신이 맞습니다. 모든 지역을 고집하는 것은 이상적이지 않으며 리팩토링은 아마도 갈 길입니다. 그러나 당신이 당신을 위해 코드를 "조직화"할 마법의 무언가를 찾고있는 것 같습니다. 나는 그것이 존재한다고 생각하지 않습니다.


IIRC, 함수 내에서 영역을 정의 할 수 없습니다.
Joel Coehoorn

10
그의 코드는 정확하다. 당신은 이런 영역을 정의 할 수있는 곳으로 제한되지 않습니다 (시작의 범위 밖에서 끝나지 않는 한)
John

3
원래 질문의 편집 내용을 참조하십시오. 한 번 또는 두 번의 클릭으로 영역 래핑 바로 가기를 사용하더라도 개발자 측에서 필요한 수동 작업은 실제로 자동으로 수행되는 질문 / 욕망에 대한 답변이 아닙니다.
Grank

1
@Joel VB.NET을 생각하고 있다고 생각합니다
Bryan Anderson

이 스레드에서 링크 된 모든 플러그인은 영역을 사용하는 것보다 낫습니다. 밤낮으로.
Glimpse

19

Visual Studio 내에서 특정 텍스트 블록을 축소 할 수 있지만 자동 개요를 해제해야합니다.

코드 창을 마우스 오른쪽 버튼으로 클릭하고 (Outline | Stop Outlining)을 선택하십시오.

그런 다음 일부 텍스트를 선택하고 마우스 오른쪽 버튼을 클릭하고 (개요 | 선택 숨기기)를 선택하십시오.

자동 개요를 다시 설정하면 사용자 정의 "지역"이 더 이상 축소되지 않습니다.


3
그럴 수 있지. 나는이 질문을 통해 자동 블록에 이러한 블록을 추가하는 방법을 찾고 싶습니다. 실제로는 그렇지 않습니다.
Grank

1
매트, 자동 개요를 중단하지 않고 (VS 2012에서) 할 수 있습니다. 텍스트를 선택하고 개요> 선택 물 숨기기
nawfal

3

Visual Studio 2008은 동일한 코드 계층 수준으로 유지하는 한 함수 내부 영역을 지원합니다.

#region Won't work
for(int i = 0; i<Count; i++)
{
//do something
#endregion
}

for(int i=0; i<Count; i++)
{
#region Works fine
//do lots of stuff
#endregion
}

5
2008 년에는 새로운 기능이 아닙니다. 2005에서도 지원합니다.
Kon

3

다른 것을 말하겠습니다 : (ctrl+m,ctrl+h)또는 편집> 개요> 선택 숨기기에서 너무 유용합니다.


1
@Mahdi 문제는 코드 블록을 축소시키는 도구에 관한 것이었다. 일부 조합을 클릭하면 if, for / while 루프 등이 모두 축소되어 코드를 가장 높은 수준으로 읽을 수 있습니다. 그런 다음 코드를 자세히 살펴볼 것입니다. 먼저 모든 지역을 축소해야하고 정확히 어느 지역인지 알 수 없기 때문에 솔루션을 실행할 수 없습니다. 앞으로 행운을 빕니다.
로마

1
먼저 무언가를 언급 한 다음이 아래에 숨겨져보다 쉽고 유연합니다.
M at


0

VS 2010에서는 Microsoft가 MEF (Managed Extensibility Framework)를 사용하여 WPF adorner 기능을 추가 했으므로 소스 코드 편집기를 확장하여보다 읽기 쉽고 액세스하기 쉬운 방식으로 구성 할 수 있습니다.

예를 들어 Scott Gu가 PDC 2008에서 시연 한 Summary Comments 비주얼 라이저 .

개발자를위한 더 나은 내일을 기대하십시오 :)


0

Coderush는 모든 코드 블록을 설명합니다. 블록을 확장 / 축소 할 수 있는지 확실하지 않지만 다음으로 가장 좋은 방법은 아웃 라인입니다. 내가 아는 한 블록 붕괴를 제공하지 않는 coderush 대신 resharper를 사용합니다.



0

VS2017에서는 코드 섹션을 강조 표시하고 마우스 오른쪽 버튼으로 클릭하고 개요> 선택 숨기기를 수행 할 수 있습니다. 코드가 축소되고 강조 표시된 섹션으로 전환됩니다.


-2

# region, # endregion은 스마트 옵션입니다.


10
StyleCop 규칙 SA1123 : DoNotPlaceRegionsWithinElements :이 규칙을 위반하면 영역이 코드 요소의 본문 내에 배치 될 때마다 발생합니다. Visual Studio를 포함한 많은 편집기에서 해당 지역 내에 코드가 숨겨져 기본적으로 지역이 축소되어 나타납니다. 시간이 지남에 따라 코드가 유지 될 때 잘못된 결정을 내릴 수 있으므로 일반적으로 요소 본문 내에 코드를 숨기는 것은 좋지 않습니다.
Sam Harwell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.