2010-02-16 119 views
0

我有一個在VS2010中開發的應用程序,並且通過配置文件使用Castle-Windsor IoC。從.net 4.0應用程序使用.net 2.0組件創建一個「ComponentActivatorException」

我註冊的組件之一,也在VS2010中開發,引用.net 2.0組件(LeadTools),所以重新編譯2.0項目不是一個選項。當包裝組件的註冊完成時,引發一個「ComponentActivatorException」,它包裝了一個「System.TypeInitializationException」,它反過來用「混合模式程序集針對版本構建的」v2消息封裝了「System.IO.FileLoadException」 .0.50727',並且不能在沒有附加配置信息的情況下在4.0運行時加載。「

我已經添加了運行時聲明應用程序的配置文件,像這樣:

<!-- useLegacyV2RuntimeActivationPolicy is needed for LEADTools--> 
<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    <supportedRuntime version="v2.0.50727" /> 
</startup> 

如果包裝組件未在溫莎註冊這工作得很好,但是,它似乎否則無視指令。

謝謝!

+0

你能發佈完整的異常堆棧跟蹤嗎? –

回答

0

的問題是由於使用「定義」 S和在配置文件中的「if」,每MicroKernel documentation。從App.Config文件中刪除所有這些元素允許組件實例化,無論它們是否在Windsor容器中註冊。

+0

很酷。很高興你能解決這個問題。您可以創建一個問題的複製,並將其發佈到Castle組,以便我們可以查看是否有任何可以解決此問題的方法? –

0

我假設您使用通過XML註冊?

如果您在代碼中註冊組件,會發生什麼情況?

您可以嘗試重現問題沒有錯誤?

Type.GetType("assembly qualified name of the type from .net 2.0 assembly");呼叫

+0

不幸的是,通過代碼註冊組件會產生相同的結果,並且堆棧跟蹤略微更短(沒有Windsor異常)。當通過相同的應用程序完成時,嘗試Type.GetType()也會引發「System.IO.FileLoadException」。這幾乎就像激活政策由於某種原因未被考慮在內。 – Hugo

+0

這表明這不是一個真正的溫莎問題 - 相反,也許是政策中的一個錯誤,在使用反射來加載庫時沒有考慮到這個問題? (只是猜測) –

相關問題