이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 2833|회답: 1

[.NET 코어] .NET/C#은 AssemblyLoadContext 기반의 DLL 플러그인 핫 업데이트를 구현합니다

[링크 복사]
2024-6-28 14:28:33에 게시됨 | | | |
요구사항: 비즈니스 로직은 복잡하며 맞춤화가 필요하며, 별도의 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 구성:

(끝)




이전의:QRCODE QR 코드 내결함성 수준에 대하여
다음:.NET/C#은 PDFsharp를 사용해 여러 PDF 파일을 하나의 파일로 병합합니다
 집주인| 2024-7-6 16:59:30에 게시됨 |
Roslyn을 사용해 C# 코드를 동적으로 컴파일하고 실행하세요
https://www.itsvse.com/thread-10786-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com