어셈블리 버전 리디렉션

업데이트: 2007년 11월

강력한 이름의 특정 버전 어셈블리에 대해 .NET Framework 응용 프로그램을 작성하는 경우, 응용 프로그램은 런타임에 이 버전의 어셈블리를 사용합니다. 하지만, 때로는 새 버전의 어셈블리에 대해 응용 프로그램을 실행하려고 할 수도 있습니다. 응용 프로그램 구성 파일, 시스템 구성 파일 또는 게시자 정책 파일에서는 특정 버전의 어셈블리를 다른 버전의 어셈블리로 리디렉션할 수 있습니다. 공용 언어 런타임에서 위의 세 파일을 사용하여 어셈블리 버전을 결정하는 방법에 대한 자세한 내용은 런타임에서 어셈블리를 찾는 방법을 참조하십시오. .NET Framework 구성 도구(Mscorcfg.msc)를 사용하면 어셈블리 버전을 응용 프로그램 수준과 시스템 수준에서 동시에 리디렉션할 수 있으며 구성 파일을 직접 편집할 수 있습니다.

참고:

강력한 이름이 아닌 어셈블리 버전은 리디렉션할 수 없습니다. 공용 언어 런타임은 강력한 이름이 아닌 어셈블리 버전은 무시합니다.

게시자 정책을 사용한 어셈블리 버전 리디렉션

어셈블리 공급업체는 응용 프로그램에서 새 버전의 어셈블리를 사용해야 한다고 규정할 수 있습니다. 이를 위해 공급업체는 업그레이드된 어셈블리를 게시자 정책 파일과 함께 제공합니다. 게시자 정책 파일은 전역 어셈블리 캐시에 존재하며 이 파일에는 어셈블리 리디렉션 설정이 들어 있습니다.

major.minor 버전의 각 어셈블리에는 고유의 게시자 정책 파일이 있습니다. 예를 들어, 버전 1.1.2.222에서 버전 1.1.3.000으로 리디렉션하거나 버전 1.1.2.321에서 버전 1.1.3.000으로 리디렉션하는 경우 모두 동일한 파일로 이동됩니다. 하지만 버전 2.0.0.999에서 3.0.0.000으로 리디렉션하는 경우는 다른 파일로 이동됩니다.

게시자 정책 파일이 존재하는 경우, 런타임에서는 어셈블리 매니페스트와 응용 프로그램 구성 파일을 검사한 후 이 파일을 검사합니다. 공급업체는 새 어셈블리와 리디렉션될 어셈블리가 호환되는 경우에만 게시자 정책을 사용해야 합니다.

응용 프로그램 구성 파일에서 설정을 지정하면 게시자 정책을 무시할 수 있습니다.

게시자 정책 무시

이전과 호환되는 새 버전의 어셈블리를 사용해도 응용 프로그램이 중단될 수 있습니다. 이 경우 응용 프로그램 구성 파일에서 다음과 같은 설정을 사용하면 런타임에서 게시자 정책을 무시할 수 있습니다.

<publisherPolicy apply="no" />

게시자 정책을 무시하면 응용 프로그램을 계속해서 실행할 수 있지만, 문제점을 어셈블리 공급업체에 반드시 보고해야 합니다. 게시자 정책이 어셈블리에 존재하는 경우, 공급업체는 이 어셈블리가 이전 버전과 호환이 되는지 그리고 새 버전의 어셈블리도 사용할 수 있는지 확인해야 합니다.

응용 프로그램 수준에서 어셈블리 버전 리디렉션

어셈블리 공급업체가 사용자 응용 프로그램에서 사용될 새 버전의 어셈블리를 릴리스 하지만, 새 버전의 어셈블리가 원래 버전의 어셈블리와 호환되는지를 보증하지 않으려고 게시자 정책 파일은 제공하지 않는 경우를 가정해 봅니다. 이때는 사용자 응용 프로그램에서 새 버전의 어셈블리를 사용한다고 지정할 수 있는데, 이를 위해 어셈블리 바인딩 정보를 응용 프로그램 구성 파일에 포함시킵니다.

시스템 수준에서 어셈블리 버전 리디렉션

시스템 관리자가 시스템 상의 모든 응용 프로그램에서 특정 버전의 어셈블리를 사용하려는 경우가 가끔씩 있습니다. 예를 들어, 보안 상의 허점을 수정하기 위해 모든 응용 프로그램에서 특정 버전의 어셈블리를 사용하려고 할 수 있습니다. 시스템 구성 파일에서 어셈블리가 리디렉션되면, 이전 버전을 사용하는 모든 응용 프로그램은 새 버전을 사용할 것입니다. 시스템 구성 파일은 응용 프로그램 구성 파일 및 게시자 정책 파일보다 우선합니다.

구성 파일에 어셈블리 바인딩 지정

응용 프로그램 구성 파일, 시스템 구성 파일 및 게시자 정책 파일에서는 동일한 XML 스키마를 사용하여 어셈블리 리디렉션을 처리합니다.

어셈블리 바인딩

어셈블리 정보를 지정하려면 각 어셈블리 정보를 <dependentAssembly> 요소 내에 저장합니다. <assemblyIdentity> 요소에는 어셈블리를 식별하는 정보가 들어 있습니다. 구성 파일에는 둘 이상의 <dependentAssembly> 요소가 존재할 수 있지만, 각 <dependentAssembly> 요소에는 오직 단 하나의 <assemblyIdentity> 요소가 존재해야 합니다.

어셈블리를 바인딩하려면 <assemblyBinding> 태그에서 xmlns 특성을 사용하여 "urn:schemas-microsoft-com:asm.v1" 문자열을 지정해야 합니다.

게시자 정책 지정

런타임에서 특정 어셈블리의 게시자 정책을 무시하려면 <publisherPolicy> 요소를 <dependentAssembly> 요소에 포함시킵니다. 런타임에서 응용 프로그램에서 사용되는 모든 어셈블리의 게시자 정책을 무시하려면 이 설정을 <assemblyBinding> 요소에 포함시킵니다. 또한 .NET Framework 구성 도구(Mscorcfg.msc)를 사용하여 게시자 정책을 무시할 수도 있습니다.

apply 특성의 기본값은 yes입니다. apply 특성을 no로 설정하면 이전의 모든 yes 설정이 재정의됩니다. 예를 들어, 응용 프로그램 수준에서 apply 특성을 no로 설정하는 경우, 비록 그 값이 yes로 선언되더라도 어셈블리와 관련된 모든 apply 설정이 무시됩니다. 따라서 기본값이 바뀌어서, no 설정은 유일한 유효 상태가 됩니다.

어셈블리 버전 리디렉션

특정 버전을 다른 버전으로 리디렉션하려면 <bindingRedirect> 요소를 사용합니다. oldVersion 특성에서는 단일 버전 또는 여러 개의 버전을 지정할 수 있습니다. 예를 들어, <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/>은 런타임에서 버전 1.1.0.0과 1.2.0.0 사이의 어셈블리를 사용하는 대신 버전 2.0.0.0의 어셈블리를 사용하도록 지정합니다.

예제

다음 예제는 특정 버전의 myAssembly를 다른 버전으로 리디렉션하고 mySecondAssembly의 게시자 정책을 해제하는 방법을 나타냅니다.

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="myAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          culture="en-us" />
        <!-- Assembly versions can be redirected in application, 
          publisher policy, or machine configuration files. -->
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
      <assemblyIdentity name="mySecondAssembly"
        publicKeyToken="32ab4ba45e0a69a1"
        culture="en-us" />
        <!-- Publisher policy can be set only in the application 
          configuration file. -->
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

.NET Framework 어셈블리 바인딩 리디렉션

응용 프로그램 구성 파일에 있는 <assemblyBinding> 요소에 대한 appliesTo 특성을 사용하여 어셈블리 바인딩 참조를 .NET Framework의 특정 버전에 리디렉션할 수 있습니다. 이 선택적 특성은 .NET Framework 버전 번호를 사용하여 해당 특성이 적용되는 버전을 나타냅니다. appliesTo 특성이 지정되지 않으면 <assemblyBinding> 요소는 .NET Framework의 모든 버전에 적용됩니다.

appliesTo 특성은 .NET Framework 버전 1.1에서부터 사용되므로 버전 1.0에서는 무시됩니다. 즉, .NET Framework 버전 1.0을 사용할 때는 appliesTo 특성을 지정해도 모든 <assemblyBinding> 요소가 적용됩니다.

예를 들어, .NET Framework 1.0 어셈블리 Regcode에 대한 어셈블리 바인딩을 리디렉션하려면 응용 프로그램 구성 파일에 다음 XML 코드를 포함시켜야 합니다.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" 
    appliesTo="v1.0.3705">
    <dependentAssembly> 
      <!-- assembly information goes here -->
    </dependentAssembly>
  </assemblyBinding>
</runtime>

<assemblyBinding> 요소는 순서를 구분합니다. 따라서 모든 .NET Framework 1.0 어셈블리에 대한 어셈블리 바인딩 리디렉션 정보를 먼저 입력한 다음 모든 .NET Framework 1.1 어셈블리에 대한 어셈블리 바인딩 리디렉션 정보를 입력해야 합니다. 마지막으로, appliesTo 특성을 사용하지 않으므로 모든 버전의 .NET Framework에 적용되는 .NET Framework 어셈블리 리디렉션에 대한 어셈블리 바인딩 리디렉션 정보를 입력합니다. 리디렉션 충돌이 발생하면 구성 파일에서 첫 번째로 일치하는 리디렉션 문이 사용됩니다.

예를 들어, 하나의 참조를 .NET Framework 버전 1.0 어셈블리로 리디렉션하고, 다른 참조를 .NET Framework 버전 1.1 어셈블리로 리디렉션하려면 다음의 의사 코드에 표시된 패턴을 사용할 수 있습니다.

<assemblyBinding xmlns="..." appliesTo="v1.0.3705"> 
  <!—.NET Framework version 1.0 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..." appliesTo="v1.1.5000"> 
  <!—.NET Framework version 1.1 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..."> 
  <!-- redirects meant for all versions of the runtime --> 
</assemblyBinding>

참고 항목

작업

방법: 게시자 정책 만들기

개념

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

참조

런타임 설정 스키마

기타 리소스

공용 언어 런타임의 어셈블리

어셈블리를 사용한 프로그래밍

구성 파일

응용 프로그램 구성

.NET Framework의 구성 파일 스키마