由於 .NET 4.0 使用新版本的 CLR,變化也不少,
例如:
mscoree.dll 變為 mscoree.dll 和 mscoreei.dll,
mscorwks.dll 變為 clr.dll,
mscorjit.dll 變為 clrjit.dll。
這導致在沒有安裝 .NET 2.0 的情況下,.NET 2.0 程式預設無法在 .NET 4.0 環境下執行(未安裝 .NET 2.0/3.0/3.5)。(糾正:不是檔名的變化導致無法執行,而是微軟的新策略是強烈建議程式在開發時使用的執行時版本下執行,這樣可以保證最大的相容性)
那麼怎麼辦呢?
Visual Studio 2010 對專案可以設定“目標框架”,在沒有安裝 .NET 3.5 的情況下可以選擇 .NET Framework 4、.NET Framework 4 Client Profile,在改變選擇之後,會生成一個配置檔案,內容如下:
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
把這個檔名改成你需要執行的程式的配置名,同時把程式與配置檔案放到一起,這個時候就可以開啟 .NET 2.0 的程式了。
以上只是我當時想出此方法的思路,當然你沒有必要這樣做。
你只要搞一個配置檔案或者將以上配置檔案內容新增到已有的配置檔案中。
supportedRuntime version="v4.0" 強制當前程式在 CLR 4.0 環境下執行,當然你可以設定 1.0、1.1、2.0,前提是執行環境內有對於版本的執行時。(第二次糾正:如果強制在 CLR 2.0 下執行,必須設定 supportedRuntime version="v2.0.50727",如果設定 v2.0 無效。)
順便說明目前的執行時版本只有 1.0、1.1、2.0、4.0,沒有3.0、3.5。
實際上僅對 Windows XP 需要這樣做,因為 XP 預設情況下沒有安裝任何 .NET 版本,Windows Vista/7 預設情況下分別安裝了 .NET 3.0、.NET 3.5,具有 CLR 2.0。
以上做法可能會有相容性問題,大型複雜程式不推薦這樣做。小工具或者自行編寫的程式(例如我)可以這樣做,出了問題自行解決。這樣在 XP 下,就不用安裝 N 個 .NET 版本。
本文沒有說明的內容,可以自行摸索。