단계 1: 구성 파일 검토

다음과 같은 세 가지 XML 파일을 기반으로 다른 수준에서 어셈블리 바인딩 동작을 구성할 수 있습니다.

  • 응용 프로그램 구성 파일

  • 게시자 정책 파일

  • 시스템 구성 파일

이 파일들은 같은 구문을 사용하며 특정 어셈블리의 바인딩 모드, 코드 위치 및 바인딩 리디렉션 같은 정보를 제공합니다. 각 구성 파일에는 바인딩 프로세스를 리디렉션하는<assemblyBinding> 요소 가 포함될 수 있습니다. <assemblyBinding> 요소 의 자식 요소에는 <dependentAssembly> 요소가 포함됩니다. <dependentAssembly> 요소 의 자식 요소에는 <assemblyIdentity> 요소, <bindingRedirect> 요소, 및 <codeBase> 요소가 포합됩니다.

참고

세 구성 파일에 구성 정보가 있을 수 있습니다. 그러나 모든 구성 파일에 모든 요소가 있는 것은 아닙니다.예를 들어, 바인딩 모드와 전용 경로 정보는 응용 프로그램 구성 파일에만 있을 수 있습니다.각 파일에 포함된 정보의 전체 목록을 보려면 응용 프로그램 구성을 참조하십시오.

응용 프로그램 구성 파일

먼저, 공용 언어 런타임에서는 응용 프로그램 구성 파일을 검사하여 호출하는 어셈블리 매니페스트에 저장된 버전 정보를 재정의하는 정보를 확인합니다. 응용 프로그램 구성 파일은 응용 프로그램과 함께 배포될 수 있지만, 응용 프로그램을 실행하는 데 필요하지는 않습니다. 일반적으로 이 파일의 검색은 대부분 인스턴스화되어 있습니다. 그러나 Internet Explorer 웹 기반 시나리오에서처럼 응용 프로그램 기본 디렉터리가 원격 컴퓨터에 있는 경우에는 구성 파일을 다운로드해야 합니다.

클라이언트 실행 파일의 경우, 응용 프로그램 구성 파일은 응용 프로그램의 실행 파일과 같은 디렉터리에 위치하며, 실행 파일의 기본 이름과 같고 .config 확장명을 갖고 있습니다. 예를 들어, C:\Program Files\Myapp\Myapp.exe의 구성 파일은 C:\Program Files\Myapp\Myapp.exe.config입니다. 브라우저 기반 시나리오에서 HTML 파일은 <link> 요소를 사용하여 구성 파일을 명시적으로 가리켜야 합니다.

다음 코드에서는 응용 프로그램 구성 파일의 간단한 예제를 제공합니다. 이 예제에서는 Listeners 컬렉션에 TextWriterTraceListener를 추가하여 디버그 정보를 파일에 기록합니다.

<configuration>
   <system.diagnostics>
      <trace useGlobalLock="false" autoflush="true" indentsize="0">
         <listeners>
            <add name="myListener" type="System.Diagnostics.TextWriterTraceListener, system version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
         </listeners>
      </trace>
   </system.diagnostics>
</configuration>

게시자 정책 파일

두 번째로 런타임에서는 게시자 정책 파일(있는 경우)을 검사합니다. 구성 요소 게시자는 게시자 정책 파일을 공유 구성 요소에 대한 문제 해결 또는 업데이트로 배포합니다. 이 파일에는 공유 구성 요소의 게시자가 발행한 호환성 정보가 들어 있으며, 이 정보로 어셈블리 참조는 새 버전과 호환될 수 있습니다. 응용 프로그램 및 시스템 구성 파일과는 달리 게시자 정책 파일은 전역 어셈블리 캐시에 설치해야 할 자신의 어셈블리에 포함되어 있습니다.

다음은 게시자 정책 구성 파일의 예제입니다.

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

            <dependentAssembly>
                <assemblyIdentity name="asm6" publicKeyToken="c0305c36380ba429" /> 
                <bindingRedirect oldVersion="3.0.0.0" newVersion="2.0.0.0"/>  
            </dependentAssembly>

        </assemblyBinding>
    </runtime>
</configuration>

어셈블리를 만들려면 다음과 같은 명령을 통해 Al.exe(어셈블리 링커) 도구를 사용합니다.

Al.exe /link:asm6.exe.config /out:policy.3.0.asm6.dll /keyfile: compatkey.dat /v:3.0.0.0

compatkey.dat는 강력한 이름 키 파일입니다. 이 명령은 전역 어셈블리 캐시에 배치할 수 있는 강력한 이름 어셈블리를 만듭니다.

참고

게시자 정책은 공유 구성 요소를 사용하는 모든 응용 프로그램에 영향을 미칩니다.

게시자 정책 구성 파일은 응용 프로그램, 즉 어셈블리 매니페스트나 응용 프로그램 구성 파일의 버전 정보를 재정의합니다. 어셈블리 구성 파일에 어셈블리 매니페스트에 지정된 버전을 리디렉션하는 문이 없을 경우 게시자 정책 파일은 어셈블리 매니페스트에 지정된 버전을 재정의합니다. 그러나 응용 프로그램 구성 파일에 리디렉션 문이 있으면 게시자 정책은 매니페스트에 지정된 버전이 아니라 해당 버전을 재정의합니다.

해당 구성 요소를 사용하는 모든 응용 프로그램에서 공유 구성 요소를 업데이트하고 새로운 버전의 공유 구성 요소를 선택해야 할 경우 게시자 정책 파일을 사용합니다. 응용 프로그램 구성 파일이 안전 모드를 실행하지 않을 경우 게시자 정책 파일의 설정이 응용 프로그램 구성 파일의 설정을 재정의합니다.

8f6988ab.collapse_all(ko-kr,VS.110).gif안전 모드

대개 게시자 정책 파일은 서비스 팩이나 프로그램 업데이트의 일부로 명시적으로 설치됩니다. 업그레이드된 공유 구성 요소에 문제가 있을 경우 안전 모드를 사용하여 게시자 정책 파일의 재정의를 무시할 수 있습니다. 안전 모드는 <publisherPolicy apply="yes에 의해 결정됩니다. |no"/> 요소는 응용 프로그램 구성 파일에만 위치합니다. 이 모드를 사용하여 게시자 정책 구성 정보를 바인딩 과정에서 제거할지 여부를 지정할 수 있습니다.

전체 응용 프로그램이나 선택한 어셈블리에 대해 안전 모드를 설정할 수 있습니다. 즉, 응용 프로그램을 구성하는 모든 어셈블리에 대해 정책을 해제하거나, 일부 어셈블리에 대해서만 정책을 설정할 수 있습니다. 응용 프로그램을 구성하는 어셈블리에 게시자 정책을 선택적으로 적용하려면, <publisherPolicy apply=no/> 를 지정하고 <dependentAssembly> 요소를 사용하여 정책을 적용하려는 어셈블리를 지정합니다. 응용 프로그램을 구성하는 모든 어셈블리에 게시자 정책을 적용하려면, 종속 어셈블리 요소 없이**<publisherPolicy apply=no/>** 를 설정합니다. 구성에 대한 자세한 내용은 구성 파일을 참조하십시오.

컴퓨터 구성 파일

세 번째로 런타임에서는 컴퓨터 구성 파일을 검사합니다. Machine.config라고 하는 이 파일은 런타임이 설치된 루트 디렉터리의 Config 하위 디렉터리에 있는 로컬 컴퓨터에 상주합니다. 관리자는 이 파일을 사용하여 해당 컴퓨터에 있는 어셈블리 바인딩 제한 사항을 지정할 수 있습니다. 컴퓨터 구성 파일의 설정은 다른 모든 구성 설정보다 우선합니다. 그러나 이것은 모든 구성 설정을 이 파일에 포함시켜야 함을 의미하는 것은 아닙니다. 관리자 정책 파일에서 결정하는 버전이 최종 버전이며 재정의할 수 없습니다. Machine.config 파일에 지정된 재정의 내용은 모든 응용 프로그램에 영향을 미칩니다. 구성 파일에 대한 자세한 내용은 구성 파일을 참조하십시오.

참고 항목

기타 리소스

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

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

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

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

부분 어셈블리 참조