응용 프로그램 구성 파일에 <codeBase> 요소가 없을 경우 런타임에서는 다음 네 가지 기준을 사용하여 어셈블리를 조사합니다.
응용 프로그램 기본 디렉터리. 이것은 응용 프로그램이 실행되는 루트 위치입니다.
문화권. 이것은 참조된 어셈블리의 culture 특성입니다.
이름. 이것은 참조된 어셈블리의 이름입니다.
<probing> 요소의 privatePath 특성으로서, 루트 위치 아래의 하위 디렉터리에 대해 사용자가 정의한 목록입니다. 이 위치는 응용 프로그램 도메인의 AppendPrivatePath 속성을 사용하여 응용 프로그램 구성 파일과 관리 코드에서 지정할 수 있습니다. 관리 코드에 지정된 경우 관리 코드 privatePath가 먼저 조사된 후 응용 프로그램 구성 파일에 지정된 경로가 조사됩니다.
응용 프로그램 기본 디렉터리 및 문화권 디렉터리 조사
런타임은 컴퓨터에서 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
privatePath 특성을 사용하여 조사
문화권 하위 디렉터리와 참조된 어셈블리에 대해 명명된 하위 디렉터리 외에도 런타임은 <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
조사 예제
다음과 같은 정보가 있다고 가정합니다.
그러면, 런타임에서는 다음 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
같은 이름을 가진 여러 어셈블리
다음 예제에서는 같은 이름의 여러 어셈블리를 설정하는 방법을 보여 줍니다.
<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>조사되는 기타 위치
또한, 현재 바인딩 컨텍스트를 사용하여 어셈블리 위치를 결정할 수도 있습니다. 이것은 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를 쿼리합니다.