2012-02-08 33 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)在另一個應用程序域中執行某些操作,這就是爲什麼你會看到這一點。

相關問題