我有这段代码(简化)
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实例。
答案 0 :(得分:2)
此问题现已在Windsor 3.1中修复。
在AppDomains中使用范围生活方式时会发生这种情况。一些测试运行者(如MsTest)或其他库(如Reporting Services)正在另一个应用程序域中执行某些操作,这就是您看到此内容的原因。