비슷한 질문을 많이 발견했지만 해결책을 찾지 못했습니다. 내가 다음 코드를 한AppDomain 예외가 throw되었습니다.
는 :
string file = "c:\\abc.dll";
AppDomainSetup ads = new AppDomainSetup();
ads.PrivateBinPath = Path.GetDirectoryName(file);
AppDomain ad2 = AppDomain.CreateDomain("AD2", null, ads);
ProxyDomain proxy = (ProxyDomain)ad2.CreateInstanceAndUnwrap(typeof(ProxyDomain).Assembly.FullName, typeof(ProxyDomain).FullName);
Assembly asm = proxy.GetAssembly(file); // exception File.IO assembly not found is thrown here after succesfully running the funktion GetAssembly.
public class ProxyDomain : MarshalByRefObject
{
public Assembly GetAssembly(string assemblyPath)
{
try
{
Assembly asm = Assembly.LoadFile(assemblyPath);
//...asm is initialized correctly, I can see everything with debugger
return asm;
}
catch
{
return null;
}
}
}
다음 내 GetAssembly의 funktion는 다른 유형의, 심지어 내 사용자 정의 직렬화 클래스를 반환 가장 흥미로운 것은, 모든 것이 괜찮습니다. 누군가 내가 누락 된 것을 알고 있습니까? 또는로드 된 어셈블리를 다른 도메인으로 반환하는 것은 불가능합니다.
은 기본 응용 프로그램의 bin 디렉토리에 앉아 당신이
왜 '어셈블리'를 상위 앱 도메인으로 반환하려고합니까? 일반적으로 이것은 피할 수 있으므로 상위 응용 프로그램 도메인은 어셈블리를로드 할 필요가 없으며 하위 응용 프로그램 도메인이 언로드 될 때 언로드 될 수 있습니다. –
이 ProxyDomain 클래스를 사용하여 달성하려는 것을 설명하면 도움이됩니다. 전체 어셈블리를 기본 도메인으로 되돌리려면 새로운 AppDomain이 필요한 이유는 무엇입니까? –
글쎄, 난 정말 내 첫 번째 appdomain이 어셈블리가 필요하지 않습니다. 폴더에 많은 파일이 있고 특수 클래스 속성을 포함하는 어셈블리를 찾아서 DLL 이름 목록을 반환해야했습니다. 메인 appdomain에로드 된 모든 어셈블리는 응용 프로그램이 다시 시작될 때까지 삭제할 수 없으므로 두 번째 응용 프로그램 도메인이 필요했습니다. 내 문제를 해결했지만 여전히 다른 모든 유형을 반환하는 이유를 알고 어셈블리를 반환하지 못합니다. – VladL