programing/dot net
https://www.sysnet.pe.kr/2/0/10948 .NET Framework: 574. .NET - 눈으로 확인하는 SharedDomain의 동작 방식 .NET Framework: 574. .NET - 눈으로 확인하는 SharedDomain의 동작 방식 [링크 복사], [링크+제목 복사] 조회: 9079 글쓴 사람 정성태 (techsharer at outlook.com) 홈페이지 첨부 파일 부모글 보이기/감추기 .NET - 눈으 www.sysnet.pe.kr 유용한 글이지만 아직 완전히 이해하기엔 버겁다. 이해한 바를 간략하게 정리하자면, 도메인에 중립적인 어셈블리란 SharedDomain이라는 보관소에 저장되어, 다른 애플리케이션 도메인에 공유될 수 있는 어셈블리 정도로 우선은 이해하도록 ..
Type.Memberinfo 클래스를 이용하여 Assembly의 각종 정보를 얻을 수 있다. 멤버변수의 이름, 메소드의 이름, 파라메터, 프로퍼티, 이벤트 등등 거의 모든 정보를 얻을 수 있다. 본 예제는 이중 멤버변수, 메소드, 프로퍼티 등 의 이름을 string 타입으로 리턴 받는다. 동적으로 load한 어셈블리를 다룰때 한가지 주의사항이 있다. main AppDomain에서 직접 어셈블리를 load하지 않아도 type 클래스의 객체로 해당 어셈블리의 정보를 리턴 받는다면 내부적으론 main AppDomain에서 직접 어셈블리를 load한다. 그럼 동적으로 load한 어셈블리의 unload가 불가능해진다(프로그램 종료 전까지는). 때문에 main AppDomain이 아닌 sub AppDomain에서 ..
우리가 어떤 모듈을 어셈블리 단위로 제공을 한다고 가정해보자. 해당 모듈이 업데이트되었을 경우 기존에 load 되어 있는 어셈블리는 unload 시키고 다시 새로운 어셈블리를 load 하는 작업(re-load)을 거치기만 한다면, 해당 응용프로그램은 종료 없이 언제든 업데이트될 수 있을 것이다. 하지만, dotnet환경에서 동적으로 load된 어셈블리를 unload를 하는 행위는 그리 만만한 작업이 아니다. msdn에 나와있듯 도메인에 중립적인 어셈블리는 전체 프로세스가 종료될 때까지 메모리에 잔류하며, 해당 어셈블리를 unload 하는 유일한 방법은 프로세스를 종료하는 것이라고 한다. 프로세스를 종료하지 않고 어셈블리를 unload 하기 위하여 여러 방법(Shadow Copy 등)을 찾아 시도해 보았으..
Assembly Shadow Copy란? 섀도 복사를 사용하면 애플리케이션 도메인을 언로드하지 않고 애플리케이션 도메인에서 사용되는 어셈블리를 업데이트할 수 있다. 특히, 이 기능은 ASP.NET 사이트와 같이 지속적으로 제공되어야 하는 애플리케이션에 유용하다. 어셈블리가 로드될 때 CLR(공용 언어 런타임)은 어셈블리 파일을 잠그므로 어셈블리가 언로드 될 때까지 파일을 업데이트할 수 없다. 애플리케이션 도메인에서 어셈블리를 언로드 하는 유일한 방법은 애플리케이션 도메인을 언드로 하는 것이므로 일반적인 환경에서는 어셈블리를 사용 중인 모든 애플리케이션 도메인이 언로드 될 때까지 디스크에서 어셈블리를 업데이트할 수 없다. 섀도 복사 파일에 대한 애플리케이션 도메인을 구성하면, 애플리케이션 경로의 어셈블리가..
1. Create Application Domain class Program { static void Main(string[] args) { Console.WriteLine("Create new AppDomain"); AppDomain domain = AppDomain.CreateDomain("MyDomain"); Console.WriteLine("Host domain : " + AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("Child domain : " + domain.FriendlyName); Console.WriteLine("\nPlease Endter Key...\n"); Console.ReadKey(); } } 2. Unload Appli..