2008-12-05 82 views

回答

2

您可以使用Assembly.ImageRuntimeVersion。根據MSDN docs,默認情況下,它被設置爲用於構建程序集的CLR版本。雖然顯然它可以改變。

它是一個字符串屬性,所以你必須做一些字符串比較。

+1

所以推測這可能會區分1.1和2.0,但只不過是(直到4.0出來)? – 2008-12-05 09:22:53

1

我不這麼認爲。使用.NET 2.0構建.NET 1.1應用程序相對困難,但這不是不可能的 - 因此,如果您檢查了引用的應用程序的mscorlib版本,則可能會得到「很可能準確」的圖片,說明它是使用1.1還是2.0構建的+。

你還需要問自己在使用VS2008時想要什麼樣的答案,但是要針對.NET 2.0的目標進行構建。你真的對編譯器的哪個版本感興趣嗎?編譯器不同版本的輸出之間可能存在一些特徵差異。額外的功能也可以讓它消失 - 如果應用程序是以.NET 2.0爲目標編寫的,則可以找到類似於源代碼中的匿名類型的類型。當然,這首先依賴於語言功能......

爲什麼你需要知道這一點,出於興趣?

0

你也許可以使用System.Reflection來檢查系統引用程序集的版本號。

using System; 
using System.Reflection; 

class Module1 
{ 

    public static void CheckReferencedAssemblies(string assemblyPath) 
    { 
     Assembly a = Assembly.Load(assemblyPath); 

     foreach (AssemblyName an in a.GetReferencedAssemblies()) 
     { 
      // Check an.Version for System assemblies 
     } 
    } 
} 

編輯:我不知道我已經明白你想要什麼。

0

問題的一部分與您的問題是,.NET已經做了很好的工作,不會隨着版本的增加而改變代碼。我的意思是,mscorlib將在.NET 4.0中與.NET 1.1中的相同。

但我有點同意Jon Skeet的暗示問題:你爲什麼需要知道?它純粹是出於興趣,因爲我認爲這對你沒有關係。

1

對於框架< 2.0和框架4.0,引用的mscorlib的版本將爲您提供框架版本。對於框架2.0 - 3.5,請檢查是否存在任何對System.Core或其他3.5+程序集以及PresentationCore或任何其他3.0+程序集的引用。如果你沒有這些,它應該瞄準2.0。

相關問題