AppDomain.CreateInstanceAndUnwrap завершается с ошибкой «Тип не помечен как сериализуемый» - PullRequest
3 голосов
/ 08 февраля 2012

У меня есть этот код (упрощенно)

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' в сборке 'Castle.Windsor, версия = 3.0.0.0, Culture = нейтральный, PublicKeyToken = 407dd0808d44fbdc' не помечен как сериализуемый.

Почему это? Я использую Castle Windsor в приложении, но не пытаюсь передать экземпляр CallContextLifetimeScope между доменами приложения.

1 Ответ

2 голосов
/ 04 сентября 2012

Эта проблема теперь исправлена ​​в Виндзоре 3.1.

Это происходит, когда в доменах приложений используется ограниченный образ жизни.Некоторые организаторы тестов (например, MsTest) или другие библиотеки (например, Reporting Services) делают что-то в другом домене приложения, и именно поэтому вы видите это.

...