AppDomain.CreateInstanceAndUnwrap失败,“类型未标记为可序列化”

时间:2012-02-08 17:06:54

标签: .net castle-windsor appdomain

我有这段代码(简化)

internal class Worker : MarshalByRefObject {
    public void DoWork() {
    }
}

internal class WorkerInvoker {
    public void InvokeWorker() {
        var newDomain = AppDomain.CreateDomain("Work", null, new AppDomainSetup { ApplicationBase = AppDomain.CurrentDomain.BaseDirectory, PrivateBinPath = AppDomain.CurrentDomain.RelativeSearchPath });
        try {
FAIL HERE>  var worker = (Worker)newDomain.CreateInstanceAndUnwrap(typeof(Worker).Assembly.FullName, typeof(Worker).FullName);
            worker.DoWork();
        }
        finally {
            if (newDomain != null)
                AppDomain.Unload(newDomain);
        }
    }
}

但指示的行(CreateInstanceAndUnwrap)失败并带有

  

在程序集'Castle.Windsor,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'中键入'Castle.MicroKernel.Lifestyle.Scoped.CallContextLifetimeScope'未标记为可序列化。

这是为什么?我在应用程序中使用Castle Windsor,但我没有尝试在app域之间传递CallContextLifetimeScope实例。

1 个答案:

答案 0 :(得分:2)

此问题现已在Windsor 3.1中修复。

在AppDomains中使用范围生活方式时会发生这种情况。一些测试运行者(如MsTest)或其他库(如Reporting Services)正在另一个应用程序域中执行某些操作,这就是您看到此内容的原因。