다음을 통해 공유


어셈블리 섀도우 복사

비고

이 문서는 .NET Framework에만 적용됩니다. .NET 6 이상 버전을 포함하여 .NET의 최신 구현에는 적용되지 않습니다.

섀도 복사를 사용하면 애플리케이션 도메인을 언로드하지 않고 애플리케이션 도메인에서 사용되는 어셈블리를 업데이트할 수 있습니다. 이는 ASP.NET 사이트와 같이 지속적으로 사용할 수 있어야 하는 애플리케이션에 특히 유용합니다.

중요합니다

Windows 8.x 스토어 앱에서는 섀도 복사가 지원되지 않습니다.

공용 언어 런타임은 어셈블리가 로드될 때 어셈블리 파일을 잠그므로 어셈블리가 언로드될 때까지 파일을 업데이트할 수 없습니다. 애플리케이션 도메인에서 어셈블리를 언로드하는 유일한 방법은 애플리케이션 도메인을 언로드하는 것이므로 일반적인 상황에서는 사용 중인 모든 애플리케이션 도메인이 언로드될 때까지 디스크에서 어셈블리를 업데이트할 수 없습니다.

애플리케이션 도메인이 섀도 복사본 파일을 구성하면 애플리케이션 경로의 어셈블리가 다른 위치로 복사되고 해당 위치에서 로드됩니다. 복사본이 잠겨 있지만 원래 어셈블리 파일의 잠금이 해제되어 업데이트할 수 있습니다.

중요합니다

섀도 복사할 수 있는 유일한 어셈블리는 애플리케이션 디렉터리 또는 해당 하위 디렉터리에 저장된 어셈블리이며, 애플리케이션 도메인이 구성될 때 ApplicationBasePrivateBinPath 속성으로 지정됩니다. 전역 어셈블리 캐시에 저장된 어셈블리는 쉐도우 복사되지 않습니다.

이 문서에는 다음과 같은 섹션이 포함되어 있습니다.

  • 섀도 복사 활성화 및 사용은 섀도 복사의 기본 사용 방법과 사용할 수 있는 옵션을 설명합니다.

  • 시작 성능은 .NET Framework 4에서 시작 성능을 개선하기 위해 섀도 복사에 적용된 변경 사항과 이전 버전의 동작으로 되돌리는 방법을 설명합니다.

  • 사용되지 않는 메서드는 .NET Framework 2.0에서 섀도 복사를 제어하는 속성 및 메서드의 변경 내용을 설명합니다.

섀도 복사 기능 활성화 및 사용

다음과 같이 클래스의 AppDomainSetup 속성을 사용하여 섀도 복사를 위한 애플리케이션 도메인을 구성할 수 있습니다.

  • ShadowCopyFiles 속성을 문자열 값 "true"으로 설정하여 섀도 복사를 활성화하세요.

    기본적으로 이 설정을 사용하면 애플리케이션 경로의 모든 어셈블리가 로드되기 전에 다운로드 캐시에 복사됩니다. 다른 컴퓨터에서 다운로드한 파일을 저장하기 위해 공용 언어 런타임에서 유지 관리하는 것과 동일한 캐시이며, 공용 언어 런타임은 더 이상 필요하지 않은 경우 파일을 자동으로 삭제합니다.

  • 필요에 따라 CachePath 속성과 ApplicationName 속성을 사용하여 섀도 복사된 파일의 사용자 지정 위치를 설정할 수 있습니다.

    위치에 대한 기본 경로는 ApplicationName 속성을 CachePath 속성에 하위 디렉터리로 연결하여 형성됩니다. 어셈블리는 기본 경로 자체가 아니라 이 경로의 하위 디렉터리에 섀도 복사됩니다.

    비고

    ApplicationName 속성을 설정하지 않으면 속성이 CachePath 무시되고 다운로드 캐시가 사용됩니다. 예외가 던져지지 않습니다.

    사용자 지정 위치를 지정하는 경우 더 이상 필요하지 않은 경우 디렉터리 및 복사된 파일을 정리해야 합니다. 자동으로 삭제되지 않습니다.

    섀도 복사 파일의 사용자 지정 위치를 설정해야 하는 몇 가지 이유가 있습니다. 애플리케이션에서 많은 수의 복사본을 생성하는 경우 섀도 복사된 파일에 대한 사용자 지정 위치를 설정할 수 있습니다. 다운로드 캐시는 수명이 아닌 크기로 제한되므로 공용 언어 런타임에서 여전히 사용 중인 파일을 삭제하려고 시도할 수 있습니다. 사용자 지정 위치를 설정하는 또 다른 이유는 애플리케이션을 실행하는 사용자가 공용 언어 런타임이 다운로드 캐시에 사용하는 디렉터리 위치에 대한 쓰기 액세스 권한이 없는 경우입니다.

  • 선택적으로 ShadowCopyDirectories 속성을 사용하여 섀도 복사되는 어셈블리를 제한할 수 있습니다.

    애플리케이션 도메인에 대해 섀도 복사를 사용하도록 설정하는 경우 기본값은 애플리케이션 경로의 모든 어셈블리( 즉, 및 ApplicationBase 속성에 지정된 PrivateBinPath 디렉터리)를 복사하는 것입니다. 선택한 디렉터리로 복사를 제한하려면, 섀도 복사를 만들려는 디렉터리만 포함하는 문자열을 생성하고, 그 문자열을 ShadowCopyDirectories 속성에 할당할 수 있습니다. 디렉터리를 세미콜론으로 구분합니다. 섀도 복사되는 어셈블리는 선택한 디렉터리에 있는 어셈블리뿐입니다.

    비고

    속성에 ShadowCopyDirectories 문자열을 할당하지 않거나 이 속성을 null설정하면 해당 및 ApplicationBase 속성에 지정된 PrivateBinPath 디렉터리의 모든 어셈블리가 섀도 복사됩니다.

    중요합니다

    세미콜론은 구분 기호 문자이므로 디렉터리 경로에 세미콜론이 포함되어서는 안 됩니다. 세미콜론에는 이스케이프 문자가 없습니다.

시작 성능

섀도 복사를 사용하는 애플리케이션 도메인이 시작되면 애플리케이션 디렉터리의 어셈블리가 섀도 복사본 디렉터리에 복사되거나 해당 위치에 이미 있는지 확인하는 동안 지연이 발생합니다. .NET Framework 4 이전에는 모든 어셈블리가 임시 디렉터리에 복사되었습니다. 어셈블리 이름을 확인하기 위해 각 어셈블리가 열렸고 강력한 이름의 유효성이 검사되었습니다. 각 어셈블리가 섀도 복사본 디렉터리에 있는 복사본보다 더 최근에 업데이트되었는지를 확인했습니다. 그렇다면 그림자 복사본 디렉터리에 복사되었습니다. 마지막으로 임시 복사본이 삭제되었습니다.

.NET Framework 4부터 기본 시작 동작은 애플리케이션 디렉터리에 있는 각 어셈블리의 파일 날짜 및 시간을 섀도 복사본 디렉터리에 있는 복사본의 파일 날짜 및 시간과 직접 비교하는 것입니다. 어셈블리가 업데이트된 경우 이전 버전의 .NET Framework와 동일한 절차를 사용하여 복사됩니다. 그렇지 않으면 섀도 복사본 디렉터리의 복사본이 로드됩니다.

결과적으로 성능 향상은 어셈블리가 자주 변경되지 않고 일반적으로 작은 어셈블리 하위 집합에서 변경이 발생하는 애플리케이션의 경우 가장 큽니다. 애플리케이션에서 대부분의 어셈블리가 자주 변경되면 새 기본 동작으로 인해 성능이 저하될 수 있습니다. 를 사용하여 구성 파일에 요소를 추가하여 <shadowCopyVerifyByTimestamp> 이전 버전의 .NET Framework의 시작 동작을 복원할 수 있습니다enabled="false".

사용되지 않는 메서드

클래스에는 AppDomain 애플리케이션 도메인에서 섀도 복사를 제어하는 데 사용할 수 있는 여러 메서드(예: SetShadowCopyFilesClearShadowCopyPath및)가 있지만 .NET Framework 버전 2.0에서는 사용되지 않는 것으로 표시됩니다. 섀도 복사를 위해 애플리케이션 도메인을 구성하는 권장 방법은 클래스의 속성을 사용하는 것입니다 AppDomainSetup .

참고하십시오