2010-09-14 127 views
1

自從我們開始升級我們的一些項目,以.NET框架4.0,我已經運行到了很多關於以下錯誤的問題:有沒有辦法卸載或重新加載當前加載的運行時?

This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

它現在與我們的安裝程序發生。安裝程序會查看DLL的列表並在目標機器上安裝必要的DLL。每個程序集都使用

Assembly.LoadFile

隊列中的第一個程序集是3.5。一旦安裝程序拿起4.0 DLL並嘗試使用Assembly.LoadFile加載它,我會得到該錯誤。 似乎加載第一個DLL設置當前加載哪個「運行時」的先例。

有沒有一種方法可以在處理4.0 DLL之前卸載此當前加載的運行時,以避免此錯誤?

回答

1

這將取決於CLR是加載正在運行的程序集的可執行文件。如果它在CLR 2.0上運行,您將無法加載.NET 4.0程序集。因此,確保如果您嘗試加載.NET 4.0程序集,您正在CLR 4.0上運行應用程序。您提到安裝程序應用程序。有設置爲.NET 4.0的啓動條件要求的可能性:

alt text


UPDATE:

您也可能會迫使你的可執行文件由CLR 4.0將這個標籤在加載app.config文件:

<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 

由於CLR 4.0支持加載與以前版本編譯的程序集,因此您可以解決這個問題而不用重新編譯.NET 4.0的可執行文件。

+0

沒錯。我提到的安裝程序是我們自己的定製可執行應用程序;不是安裝解決方案安裝程序項目。你能設置任何可執行文件的啓動條件嗎? – topwik 2010-09-14 17:46:43

+0

錯誤引用的當前運行時,這是特定應用程序使用的運行時是否正確? – topwik 2010-09-14 17:47:56

+1

您需要針對.NET 4.0編譯此可執行文件。通過這樣做,它將自動運行在CLR 4.0下(如果可用),您將能夠加載針對.NET 4.0編譯的程序集。 – 2010-09-14 17:48:58

相關問題