본문 바로가기

.NET Framework/Visual Studio

[Visual Studio] VSHOST : 02 VSHOST 진입 시점 및 기타 사항

 회차
[Visual Studio] VSHOST : 01. VSHOST? Who are U?

[Visual Studio] VSHOST : 02. VSHOST Entry point & Etc

02| VSHOST 진입 시점 및 기타사항
지난 작성된 글로부터 프로세스 호스팅이 무엇인지에 대해서 살펴 보았습니다. 이번 포스팅은 VSHOST 진입점과 기타사항에 대해서 알아보도록 하겠습니다.

VSHOST.EXE는 어디에 위치할까요?

우선 IDE 환경 폴더로 가보도록 하겠습니다.

<driver name>:\Program Files (x86)\Microsoft Visual Studio<version>\Common7\IDE



그래서 .NET reflector을 이용해서 Disassembler해보았습니다.

* VSHOST 진입 시점

* Red Gate's .NET Reflector 다운로드
  reflector.zip

<Main Entry 구조>

<Synchronize 클래스 구조>

Disassembler를 통해 해당 assembler구조를 살펴볼수 있었습니다.
무언가를 호스팅 한다길래 복잡할거라고 생각했지만 의외로 간단한 구조로 실행 할 어셈블리가 준비되기를
 기다리는 형태로 보이네요.

vshost.exe 어셈블리 외 vshost32.exe, vshost32-clr2.exe, vshost-clr2.exe도 파일 명칭만 다를뿐
내부적으로 같은구조로 구성 되어있습니다.

차이점을 찾아보려고 구글 서치를 몇일동안 하였지만 자료를 찾을수가 없었네요.
다만 x86 / x64 환경을 대비하여 더미 파일이 아닐까 싶네요.

기회가 된다면 Dave Templin께 한번 메일 회신을 통해 그의문점을 해결 해보려고요 ^^

* Etc

# 프로세스 호스팅 파일이 bin 폴더에 있어야하는 이유는?

vshost 파일이 개발하고자하는 StartUp 위치에 있어야하는 이유는 다음과 같습니다.
애플리케이션이 호스팅 프로세스 내에서 실행될 때, AppDomain 내의 최상위 실행 어셈블리는
해당 애플리케이션이 아닌 vshost 입니다.
만약 vshost 파일과 실행 어플리케이션과의 동일한 폴더에 존재하지 않을경우
환경구성 파일(config) ClickOnce, Side-by-Side maniffest등 모든 시나리오에서 올바르게 로드 될수 없습니다.


# 프로세스 호스팅 파일과 함께 배포해야 합니까?

아닙니다. " .vshost.exe" 및 ".vshost.exe.config"는 Visual Studio IDE 내에서만 사용됩니다. 이 프로세스는 직접 실행되어서는 안되며, 애플리케이션과 함께 배포해서도 안됩니다.

- Hosting Process (vshost.exe) : http://msdn.microsoft.com/en-us/library/ms185331(VS.80).aspx

 

# "vshost" 파일을 생성하지 않게 할수 있나요?

프로젝트 속성을 통해 이 기능을 해제 할수 있습니다.
1. Visual Studio에서 프로젝트를 엽니다.
2. 프로젝트 메뉴에서 속성을 선택합니다.
2. 디버그 탭을 클릭합니다
3. Visual Studio 호스팅 프로세스 사용 확인란의 선택을 취소합니다

호스팅 프로세스가 비활성화되면 몇 개의 디버깅 기능을 사용 할수 없거나 성능이 저하 됩니다.
이점을 유의하시길 바랍니다.
 


※참고 : 일반적으로 호스팅 프로세스가 비활성화되는 경우는 다음과 같습니다.

- .NET Framework 응용 프로그램 디버깅을 시작하는 데 필요한 시간이 증가하는 경우
- 디자인 타임에 식 계산을 사용할 수 없는 경우
- 부분 신뢰 디버깅을 사용할 수 없는 경우
 

포스팅을 마치며...


긴 포스팅 읽어주셔서 감사드리며 ^^
다음 포스팅에서는 C# 4.0 특징에 대해 포스팅을 해보겠습니다 ^^
좋은 하루 되세요 : )

정은성 드림