비슷한 질문을 보았지만 아무 것도 해결하지 못했습니다. 시나리오는 - 나는 외부 저장소에 두 개의 DLL을 가지고 있는데, 나는 그들에 대한 정보 (Assembly 버전과 AssemblyInformationalVersion을 특정해야 함)를 얻을 필요가있다. 다음 코드로 시작했습니다.어셈블리를 임시 AppDomain에로드하십시오.
List<byte[]> assemblies = _client.DownloadAllAssemblies();
foreach(var assemblyBytes in assemblies)
{
var assembly = Assembly.ReflectionOnlyLoad(assemblyBytes);
var assemblyName = assembly.GetName();
... // read version from assembly name
}
위 코드는 한 번만 작동합니다. 보기를 새로 고치기 위해 단추를 클릭하면 어셈블리가 이미로드되어 다시로드 할 수 없다는 예외가 발생합니다. 그런 다음 임시 도메인을 만들고 어셈블리를로드하여 AppDomain을 언로드 할 수 있도록해야한다고 읽었습니다. 나는 다음 코드를 시도 : 코드 위
List<byte[]> assemblies = _client.DownloadAllAssemblies();
var tempDomain = AppDomain.Create("TemporaryDomain");
foreach(var assemblyBytes in assemblies)
{
var assembly = tempDomain.Load(assemblyBytes);
var assemblyName = assembly.GetName();
... // read version from assembly name
}
AppDomain.Unload(tempDomain);
이
나는 그것이 일어나는 이유를 이해하지만 난이 문제를 해결하는 방법을 아무 생각이 없다 "... 파일이나 어셈블리를로드 할 수 없습니다"라는 FileNotFound 예외가 발생합니다. 이 작업은 매우 사소한 것 같다
- 로드 파일,
- 이 버전을 읽고,
- 그것에 대해 잊어 버려.
위의 논리는 복잡하지 않습니다. 런타임 요구 사항에 지나치게 복잡해진 것처럼 보입니다. 누구든지 내가 어떻게 작동하게 할 수 있는지 알고 있니?
더 많은 스택 트레이스 (항상 완전한 정보를 제공)가 필요합니다. 전달할 바이트 배열을로드하기 전에 종속 어셈블리를로드 할 수 없었을 가능성이 있습니다. 'AppDomain'에 몇 가지 속성이 있습니다. 프로빙 경로와 같은 기본값입니다. 또한 당신은 여전히'ReflectionOnlyLoad'를 사용하여 모든 것을 해결하려고 시도하지 않을 것입니다. –
@ escape-llc AppDomain은 "ReflectionOnlyLoad"함수를 노출하지 않습니다. 나중에 StackTrace로 질문을 업데이트 할 것입니다. 감사. – MajkeloDev