어셈블리 섀도 복사
업데이트: 2007년 11월
섀도 복사를 사용하면 응용 프로그램 도메인을 언로드하지 않고도 응용 프로그램 도메인에 사용된 어셈블리를 업데이트할 수 있습니다. 섀도 복사는 ASP.NET 사이트와 같이 계속해서 사용할 수 있어야 하는 응용 프로그램에 특히 유용합니다.
공용 언어 런타임에서는 어셈블리가 로드될 때 어셈블리 파일을 잠그므로 어셈블리가 언로드되기 전까지는 파일을 업데이트할 수 없습니다. 응용 프로그램 도메인에서 어셈블리를 언로드하는 유일한 방법은 응용 프로그램 도메인을 언로드하는 것이므로 일반적인 경우에는 어셈블리를 사용하고 있는 응용 프로그램 도메인이 모두 언로드될 때까지 디스크에서 어셈블리를 업데이트할 수 없습니다.
응용 프로그램 도메인이 파일을 섀도 복사할 수 있도록 구성되어 있으면 응용 프로그램 경로의 어셈블리가 다른 위치에 복사되고 이 위치에서 로드됩니다. 복사본은 잠겨 있지만 원본 어셈블리 파일은 잠겨 있지 않으므로 업데이트할 수 있습니다.
중요: |
---|
응용 프로그램 디렉터리 또는 하위 디렉터리에 저장된 어셈블리만 섀도 복사할 수 있습니다. 이러한 디렉터리는 응용 프로그램 도메인이 구성될 때 ApplicationBase 및 PrivateBinPath 속성으로 지정됩니다. 전역 어셈블리 캐시에 저장된 어셈블리는 섀도 복사되지 않습니다. |
AppDomainSetup 클래스의 속성을 사용하여 섀도 복사가 가능하도록 응용 프로그램 도메인을 구성하는 방법은 다음과 같습니다.
ShadowCopyFiles 속성을 문자열 값 "true"로 설정하여 섀도 복사가 가능하도록 설정합니다.
기본적으로 이렇게 하면 응용 프로그램 경로의 모든 어셈블리가 로드되기 전에 다운로드 캐시에 복사됩니다. 다운로드 캐시는 다른 컴퓨터에서 다운로드한 파일을 저장하기 위해 공용 언어 런타임에서 관리하는 캐시이며 더 이상 필요 없는 파일은 공용 언어 런타임에서 자동으로 삭제됩니다.
필요할 경우 CachePath 속성과 ApplicationName 속성을 사용하여 섀도 복사된 파일의 사용자 지정 위치를 설정합니다. 이 위치의 기본 경로는 하위 디렉터리를 나타내는 CachePath 속성에 ApplicationName 속성이 연결되어 만들어집니다. 어셈블리는 기본 경로 자체가 아니라 이 경로의 하위 디렉터리에 섀도 복사됩니다.
참고: ApplicationName 속성이 설정되어 있지 않으면 CachePath 속성은 무시되고 다운로드 캐시가 사용됩니다. 예외가 throw되지 않습니다.
사용자 지정 위치를 지정하면 해당 디렉터리와 복사된 파일이 더 이상 필요하지 않아도 자동으로 삭제되지 않으므로 사용자가 직접 해당 디렉터리와 파일을 정리해야 합니다.
섀도 복사된 파일의 사용자 지정 위치를 설정하는 이유는 두 가지입니다. 첫째, 응용 프로그램에서 생성하는 복사본이 많을 경우 섀도 복사된 파일의 사용자 지정 위치를 설정해야 합니다. 다운로드 캐시는 수명이 아니라 크기에 제한을 받으므로 공용 언어 런타임에서 아직 사용 중인 파일을 삭제하려고 할 수도 있기 때문입니다. 둘째, 공용 언어 런타임에서 다운로드 캐시에 사용하는 디렉터리 위치에 대한 쓰기 권한이 응용 프로그램을 실행하는 사용자에게 없는 경우 사용자 지정 위치를 설정합니다.
필요할 경우 ShadowCopyDirectories 속성을 사용하여 섀도 복사되는 어셈블리를 제한합니다.
응용 프로그램 도메인의 섀도 복사가 가능하도록 설정하면 기본적으로 응용 프로그램 경로, 즉 ApplicationBase 및 PrivateBinPath 속성으로 지정된 디렉터리의 모든 어셈블리가 복사됩니다. 섀도 복사할 디렉터리만 들어 있는 문자열을 만들고 ShadowCopyDirectories 속성에 이 문자열을 할당하여 선택한 디렉터리만 복사되도록 할 수 있습니다. 각 디렉터리는 세미콜론으로 구분합니다. 이렇게 하면 선택한 디렉터리에 있는 어셈블리만 섀도 복사됩니다.
사용되지 않는 메서드
AppDomain 클래스에는 응용 프로그램 도메인의 섀도 복사를 제어하는 데 사용할 수 있는 SetShadowCopyFiles 및 ClearShadowCopyPath와 같은 몇 개의 메서드가 있지만 .NET Framework 버전 2.0에서는 이러한 메서드가 더 이상 사용되지 않는 것으로 표시되었습니다. 따라서 섀도 복사가 가능하도록 응용 프로그램 도메인을 구성하려면 AppDomainSetup 클래스의 속성을 사용하는 것이 좋습니다.
참고 항목
참조
AppDomainSetup.ShadowCopyFiles