在我的应用程序中,我正在创建沙盒域,我需要动态定义绑定重定向规则。但是,我既不能使用 SetConfigurationBytes 方法传递 ConfigurationFile 设置也不能传递原始 xml 数据。
我创建了一个示例来检查配置数据是否应用于子域:
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();
其中 Verifier 是具有一种方法的普通类:
public class Sample: MarshalByRefObject
{
public void DebugPrint()
{
Debug.WriteLine("=====================================");
Debug.Print("Reading config: =====|{0}|=====", ConfigurationManager.AppSettings["MyData"]);
Debug.WriteLine("=====================================");
}
}
更新 上面代码的第一个问题是,它必须从 MarshalByRefObject 继承,才能将 DebugPrint 调用编组到子 appdomain,而不是调用在当前域中创建的副本(感谢 sthotakura)。结果 ConfigurationFile 设置开始起作用。但是 SetConfigurationBytes 仍然没有运气。无论如何,目标是定义通过 SetConfigurationBytes 传递的绑定规则。