부분 어셈블리 참조

전체 어셈블리 참조에는 어셈블리의 텍스트 이름, 버전, culture 및 공개 키 토큰(어셈블리 이름이 강력한 이름인 경우)이 포함됩니다. CLR(공용 언어 런타임)의 일부인 어셈블리 또는 전역 어셈블리 캐시에 있는 어셈블리를 참조하는 경우 전체 어셈블리 이름이 필요합니다. 어셈블리 이름만을 지정하는 경우와 같이 부분 정보만 제공하여 어셈블리를 동적으로 참조할 수도 있습니다.

다음과 같은 여러 가지 버전 관리 문제가 발생할 수 있으므로 부분 어셈블리 참조는 사용하지 않는 것이 좋습니다.

  • 어셈블리 버전이 이전 버전과 호환되지 않을 수 있습니다. 예를 들어, 코드가 어셈블리 버전 1.6에서 작동하지만 부분 어셈블리 참조로 인해 호환되지 않는 변경 내용이 있는 최신 버전을 가져올 수 있습니다.

  • 어셈블리 버전이 이후 버전과 호환되지 않을 수 있습니다. 예를 들어, 코드가 어셈블리 버전 1.6에서 작동하지만 부분 어셈블리 참조로 인해 필요한 코드가 없는 이전 버전을 가져올 수 있습니다.

  • 새 버전이 호환되지 않는 경우 새 버전의 어셈블리를 설치하는 응용 프로그램으로 인해 부분 어셈블리 참조를 사용하여 어셈블리를 로드하는 응용 프로그램이 중단될 수 있습니다.

버전 관리 문제가 발생할 가능성이 매우 크기 때문에 .NET Framework 버전 2.0에서는 LoadWithPartialName 메서드가 사용되지 않는 것으로 표시됩니다.

부분 어셈블리 참조 만들기

다음 방법 중 하나를 사용해서 코드에서 어셈블리에 대한 부분 참조를 만들 수 있습니다.

  • System.Reflection.Assembly.Load등의 메서드를 사용하여 부분 참조만 지정합니다. 런타임은 응용 프로그램 디렉터리에서 어셈블리를 확인합니다.

  • System.Reflection.Assembly.LoadWithPartialName메서드를 사용하여 부분 참조만 지정합니다. 런타임은 응용 프로그램 디렉터리 및 전역 어셈블리 캐시에서 어셈블리를 확인합니다.

참고참고

LoadWithPartialName 메서드는 .NET Framework 버전 2.0에서 사용되지 않습니다.

LoadWithPartialName 메서드를 사용하면 바인딩 프로세스가 쉽게 변할 수 있습니다. 예를 들어, 강력한 이름을 가진 어셈블리에 대한 바인딩을 요청하면서 참조에 공개 키를 포함하지 않은 경우, 예상한 게시자에서 바인딩한 어셈블리를 가져온다고 보장할 수 없습니다. 또한, 공개 키 토큰을 포함하지 않는 참조는 버전 정책을 따르지 않기 때문에 응용 프로그램과 컴퓨터 구성 파일은 확인되지 않습니다. 최신 버전의 어셈블리를 선택하려는 경우 부분 참조에서는 시나리오에서 가장 적합한 LoadWithPartialName 메서드 작업을 사용합니다.

  • Use a method such as System.Reflection.Assembly.Load와 같은 메서드를 사용하여 부분 참조만 제공한 다음 응용 프로그램 구성 파일에 전체 참조 정보를 제공합니다.

LoadWithPartialName 메서드를 사용하는 부분 참조

참고참고

LoadWithPartialName 메서드는 .NET Framework 버전 2.0에서 사용되지 않습니다.

LoadWithPartialName 메서드 호출에는 최소한 어셈블리의 텍스트 이름이 포함되어야 하며 공개 키 토큰, 버전 또는 culture가 포함될 수도 있습니다. 부분 참조만을 예상하는 메서드를 사용하기 때문에 전체 참조 정보(이름, 버전 및 공개 키 토큰(있는 경우))를 제공하지 않아도 됩니다.

LoadWithPartialName 메서드를 사용하여 어셈블리를 부분 참조하면 런타임은 특정 규칙을 사용하여 참조된 어셈블리를 찾습니다. 다음 규칙들을 사용합니다.

  1. 런타임은<qualifyAssembly>요소의 참조에 대해 한정하는 정보가 있는지 응용 프로그램 구성 파일을 확인합니다. 유효한 항목이 발견되면 전체 참조와 마찬가지로 바인딩이 진행됩니다.

  2. 그런 다음 런타임은 지정된 어셈블리 텍스트 이름과 일치하는 어셈블리가 있는지 응용 프로그램 디렉터리를 검색합니다. 일치하는 어셈블리가 있으면 런타임은 이 어셈블리를 사용합니다.

  3. 응용 프로그램 디렉터리에 일치하는 어셈블리가 없으면 런타임은 전역 어셈블리 캐시에서 어셈블리를 확인합니다. 공개 키 토큰, 버전 또는 culture가 부분 참조에서 지정되면 런타임은 해당 값과 정확하게 일치하는 어셈블리를 찾습니다. 버전이 지정되지 않았으면 런타임은 지정된 다른 조건이 일치하는 버전 번호가 가장 높은 어셈블리를 찾습니다. culture나 공개 키 토큰이 지정되지 않았을 경우의 런타임 동작은 정의되지 않았습니다.

    예를 들어, Assembly.LoadWithPartialName("math, Version 5.0.0.0") 호출이 발생했을 때 전역 어셈블리 캐시의 내용이 아래와 같다고 가정합니다.

    math,version=5.0.0.0,publicKeyToken=11111111,culture=de
    math,version=5.0.0.0,publicKeyToken=22222222,culture=en
    

    호출 결과는 정의되지 않았습니다. 런타임은 처음 발견한 어셈블리를 선택합니다.

    또 다른 예제로 Assembly.LoadWithPartialName("math") 호출이 발생하고 전역 어셈블리 캐시의 내용이 아래와 같다고 가정합니다.

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    호출 결과, 버전이 6.0.0.0인 math 어셈블리에 바인딩됩니다.

    마지막 예제에서는 Assembly.LoadWithPartialName("math,publicKeyToken=11111111") 호출이 발생하고 전역 어셈블리 캐시의 내용이 다음과 같다고 가정합니다.

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    호출 결과, 버전이 5.0.0.0인 math 어셈블리에 바인딩됩니다.

한정하는 정보가 있는 부분 참조

System.Reflection.Assembly.Load와 같은 메서드를 사용하여 동적 참조를 만들어 부분 참조만을 제공할 수 있으며 응용 프로그램 구성파일에서 <qualifyAssembly> 요소를 사용하여 참조를 한정합니다. 이 요소를 사용하면 전체 참조 정보(이름, 버전, culture 및 공개 키 토큰(있는 경우))를 코드가 아닌 응용 프로그램 구성 파일에서 제공할 수 있습니다.

참고참고

이 형식의 부분 참조는 여러 응용 프로그램이 공유하는 어셈블리에서는 사용할 수 없습니다.구성 설정은 어셈블리 단위가 아니라 응용 프로그램 단위로 적용되므로, 이 형식의 부분 참조 형식을 사용하는 공유 어셈블리는 공유 어셈블리를 사용하는 각 응용 프로그램에서 한정 정보를 구성 파일 내에 포함할 것을 요구합니다.

참고 항목

개념

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

단계 1: 구성 파일 검토

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

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

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