내 응용 프로그램에서 샌드 박스 도메인을 만들고 있는데 바인딩 리디렉션 규칙을 동적으로 정의해야합니다. 그러나 SetConfigurationBytes 메서드를 사용하여 ConfigurationFile 설정이나 원시 XML 데이터를 전달할 수는 없습니다. AppDomainSetup.SetConfigurationBytes()를 작동시키는 방법은 무엇입니까?
나는 구성 데이터가 자식 도메인에 적용되었는지 확인하기 위해 샘플을 만들어 :public class Sample: MarshalByRefObject
{
public void DebugPrint()
{
Debug.WriteLine("=====================================");
Debug.Print("Reading config: =====|{0}|=====", ConfigurationManager.AppSettings["MyData"]);
Debug.WriteLine("=====================================");
}
}
업데이트 첫 번째 문제에 :
var configData =
@"<?xml version='1.0' encoding='utf-8' ?>
<configuration>
<appSettings>
<add key='MyData' value='CUSTOM'/>
</appSettings>
</configuration>";
var setup = new AppDomainSetup {
ApplicationBase = runtimeAssembliesPath // ,ConfigurationFile = configFilePath
};
setup.SetConfigurationBytes(Encoding.UTF8.GetBytes(configData));
var sandbox = AppDomain.CreateDomain("Sandbox", evidence, setup);
var verifier = (Sample)_sandbox.CreateInstanceAndUnwrap(thisAssemblyName, typeof(Sample).FullName);
verifier.DebugPrint();
검증 한 방법으로 일반 클래스입니다 위의 코드는 MarshalByRefObject에서 상속 받아 현재 도메인에서 만든 복사본을 호출하는 대신 자식 appdomain에 DebugPrint 호출을 마샬링해야합니다 (감사합니다 sthotakura). 결과적으로 ConfigurationFile 설정이 작동하기 시작합니다. 그러나 SetConfigurationBytes를 사용하면 아무런 운이 없습니다. 어쨌든 목표는 SetConfigurationBytes를 통해 전달 된 경우 작동하는 bindingRules를 정의하는 것이 었습니다.
좋은 캐치! SetConfigurationBytes()에 대해 묻는 중입니다. – olegz
@olegz 그래, 새로운 appdomainin에 대한 새로운 구성을 제공하는 것에 반대하여 새로운 AppDomain에 대한 구성 비트를 대체하겠습니까? – sthotakura
@olegz SetConfigurationBytes를 통해 전달되는 내용이 무시당하는 것처럼 보입니다. (원래 질문에서 – sthotakura