2010-10-17 87 views
14

我們的應用程序使用VS 2008構建,使用Linq並將Target Framework設置爲.NET Framework3.5。如何強制應用程序使用.NET 3.5或更高版本?

只有在計算機上安裝了.NET 3.5或4時才能正常工作。

但是,在安裝了.NET 2(或3.0)和.NET 4的計算機上,應用程序使用.NET 2加載,並在訪問Linq時崩潰,因爲它查找.NET 3.5庫。

在app.config中使用標籤似乎沒有幫助,因爲它指定CLR版本,在.NET 3.5中爲2。

請注意,我們的安裝驗證是否安裝了.NET 3.5或更高版本。

有沒有辦法告訴應用程序加載:

  • 最高CLR發現,或
  • CLR 4如果已安裝,並CLR 2如果CLR 4未安裝,或者
  • CLR 2如果安裝了.NET 3.5並且如果未安裝.NET 3.5,則爲CLR 4

(請注意,類似的問題在the Community Content section of the Element documentation沒有回答)

回答

13

成型的問題使我的答案。正如the Element documentation提到,

當運行時 的多個版本的支持下,第一個元素 應該指定最優選 版本的運行時,最後 元素應指定至少 首選版本。

這樣就實現了第二個選項的方式(「CLR 4如果已安裝,和CLR 2是CLR 4未安裝」)是扭轉的app.config的元素的順序:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0"/> 
     <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

這樣,如果安裝了.NET 4,它將被加載,如果不是,則會加載較早的版本。

+1

您無法使用此設置進行調試 - 它提供了一個錯誤,VS2008不支持.NET 4。儘管在VS之外運行發佈版本,但它工作正常。 – ChrisF 2010-10-17 12:25:25

+0

至少在Framework v3.5中,如果元素不在文件的末尾(之前),那麼我有過應用程序無法啓動的經驗。如果你遇到啓動問題,值得嘗試將這段配置移到文件末尾。 – SteveWilkinson 2011-12-21 22:06:45

+0

如果我只支持v4.0作爲SupportedRuntime,並且系統僅支持v4.5,那麼它會啓動v.4.5嗎?如何強制使用一個版本? – Kamilos 2014-01-27 09:56:56

-1

如果您有一個調用.NET DLL的非託管EXE,則還需要創建一個foo.exe.config文件,其中包含上面的<startup>...塊。

0

另一個有用的鏈接是MSDN上的this page。這將顯示app.config中所需的所有值,如果您只想定位客戶端配置文件或需要完整配置文件。

0

.NET Framework版本3.0和3.5使用CLR的版本2.0.50727。

相關問題