저는 클라이언트 시스템 내의 여러 환경 및 지역에 배포 된 .NET 응용 프로그램에 대한 정보를보고하는 도구를 작성하고 있습니다.리플렉션 작업을 위해 .NET 어셈블리를로드 한 다음 언로드하는 방법은 무엇입니까?
이 어셈블리의 어셈블리 특성 값을 읽고 싶습니다.
이 방법은 Assembly.ReflectionOnlyLoad
을 사용하여 수행 할 수 있지만이 방법으로도 어셈블리가로드 된 상태로 유지됩니다. 여기서 문제는 다른 경로에서 같은 이름을 가진 두 개의 어셈블리를로드 할 수 없기 때문에 다른 시스템에 배포 된 동일한 응용 프로그램을 자연스럽게 비교할 수 없다는 것입니다.
이 시점에서 해결책은 임시 AppDomain
을 사용하는 것으로 가정합니다.
다른 사람이 다른 AppDomain
에 어셈블리를로드하는 방법을 자세히 설명하고 속성을 읽고 AppDomain
을 언로드 할 수 있습니까?
이것은 URL 주소의 어셈블리뿐만 아니라 파일 시스템의 어셈블리에서도 작동해야합니다. MSDN documentation of System.Reflection.Assembly.ReflectionOnlyLoad (String)에서
덕분에,이 유용한 패턴처럼 보이는 ReferenceLoader에게 있습니다. –
Assembly.RefrectionOnlyLoad (...)가 현재 도메인에 있지만 TemporaryAppDomain에 어셈블리를로드하지 않습니다? – Anzurio
AZ : 아니요. AppDomain.DoCallback "지정된 대리인으로 식별되는 다른 응용 프로그램 도메인의 코드를 다시 테스트합니다."(MSDN). Assembly의 문서.ReflectionOnlyLoad는 "어셈블리가 호출자의 응용 프로그램 도메인의 리플렉션 전용 컨텍스트에로드됩니다."(다시 MSDN)를 명시합니다. 이는 어셈블리가 실제로 임시 앱 도메인에로드되었음을 의미합니다. –