AppDomain 로드 및 해제 dll
6622 단어 domain
우선 우리의 목적은 실행 기간에 dll을 업데이트하고 dll을 적용하는 것입니다.이 과정은 AppDomain을 적용해서 해결해야 한다. 방법은 새로운 AppDomain을 만들어서 dll을 불러오고, dll 업데이트 후에 새로운 AppDomain을 만들어서 새로운 dll을 불러오는 것이다.
자, 우리는 두 개의 목록을 완성해야 합니다.
첫 번째 목표: 실행할 때 dll을 업데이트할 수 있습니다.
1. AppDomain을 만들 때 ShadowCopyFiles 설정
AppDomainSetup _setup
=
new
AppDomainSetup();
_setup.ShadowCopyFiles
=
"
true
"
;
_setup.LoaderOptimization
=
LoaderOptimization.SingleDomain;
AppDomain _curDomain
=
AppDomain.CreateDomain(
"
TestDomain
"
,
null
, _setup);
2.주 프로그램이 dll에 동적 불러오는 대상의 실례를 인용해야 할 때, 이 실례는 프록시 클래스로 만들어야 합니다.프록시 클래스는 클래스가 MarshalByRefObject에서 상속되어야 한다는 뜻입니다.이 프록시 클래스는 일반적으로 다른 공공 라이브러리에서 기본 클래스나 인터페이스를 정의해서 사용합니다.자, 먼저 앞에서 만든 프로그램 영역에서 프록시 클래스를 만드는 실례를 봅시다.
System.Runtime.Remoting.ObjectHandle objHandle
=
pJobDomain.CreateInstanceFrom(strDllFilePath, strClassName);
object
objBuild
=
objHandle.Unwrap();
if
(objBuild
==
null
)
throw
new
Exception(
"
buildWorker --
"
);
else
ido
=
(IDo)objBuild;
//
IDo
자, 만약strDllFilePath="ClassLibrary.dll"를 실행한다면 디렉터리의ClassLibrary를 실행합니다.dll 파일이 불러온 후에도 우리는 마음대로 그를 업데이트할 수 있습니다.그러나 업데이트 후 프로그램 영역을 다시 만들지 않으면 위의 방법으로 프록시 실례를 다시 만듭니다. 프로그램이 불러올 때 Shadow Copy Files = "true"를 설정했기 때문에 새로운 dll의 실행 효과를 볼 수 없습니다.그럼요. "false"로 설정하면 안 돼요?너는 해 볼 수 있지만, 내가 말하고자 하는 것은, 만약 이렇게 된다면, 우리의 첫 번째 목표도 완성할 수 없다는 것이다.
두 번째 목표: 새로운 dll을 적용합니다.
사실 간단합니다. UnLoad 다음에 다시 만들고 새로운 AppDomain으로 프록시 클래스를 만들면 프로그램에서 새로운 dll의 효과를 볼 수 있습니다.자, 실행할 때마다 새로운 프로그램 영역을 만들 수 있는 방법을 정의했습니다.
AppDomain _curDomain;
private
void
load()
{
if
(_curDomain
!=
null
)
//
{
AppDomain.Unload(_curDomain);
//
。
_curDomain
=
null
;
}
AppDomainSetup _setup
=
new
AppDomainSetup();
_setup.ShadowCopyFiles
=
"
true
"
;
_setup.LoaderOptimization
=
LoaderOptimization.SingleDomain;
_curDomain
=
AppDomain.CreateDomain(
"
TestDomain
"
,
null
, _setup);
}
하나 제공kevin-y 테스트의 원본 코드 다운로드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
DDD에서 큰 집계를 만드는 방법계속 읽기 전에 DDD 및 관련 개념에 대해 잘 알고 있다고 가정합니다(소개를 포함하지 않은 점에 대해 죄송합니다. DDD에 대한 소개 기사가 이미 너무 많아서 다른 글을 쓰고 싶지는 않습니다.) . 그렇다면 DDD...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.