문제

ASP.NET가 ASPX 파일, DLL 및 기타와 같은 특정 파일의 변경 사항을 감지한다는 사실 만 읽을 수있었습니다. 새 배포 된 파일로 현재 실행중인 요청 및 새 요청을 완료합니다.

그러나 마지막 파일이 마지막 파일이 교환 될 때까지 복사 한 첫 파일에서 무슨 일이 일어나고 있습니까? 첫 번째 DLL 파일을 교환하면 요청이 들어 오지만 다른 DLL 파일은 이전 버전입니다. 충돌합니까? ASP.NET은 몇 초 동안 기다릴 수 있으며 X 초의 X 초 (관련) 파일 변경 후 새로 시작합니까?

고마워!

도움이 되었습니까?

해결책

여기에는 4 가지 질문이 있습니다.마지막 파일에서 복사 한 첫 파일에서 마지막 파일이 교환 될 때까지 무슨 일이 일어나고 있습니까? - .NET은 새로운 DLL이로드 된 상태에서 새로운 앱 도메인을 시작하기 전에 다른 파일이 수정되었는지 확인하기 위해 설정 시간이 설정되어 있습니다.

첫 번째 DLL 파일을 교환하면 요청이 들어 오지만 다른 DLL 파일은 이전 버전입니다. 충돌합니까? - DLL의 코드 변경 사항에 따라 다릅니다. 새 DLL이 오래된 코드로 잘 실행될 수 있다면 괜찮을 것입니다. 그러나 앱 도메인이 새로운 DLL을 회전시키고 새로운 DLL이 아직없는 것에 의존한다면 ... 예, 예외가 발생합니다.

ASP.NET은 몇 초 동안 기다릴 수 있으며 X 초의 X 초 (관련) 파일 변경 후 새로 시작합니까? - 예. 나는 그 시간이 얼마나 걸리는지 알 수 없었습니다. 그러나 내 개인적인 경험에서 그것은 1-2 초 범위의 어딘가에 있습니다.

또한 앱 도메인과 DLL의 재로딩에 대한 좋은 설명을 찾았습니다.http://odetocode.com/articles/305.aspx

업데이트 된 DLL을 응용 프로그램의 빈 하위 디렉토리에 복사하면 ASP.NET 런타임은 실행할 새 코드가 있음을 인식합니다. ASP.NET은 DLL을 기존 AppDomain으로 바꿀 수 없으므로 새로운 AppDomain을 시작합니다. 기존 응용 프로그램 도메인은 "배수 중지"입니다. 즉, 기존 요청은 실행을 완료 할 수 있으며 일단 완료되면 AppDomain은 언로드 할 수 있습니다. 새로운 AppDomain은 새 코드로 시작하여 모든 새로운 요청을 시작합니다.

일반적으로 DLL이 프로세스에로드되면 프로세스가 DLL을 잠그고 디스크에서 파일을 덮어 쓸 수 없습니다. 그러나 AppDomains에는 어셈블리가 잠금 해제 및 디스크에서 교체 할 수있는 Shadow Copy로 알려진 기능이 있습니다.

런타임은 BIN 디렉토리의 Shadow Copy를 활성화하여 ASP.NET을 초기화합니다. AppDomain은 DLL을 메모리에 잠그고로드하기 전에 BIN 디렉토리에서 임시 위치로 필요한 DLL을 복사합니다. Shadow Copy를 사용하면 웹 응용 프로그램을 오프라인으로 취하지 않고 업데이트 중에 BIN 디렉토리의 DLL을 덮어 쓸 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top