기술적으로 DLL에는 네임 스페이스가 없습니다.
CLR 수준에서는 이름 공간이 전혀없고 전체 클래스 이름 만 있습니다. CLR 클래스 이름은 임의로 긴 유니 코드 문자 시퀀스로 구성 될 수 있습니다. @#$%
은 CLR과 관련하여 완벽하게 훌륭한 클래스 이름입니다.
이제, 컨벤션 (CLS, 구체적으로하는)에 의해 는, 클래스 이름이 특정 유니 코드 문자로 제한됩니다 (영숫자 및 _
, 그리고 다른 이국적인 유니 코드 범주의 무리 - 추가 정보를 원하시면 사양 참조) 점, 점은 네임 스페이스를 나타내는 데 사용됩니다. 이것은 컴파일러 (및 기타 도구) 사이의 관례입니다.
따라서 어셈블리가 어떤 이유로 든 일부 형식을 참조 할 때마다 System.String
과 같은 전체 CLR 이름을 사용하기 만합니다. 그러나 실제로는 어셈블리가 포함 된 완전한 이름을 사용합니다.ildasm
출력을 보면 그 값을 볼 수 있습니다. [mscorlib]System.String
과 비슷하게 보이므로 런타임에서 어디를 볼 수 있는지 알 수 있습니다.
다른 말로하면 CLR은 System.String
클래스의 어셈블리 mscorlib.dll과이 클래스를 참조하는 어셈블리 B.exe가 [mscorlib]System.String
인 것을 확인합니다. using
문은 출력 DLL/EXE에 코드를 생성하지 않습니다. 그게 바로 당신이 항상 System.String
을 쓸 필요가 없기 때문입니다.
이 [mscorlib]System.String
에, mscorlib.dll
를 참조하는 프로젝트에서는, using System;
문의 범위에 String
말하는 코드를 변환하는 컴파일러의 일이다. 그것은 모두 컴파일시에 완료됩니다. 런타임에 CLR이 수행하는 유일한 작업은 mscorlib
을 확인하여 실제 mscorlib.dll을 디스크에 저장하는 것입니다 (다른 대답은 어떻게 발생하는지 정확하게 설명합니다).
재미 있겠지만 "Windows SDK 도구> 퓨전 로그 뷰어"를 시작했을 때 모든 버튼이 해당 창에서 비활성화되었습니다. 설정 대화 상자에서도 모든 기능이 비활성화됩니다. – claws
UAC가 활성화 된 상태에서 Vista 또는 Windows 7을 사용하는 경우 퓨전 로깅 설정을 변경하려면 관리자 권한이 필요하므로 승격 된 명령 프롬프트에서 실행해야합니다. – Josh
"엄지 손가락의 규칙은 먼저 전역 어셈블리 캐시를 시도한 다음 다른 대체 경로와 함께 로컬 디렉토리를 확인하는 것입니다." ".NET MYSQL CONNECTOR"(MySql.Data 사용)를 설치 한 경우 컴파일 타임에 참조를 사용하여 dll을 탐지하지만 경로는 c : \ programfiles \ mysql \ .net \ mysql.dll과 같을 것입니다. 그러나 응용 프로그램이 빌드 된 후 다른 일부가이를 사용하고 있습니다. 내 모든 응용 프로그램은 mysql.dll이 아니라 usermachine에 있습니다.net 커넥터는 d : \ apps \ somecrap \ mysql.dll에 설치 될 수 있습니다. 그러면 어떻게 발견 할 수 있겠습니까? – claws