메모
이 문서는 .NET Framework와 관련이 있습니다. .NET 6 이상 버전을 포함하여 .NET의 최신 구현에는 적용되지 않습니다.
loadFromContext 어셈블리가 컨텍스트에 LoadFrom 로드되면 MDA(관리 디버깅 도우미)가 활성화됩니다. 이 상황은 호출 Assembly.LoadFrom 또는 다른 유사한 메서드의 결과로 발생할 수 있습니다.
Symptoms
일부 로더 메서드를 사용하면 어셈블리가 컨텍스트에서 LoadFrom 로드될 수 있습니다. 이 컨텍스트를 사용하면 serialization, 캐스팅 및 종속성 확인에 대한 예기치 않은 동작이 발생할 수 있습니다. 일반적으로 이러한 문제를 방지하려면 어셈블리를 Load 컨텍스트에 로드하는 것이 좋습니다. 이 MDA 없이 어셈블리가 로드된 컨텍스트를 확인하기가 어렵습니다.
원인
일반적으로 어셈블리는 전역 어셈블리 캐시 또는 속성과 같은 컨텍스트 외부 Load 경로에서 로드된 경우 컨텍스트에 AppDomainSetup.ApplicationBase 로드 LoadFrom 되었습니다.
해결 방법
호출이 더 이상 필요하지 않게 LoadFrom 애플리케이션을 구성합니다. 이렇게 하려면 다음 기술을 사용할 수 있습니다.
전역 어셈블리 캐시에 어셈블리를 설치합니다.
에 대한 디렉터리에 어셈블리 ApplicationBase 를 AppDomain배치합니다. 기본 도메인 ApplicationBase 의 경우 디렉터리가 프로세스를 시작한 실행 파일을 포함하는 디렉터리입니다. 어셈블리를 이동하는 것이 편리하지 않은 경우 새로 AppDomain 만들어야 할 수도 있습니다.
종속 어셈블리가 실행 파일을 기준으로 자식 디렉터리에 있는 경우 애플리케이션 구성(.config) 파일 또는 보조 애플리케이션 도메인에 검색 경로를 추가합니다.
각 경우에 메서드를 사용하도록 Assembly.Load 코드를 변경할 수 있습니다.
런타임에 미치는 영향
MDA는 CLR에 영향을 주지 않습니다. 부하 요청의 결과로 사용된 컨텍스트를 보고합니다.
출력
MDA는 어셈블리가 컨텍스트에 LoadFrom 로드되었다고 보고합니다. 어셈블리의 단순 이름과 경로를 지정합니다. 또한 컨텍스트를 사용하지 LoadFrom 않도록 완화를 제안합니다.
Configuration
<mdaConfig>
<assistants>
<loadFromContext />
</assistants>
</mdaConfig>
예시
다음 코드 예제에서는 이 MDA를 활성화할 수 있는 상황을 보여 줍니다.
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// The following call caused the LoadFrom context to be used
// because the assembly is loaded using LoadFrom and the path is
// located outside of the Load context probing path.
Assembly.LoadFrom(@"C:\Text\Test.dll");
}
}
}
참고하십시오
.NET