2009-10-05 79 views
4

什麼可以是問題,如果我建立一個解決方案,所有的projets是targetFrameworkVersion = 2.0,但一個在與targetFrameworkVersion = 3.5和C#.NET框架版本

的3.5功能
  1. 沒有使用
  2. 一些使用3.5的功能,但調用3.5代碼的類從未實例化
  3. 一些3.5特性用於某些類中,但這些類實例化但3.5中的代碼從未調用過
  4. 3.5代碼被調用
+0

您是否在使用任何構建工具?或Visual Studio? – abhilash

+0

取決於項目的視覺工作室或團隊系統服務器buil – Toto

+0

您可以在不實例化類的情況下使用.NET 3.5的哪些功能?或者你在談論C#3.0? –

回答

1

這取決於你的意思是「功能」。有像var關鍵字和lambda表達式這樣的編譯時功能,並且像LINQ或WCF這樣的運行時功能需要.NET 3.x運行庫中的庫。

我假設你使用Visual Studio 2008,它將處理所有的編譯時功能。如果你正在使用的是編譯時功能,那麼在所有情況下,一切都會正常工作。我在當前的項目中經常這樣做。

如果您正在使用運行時功能,那麼我相信這是它如何抖了出來:

  1. 事情會只是工作。
  2. 我認爲這也會起作用。
  3. 它取決於何時靜態函數被打印,以及靜態函數中是否有任何3.5庫引用代碼。
  4. 當包含3.5庫函數的函數被調用時,可能MissingMethodException

如果您打算使用運行時功能,我只需在App.config中添加一個密鑰,以便運行時需要3.5運行時,它會檢查啓動如果它不存在,就會炸彈。那麼你不需要弄清楚所有這些排列,你的應用程序就會更加穩定。

+0

好吧,我在全球範圍內也一樣。我主要關心的是2和3個運行時功能。我想知道是否有必要檢查所有組件以及何時檢查。 – Toto

+0

那麼,問題是你正在編譯一個明顯安裝了3.5框架的機器。所以在一個DLL中的所有引用都能正常工作和編譯。但是,然後你正在加載(並JITting)該DLL可能會或可能不會安裝3.x運行時的機器上。 CLR通過C#Jeffery Richter對所有這些活動何時發生進行了很好的討論,並且是獲得確切答案的最佳選擇。 IIRC,當一個函數被打亂時,你只會遇到問題,並且函數在第一次被調用時被拋出。 – Lee

+0

好的,所以如果在所有的客戶端機器上安裝3.5框架,1,2,3,4都可以使用? – Toto

0

首先,你需要知道你的目標實際上是.NET 2.0 SP1

您的項目如何相關?你有沒有建立在.NET 2.0下的引用.NET 3.5項目的項目(反之亦然)?

+0

我都有。 3.5引用2.0和2.0引用3.5 – Toto