단계 4: 코드베이스나 조사를 통해 어셈블리 찾기

호출하는 어셈블리의 참조와 구성 파일의 정보를 사용하여 올바른 어셈블리 버전을 확인하고 강력한 이름의 어셈블리의 경우에는 전역 어셈블리 캐시를 체크 인한 후에, 공용 언어 런타임은 어셈블리를 찾습니다. 어셈블리를 찾는 과정에는 다음 단계가 포함됩니다.

  1. 응용 프로그램 구성 파일에 <codeBase> 요소가 있을 경우 런타임은 지정한 위치를 확인합니다. 일치하는 것이 있으면 해당 어셈블리가 사용되고 검색은 더 이상 수행되지 않습니다. 거기에 어셈블리가 없으면 바인딩 요청이 실패합니다.

  2. 그런 다음, 런타임은 이 단원 후반에서 지정될 규칙을 사용하여 참조된 어셈블리를 조사합니다.

참고

같은 디렉터리에 여러 버전의 어셈블리가 있고 그 중에서 특정 버전을 참조하려는 경우 <probing> 요소의 privatePath 특성 대신 <codeBase> 요소를 사용해야 합니다.<probing> 요소를 사용할 경우, 참조되는 단순 어셈블리 이름에 일치하는 어셈블리를 런타임에서 처음 찾았으면 정확하게 일치하는지 여부에 관계없이 검색이 중지됩니다.정확하게 일치하면 해당 어셈블리가 사용됩니다.정확하게 일치하지 않으면 검색이 중지되고 바인딩이 실패합니다.

코드베이스를 통해 어셈블리 찾기

구성파일의 <codeBase> 요소를 사용하여 코드베이스 정보를 제공할 수 있습니다. 런타임에서 참조된 어셈블리를 조사하기 전에 항상 이 코드베이스를 확인합니다. 최종 버전 리디렉션이 포함된 게시자 정책 파일에도 <codeBase> 요소가 들어 있으면, 이 <codeBase> 요소가 사용됩니다. 예를 들어, 응용 프로그램 구성 파일이 <codeBase> 요소를 지정하고 응용 프로그램 정보를 재정의하는 게시자 정책 파일에서도 <codeBase> 요소를 지정하면, 게시자 정책 파일의 <codeBase> 요소가 사용됩니다.

<codeBase>요소에서 지정한 위치에 일치하는 항목이 없을 경우 바인드 요청은 실패하며 더 이상 다음 단계가 수행되지 않습니다. 런타임에서는 어셈블리가 호출하는 어셈블리의 기준과 일치한다는 것을 확인하면 해당 어셈블리를 사용합니다. 주어진 <codeBase> 요소에서 지정된 파일이 로드되면, 런타임은 해당 이름, 버전, 문화권 및 공개 키가 호출하는 어셈블리의 참조와 일치하는지 확인합니다.

참고

응용 프로그램의 루트 디렉터리 외부에 있는 참조된 어셈블리는 강력한 이름이 있어야 하며 전역 어셈블리 캐시에 설치되거나 <codeBase> 요소를 사용하여 지정되어야 합니다.

조사를 통해 어셈블리 찾기

응용 프로그램 구성 파일에 <codeBase> 요소가 없을 경우 런타임에서는 다음 네 가지 기준을 사용하여 어셈블리를 조사합니다.

  • 응용 프로그램 기본 디렉터리. 이것은 응용 프로그램이 실행되는 루트 위치입니다.

  • 문화권. 이것은 참조된 어셈블리의 culture 특성입니다.

  • 이름. 이것은 참조된 어셈블리의 이름입니다.

  • <probing> 요소의 privatePath 특성으로서, 루트 위치 아래의 하위 디렉터리에 대해 사용자가 정의한 목록입니다. 이 위치는 응용 프로그램 도메인의 AppendPrivatePath 속성을 사용하여 응용 프로그램 구성 파일과 관리 코드에서 지정할 수 있습니다. 관리 코드에 지정된 경우 관리 코드 privatePath가 먼저 조사된 후 응용 프로그램 구성 파일에 지정된 경로가 조사됩니다.

15hyw9x3.collapse_all(ko-kr,VS.110).gif응용 프로그램 기본 디렉터리 및 문화권 디렉터리 조사

런타임은 컴퓨터에서 URL이나 응용 프로그램의 루트 디렉터리가 될 수 있는 응용 프로그램의 기본 디렉터리에서 항상 조사를 시작합니다. 응용 프로그램 기본 디렉터리에 참조된 어셈블리가 없고 문화권 정보가 제공되지 않으면, 런타임은 어셈블리 이름을 사용하여 하위 디렉터리를 검색합니다. 조사되는 디렉터리는 다음과 같습니다.

   [application base] / [assembly name].dll

   [application base] / [assembly name] / [assembly name].dll

참조된 어셈블리에 문화권 정보가 지정되면, 다음 디렉터리만 조사됩니다.

   [application base] / [culture] / [assembly name].dll

   [application base] / [culture] / [assembly name] / [assembly name].dll

15hyw9x3.collapse_all(ko-kr,VS.110).gifprivatePath 특성을 사용하여 조사

문화권 하위 디렉터리와 참조된 어셈블리에 대해 명명된 하위 디렉터리 외에도 런타임은 <probing> 요소의 privatePath 특성을 사용하여 지정한 디렉터리를 조사합니다. privatePath 특성을 사용하여 지정한 디렉터리는 응용 프로그램 루트 디렉터리의 하위 디렉터리여야 합니다. 참조된 어셈블리 요청에 문화권 정보가 포함되는지 여부에 따라 조사되는 디렉터리가 다릅니다.

참조되는 단순 어셈블리 이름에 일치하는 어셈블리를 런타임에서 처음 찾았으면 정확하게 일치하는지 여부에 관계 없이 검색이 중지됩니다. 정확하게 일치하면 해당 어셈블리가 사용됩니다. 정확하게 일치하지 않으면 검색이 중지되고 바인딩이 실패합니다.

문화권이 포함된 경우 다음 디렉터리가 조사됩니다.

   [application base] / [binpath] / [culture] / [assembly name].dll

   [application base] / [binpath] / [culture] / [assembly name] / [assembly name].dll

문화권 정보가 포함되지 않은 경우 다음 디렉터리가 조사됩니다.

   [application base] / [binpath] / [assembly name].dll

   [application base] / [binpath] / [assembly name] / [assembly name].dll

15hyw9x3.collapse_all(ko-kr,VS.110).gif조사 예제

다음과 같은 정보가 있다고 가정합니다.

그러면, 런타임에서는 다음 URL을 조사합니다.

   http://www.code.microsoft.com/de/myAssembly.dll

   http://www.code.microsoft.com/de/myAssembly/myAssembly.dll

   http://www.code.microsoft.com/bin/de/myAssembly.dll

   http://www.code.microsoft.com/bin/de/myAssembly/myAssembly.dll

15hyw9x3.collapse_all(ko-kr,VS.110).gif같은 이름을 가진 여러 어셈블리

다음 예제에서는 같은 이름의 여러 어셈블리를 설정하는 방법을 보여 줍니다.

   <dependentAssembly>
      <assemblyIdentity name="Server" publicKeyToken="c0305c36380ba429" /> 
         <codeBase version="1.0.0.0" href="v1/Server.dll"/>
         <codeBase version="2.0.0.0" href="v2/Server.dll"/>
   </dependentAssembly>

15hyw9x3.collapse_all(ko-kr,VS.110).gif조사되는 기타 위치

또한, 현재 바인딩 컨텍스트를 사용하여 어셈블리 위치를 결정할 수도 있습니다. 이것은 Assembly.LoadFrom 메서드를 사용할 경우와 COM interop 시나리오에서 가장 자주 발생합니다. 어셈블리에서 LoadFrom 메서드를 사용하여 다른 어셈블리를 참조할 경우 호출 어셈블리의 위치로 참조된 어셈블리가 있는 위치를 알 수 있습니다. 일치하는 항목이 있으면 어셈블리가 로드됩니다. 일치하는 항목이 없으면 런타임은 검색 기능을 계속 수행한 다음 Windows Installer를 쿼리하여 어셈블리를 제공합니다. 바인딩 요청에 일치하는 어셈블리가 제공되지 않으면 예외가 throw됩니다. 형식을 참조한 경우 이 예외는 관리 코드의 TypeLoadException이고, 로드되는 어셈블리가 없는 경우 이 예외는 FileNotFoundException입니다.

예를 들어, Assembly1에서 Assembly2를 참조하고 Assembly1을 http://www.code.microsoft.com/utils에서 다운로드한 경우, 이 위치로 Assembly2.dll가 있는 위치를 알 수 있습니다. 그런 다음 런타임은 http://www.code.microsoft.com/utils/Assembly2.dll과 http://www.code.microsoft.com/utils/Assembly2/Assembly2.dll에서 어셈블리를 조사합니다. 이들 위치 어디에도 Assembly2가 없으면 런타임은 Windows Installer를 쿼리합니다.

참고 항목

기타 리소스

런타임에서 어셈블리를 찾는 방법

단계 1: 구성 파일 검토

단계 2: 이전에 참조된 어셈블리 확인

단계 3: 전역 어셈블리 캐시 확인

부분 어셈블리 참조