2013-09-05 7 views
0

내 .net exe가 실행되면 rumtime에 올바른 .net 어셈블리가로드됩니다. 발생하는 프로빙 프로세스가 있음을 이해합니다..net 참조 된 어셈블리 이름은 런타임시 clr에 의해 어떻게 해결됩니까?

내 질문은 내가 .net exe/dll을 ildasm에서 열면, 나는 .extern 참조 만 mscorlib.dll이 아니라 다른 것입니다.

그럼 clr이 .net 참조 된 어셈블리의 프로빙에 필요한 정보를 얻는 방법은 무엇입니까?

여기 예제 프로젝트와 이미지가 있습니다. enter image description here

enter image description here 는이 경우에, 나는 어느 곳 등 시스템, System.Xml.Linq, 질문 같은 .NET 어셈블리 참조를 참조 해달라고하지만, 분명히 그들은 CLR에 의해로드되고, 내가 할 내 퓨전 logviewer에서 그들을 참조하십시오.

.net 어셈블리에 필요한 데이터는 어디에 있습니까?

extern 어셈블리가 일부 핵심 .net dll 및 기타 외부 .net dll에 대한 매니페스트를 배치하는 방식이 약간 일치하지 않는 것으로 나타났습니다.

감사합니다.

+0

을 System.dll을 위해 볼 수 있었다. Question.exe에 대한 귀하의 재앙은 Questions.vshost.exe를위한 것입니다. 호스팅 프로세스 및 디버거 종속성을 포함합니다. Questions.exe를 VS 외부에서 실행하여 사과와 오렌지를 비교합니다. –

+0

나는 새로운 그림을 올렸다. –

+0

@ 존 : 힌트 : 충분히 신경 쓰면 ILDASM의 제목 표시 줄도 검게하고 싶을 것입니다. –

답변

0

나는 그것을 얻었습니다. 사실 나는 조금 혼란스러워했다. ILdasm이 보여주는 것이 맞습니다. 모든 정적으로 바인드 된 dll은 dll의 매니페스트에 저장됩니다.

mscorlib에 'System'네임 스페이스가 있기 때문에 시스템 참조가 표시되지 않는 이유는 무엇입니까? GAC의 Sysem.dll에는 나머지 네임 스페이스의 클래스가 있습니다. 그래서 System 네임 스페이스는 두 개의 dll로 나뉩니다. 가장 일반적으로 및 기초 것들 mscorelibrary.dll 및 System.dll을

사실 Visual Studio에서 나머지에있는 것입니다 사실이 아니다 참고로 항상 System.dll을 보여 오해의 소지가 조금 항상

내가 사용하는 경우

 var bvv = new System.Uri("http://www.google.com"); ------ System.Uri class is in System.dll 

    Console.WriteLine(bvv.AbsolutePath);--------------------- System.Console class is in mscorlib.dll 

내가 명확하게 참조 그냥 같은 EXE하지

enter image description here