2012-05-17 39 views
1

我們的應用程序使用基於.NET 3.5崩潰4

這是在Windows XP專門測試的WinForms建,雖然我不知道它是否操作系統有關。

每當我在僅使用.NET 4的機器上運行它時,它會崩潰,並說它無法找到版本爲3.5的.NET程序集。

我想知道爲什麼這不會自動發生。例如,某些第三方庫安裝某種策略,即安裝新版本時即使應用程序是針對較早版本編譯的,也會使用該策略。

UPDATE:確切的錯誤信息是:

「無法找到一個版本的運行時運行該應用程序」。

我的問題是:

  1. 這是爲什麼不與.NET Framework一樣嗎?
  2. 解決方案是在配置文件中添加元素?其他解決方案?
+0

我認爲3.5(.net 2)CLR和.net4 CLR並排運行,因此如果您想運行較舊的應用程序,則需要3.5運行時安裝 –

+0

當您安裝.net 3.5和.net 4.0時是否工作? –

+0

@EmmieGabrielleLewis是的,它的確如此。 –

回答

1

如果您的計算機沒有安裝.NET 3.5,則沒有CLR可以啓動您的應用程序。由於潛在的兼容性問題,.NET 4.0不會自動用於您的應用程序。首先測試您的應用程序是否與.NET 4.0一起運行,然後將此部分添加到您的app.config中,以告訴CLR如果存在,則優先運行.NET 4.0。

<configuration> 
    <startup> 
     <supportedRuntime version="v4.0.30319"/> 
    </startup> 
</configuration> 

如果.NET 4不存在作爲後備對你的申請被對用作後備編譯CLR版本。如果全部失敗,則會顯示消息「無法找到運行該版本的應用程序的運行時」。

+0

使用這種配置有什麼缺點嗎? –

+0

如果您的應用程序確實使用.net 4.0運行,則沒有缺點。 –

3

在一般情況下,應該是這樣的:

http://msdn.microsoft.com/en-us/library/ff602939.aspx

向後兼容性意味着對於一個平臺的 特定版本開發的應用程序可以運行在更高版本的那 平臺。 .NET Framework嘗試最大限度地提高向後兼容性: 爲一個版本的.NET Framework編寫的源代碼應在更高版本的.NET Framework上編譯 ,並且在一個版本的.NET Framework上運行 的二進制文件應具有相同的行爲在 更高版本的.NET Framework上。

...

.NET Framework 4的是與 建成與.NET Framework版本1.1,2.0,3.0和3.5應用程序的向後兼容。換句話說,使用.NET Framework的早期版本 構建的應用程序和組件可以在.NET Framework 4上運行。

幾點建議:

1)閱讀這些鏈接:

2)查看是否可以以最小的.Net 3.5 Winforms應用程序重現問題

3)切割/粘貼確切的錯誤消息,以及任何相關的代碼(例如從您的獨立應用程序)

4)失敗其他所有,請考慮將<startup useLegacyV2RuntimeActivationPolicy="true" >添加到您的CLR啓動配置。我推薦這個,只能作爲暫時的解決辦法:

+0

@liortal - 除了向我們提供確切的錯誤信息和發佈代碼(如果可能),還請告訴我們操作系統在哪裏失敗。我假設「Windows 7」。預先感謝您... – paulsm4

+0

添加了確切的錯誤消息。 –

+0

我的印象也是你在答案中指定的內容,但是你的回答與這裏的其他答案相矛盾(由Alois Kraus提供)。 –

1

.NET 4.0引入新的CLR。所以基本4.0有沒有幫助運行3.5應用程序。 It has been already mentioned here

+0

是的.Net 4.0有一個新的CLR。但是大多數運行.Net 4.0 *的環境應該是向後兼容的。有什麼OP在這裏丟失... – paulsm4

+0

我很困惑.NET 4(或CLR 4)是否應該支持運行3.5或不(然後沒有明確的配置)。 –