분리 된 응용 프로그램 도메인에서 클래스의 인스턴스를 가져 오려고 할 때이 오류가 발생합니다.AppDomain.CreateInstanceAndUnwrap 메서드를 사용할 때 "투명한 프록시를 캐스팅 할 수 없습니다"
string assemblyName = Assembly.GetExecutingAssembly().FullName;
string typeName = "Namespace.ClassName";
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
SecurityZone zone = SecurityZone.MyComputer;
// Set up the Evidence
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence);
evidence.AddAssembly(assemblyName);
evidence.AddHost(new Zone(zone));
AppDomain app = AppDomain.CreateDomain("Processor AppDomain", evidence, setup);
core = (Core)app.CreateInstanceAndUnwrap(assemblyName, typeName);
두 클래스 (호출 및 호출) 같은 assemby (COM DLL을)에 입니다 : 여기에 코드입니다.
그렇다면이 예외의 이유는 무엇입니까? 모든 응답 주셔서 감사합니다.
'typeName'은 '코어'유형을 의미합니까? 캐스팅하지 않고'CreateInstanceAndUnwrap()'의 결과를 볼 때 디버거는 무엇을 보여줍니까? – svick
응답 해 주셔서 감사합니다. – Shelest
답장을 보내 주셔서 감사합니다. 'typeName'은 실제로 Core를 참조합니다. 그렇지 않으면'FileNotFoundException' 또는'TypeLoadException' 타입의 다른 예외를 얻습니다. 이 예제의 마지막 문자열을'Object core = app.CreateInstanceAndUnwrap (assemblyName, typeName); '으로 변경하고 디버깅하여 모든 것이 올바르게 진행될 때 - Core 클래스의 필드가 초기화되고 생성자가 호출되고 객체가 반환되었습니다. 그러나이 반환 된 객체는 클래스 호출을위한 유형별로'System.Runtime.Remoting.Proxies .__ TransparentProxy'입니다. 이 객체를 '코어'유형으로 변환 할 수없는 것처럼 보입니다. – Shelest