2012-02-08 34 views
3

我有此代码(简化的)AppDomain.CreateInstanceAndUnwrap失败, “类型没有标记为可序列”

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.MicroKernel .Lifestyle.Scoped.CallContextLifetimeScope'in assembly'Castle.Windsor,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'未标记为可序列化。

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

+0

我有这个相同的错误试图运行与涉及Castle Windsor 3.0的mspec集成测试。我正在使用BeginScope()。我没有使用任何AppDomain的东西(我怀疑mspec可能)。奇怪的R#Mspec亚军很好。 – 2012-02-16 21:01:34

+0

@AlanChristensen,ReSharper亚军并没有为每个测试程序集建立一个新的AppDomain。你能解决问题吗? – 2012-04-24 15:30:55

回答

2

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

这发生在范围广泛的生活方式跨AppDomain使用时发生。一些测试运行者(如MsTest)或其他库(如Reporting Services)在另一个应用程序域中执行某些操作,这就是为什么你会看到这一点。

相关问题