2011-11-04 46 views
3

這裏是我的困境:如何將程序集加載到具有不同目標框架的獨立應用程序域中?

的問題

  1. 我有子程序(一個DLL)使用System.Data.SQLite和兩個被編譯爲.NET 2.0
  2. 我MainProgram(主程序)(一個EXE)被編譯到.NET 4.0
  3. 我MainProgram(主程序)子程序加載到一個單獨的應用程序域,並與代理
通信

顯然,MainProgram正在加載SubProgram並使用.NET 4.0運行它。這導致known issue with System.Data.SQLite

現在,我已經研究並嘗試了SQLite問題的所有建議修復,並且唯一工作的是更新到使用.NET 4.0編譯的System.Data.SQLite程序集(請參閱.NET 4.0版,網址爲this link)。

這將解決我的問題,只有我們有一套嚴格的發佈規則,並且不以任何方式釋放SubProgram或它的依賴項,因此SubProgram使用的System.Data.SQLite DLL必須保留爲當前的.NET 2.0版本。

問題(S)

  1. 是否有指定MainProgram(主程序)加載和運行子程序使用.NET 2.0的方式?在設置應用程序域時可能有些事情?到目前爲止,我找不到任何東西。

  2. 有沒有另一種解決方案?

+1

不,只有在自定義託管方案中才有可能。你可能不會提前做出[ComVisible]。與那些制定規則的人交談,我們無法幫助你。 –

回答

2

您將能夠做到這一點的唯一方法是使用跨進程通信而不是跨AppDomain。

給定應用程序的所有AppDomains仍在同一進程內運行,因此必須在相同的根CLR上下文(以及相同的.NET運行時)內運行。但通常在AppDomain邊界提供代理通信和編組的.NET Remoting技術也適用於對跨進程通信的少量修改。

如果您將SubProgram更改爲單獨的進程,並在兩者之間添加遠程處理通道,那麼考慮到其他約束條件的釋放,這應該是一個合理的方法。

相關問題