【问题标题】:AppDomain.CreateInstanceAndUnwrap fails with "Type is not marked as serializable"AppDomain.CreateInstanceAndUnwrap 因“类型未标记为可序列化”而失败
【发布时间】:2012-09-13 16:05:27
【问题描述】:

我有这段代码(简化版)

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,但没有尝试在应用程序域之间传递 CallContextLifetimeScope 实例。

【问题讨论】:

  • 我在尝试运行涉及 Castle Windsor 3.0 的 mspec 集成测试时遇到了同样的错误。我正在使用 BeginScope()。我根本没有使用任何 AppDomain 的东西(我怀疑 mspec 可能是)。奇怪的是,R# Mspec 跑步者很好。
  • @AlanChristensen,ReSharper 运行程序不会为每个测试程序集设置新的 AppDomain。你能解决问题吗?

标签: .net castle-windsor appdomain


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2015-09-27
    • 2011-02-06
    • 2012-07-15
    相关资源
    最近更新 更多