요구사항: 비즈니스 로직은 복잡하며 맞춤화가 필요하며, 별도의 DLL 어셈블리에서 백그라운드가 어셈블리를 동적으로 업데이트하고 최신 로직을 실행할 수 있습니다.
.NET Core는 .NET 프레임워크처럼 AppDomains의 동적 생성 및 언로드를 지원하지 않기 때문에 플러그인을 핫로드하는 좋은 방법이 없었습니다. 하지만 좋은 소식은 .NET Core가 3.0부터 Collectible Assembly를 지원해왔고, 어셈블리를 로드하고 언로드할 수 있는 재회수 가능한 AssemblyLoadContext를 만들 수 있다는 점입니다.
AssemblyLoadContext 클래스:하이퍼링크 로그인이 보입니다.
먼저, 새로운 콘솔과 세 개의 라이브러리를 만드세요:콘솔앱6、클래스라이브러리 표준、클래스라이브러리1、클래스라이브러리2이 중 ClassLibrary1과 ClassLibrary2 라이브러리는 ClassLibraryStandard의 IWorker 인터페이스를 계승하여 Run 메서드를 구현합니다.
ClassLibraryStandard 코드:
ClassLibrary1 코드:
ClassLibrary2 코드:
ConsoleApp6 콘솔 코드는 다음과 같습니다:
콘솔은 DLL 플러그인에서 3개의 스레드로 구성된 Run 메서드를 열어 지속적으로 동적으로 실행되고, log4net을 사용해 출력 결과를 기록한 후 콘솔에서 실행합니다3초 후에 DLL을 최신 라이브러리로 교체하세요。
콘솔을 1초 또는 5초 동안 실행한 후, 현재 AssemblyLoadContext 인스턴스의 컬렉션이 출력되며, 이것이 로드된 DLL 라이브러리입니다.
아래에 나와 있습니다:
프로그램이 비정상적인 출력을 내지 않고, 실행 과정에서 플러그인을 찾을 수 없는 상황도 없습니다. log4net이 실행 결과를 기록하는 이유는 콘솔이 차단되어 있기 때문이며, 3개의 스레드가 연속적으로 실행될 수 있도록 log4net이 실행 결과를 기록하는 데 사용되기 때문입니다. 아래 그림과 같이 그렇습니다:
2024-06-28 14:24:36,606 정보 11 롤링 파일 - 1 2024-06-28 14:24:36,606 정보 10 롤링 파일 - 삭제 시작 2024-06-28 14:24:36,606 정보 13 롤링파일 - 1 2024-06-28 14:24:36,606 정보 13 롤링파일 - 1 2024-06-28 14:24:36,606 정보 13 롤링파일 - 1 2024-06-28 14:24:36,606 정보 11 롤링 파일 - 1 2024-06-28 14:24:36,606 정보 11 롤링 파일 - 1 2024-06-28 14:24:36,606 정보 13 롤링파일 - 1 2024-06-28 14:24:36,606 정보 13 롤링파일 - 1 2024-06-28 14:24:36,606 정보 13 롤링파일 - 1 2024-06-28 14:24:36,606 정보 10 롤링파일 - AssemblyLoadContext_Unloading 2024-06-28 14:24:36,606 정보 13 롤링파일 - 1 2024-06-28 14:24:36,606 정보 13 롤링파일 - 1 ... 2024-06-28 14:24:36,607 정보 12 롤링 파일 - 1 2024-06-28 14:24:36,607 정보 13 롤링파일 - 1 2024-06-28 14:24:36,607 정보 12 롤링 파일 - 1 2024-06-28 14:24:36,606 정보 10 롤링 파일 - 삭제 완료 2024-06-28 14:24:36,607 정보 12 롤링 파일 - 1 2024-06-28 14:24:36,607 정보 12 롤링 파일 - 1 ... 2024-06-28 14:24:36,607 정보 12 롤링 파일 - 1 2024-06-28 14:24:36,607 정보 13 롤링파일 - 1 2024-06-28 14:24:36,607 정보 12 롤링 파일 - 1 2024-06-28 14:24:36,607 정보 13 롤링파일 - 1 2024-06-28 14:24:36,607 정보 12 롤링 파일 - 1 2024-06-28 14:24:36,606 정보 11 롤링 파일 - 1 2024-06-28 14:24:36,607 정보 13 롤링파일 - 2 2024-06-28 14:24:36,607 정보 12 롤링파일 - 2 첨부config.xml 구성:
(끝)
|