2010-11-26 53 views
0

我可以使用此標誌加載特定版本的.NET框架,將此標誌置於二進制文件的應用程序配置文件中。但二進制配置文件不在我的控制之下,因爲我負責DLL。有什麼辦法可以在DLL中指定相同的標誌,以便DLL可以加載使用框架4.0構建的其他DLL?.NET框架requiredRuntime標誌

例如,用目標框架3.5構建的Binary A.exe加載帶目標框架3.5的DLL B.dll。現在B.dll加載用目標框架4.0構建的DLL C.dll。

我可以通過將以下配置放在A.exe的app.config中。

<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
    <requiredRuntime version="v4.0"/> 
    </startup> 

我不控制A.exe和app.config,但是我控制了B.DLL和C.DLL。 你認爲這是可能的嗎?

-Thanks,

-Brajesh

回答

0

這是不可能的,由於加載過程。在請求加載DLL時,.NET Framework已經加載到進程中。在.NET 4之前,您一次只能處理一個CLR版本。 (N.B. NET 2.0,3.0和3.5都運行在CLR 2.0上)。即使使用允許CLR 2.0和CLR 4.0在同一進程中共存的.NET 4,它們也必須在單獨的AppDomain中運行。您不能在不同的AppDomain之間進行無縫通信。

一個可能的想法...有一個小的CLR 2.0墊片創建一個單獨的CLR 4.0 AppDomain,將您的.NET 4.0程序集加載到它中,然後與它進行通信。這不會很直接,簡單或高效。另一個選擇是將程序集託管在單獨的進程中,並使用命名管道,TCP或其他通信渠道在.NET 4.0代碼和現有EXE中託管的.NET 3.5 Shim之間進行通信。

如果宿主應用程序是.NET 3.5,我會說堅持.NET 3.5爲您的程序集。這會讓頭痛少得多。