2010-12-15 175 views
9

可能重複:
Determine framework (CLR) version of assembly如何檢查DLL文件編譯的.NET Framework版本?

我這是在.NET Framework編譯庫/ DLL文件。

現在(沒有任何編碼)我想檢查用於編譯這個庫的.NET Framework版本 。我需要知道它是2.0,3.5還是4.0。 有什麼工具可以幫助我實現這個目標嗎? (我知道它應該在Framework的4.0版本下編譯,但我需要100%確定使用了Framework 4.0的版本)。

+0

鏈接的答案是不是一個真正的比賽。 CLR版本!=框架版本。 @truth:你的問題可能會被關閉,轉發並指出dup不能回答你的問題。 – 2010-12-15 14:13:45

+0

@Hans:你爲什麼要轉發?只需編輯問題或評論即可。如果錯誤關閉,它會重新打開。 – Cascabel 2010-12-15 15:24:43

回答

13

您必須使用ILDASM。您雙擊清單,你會得到

//元數據版本:V2.0.50727

//元數據版本:v4.0.30319

框架3.0和3.5都算不上新版本的CLR,所以你會繼續擁有V2.0。至多,您可以通過查看依賴關係來猜測您將需要哪個框架。某些dll僅在3.5版本中可用,但如果您手動將它們複製到2.0版PC中,該應用程序將可以正常工作。 檢查C:\ windows \ Microsoft.NEt \ Framework,你會在他們的相應文件夾中找到它們。

希望這有助於

4

使用ILDASMReflector檢查程序集清單並查看引用的System。*程序集版本。

例如,使用ILDASM查看.NET程序集的清單,我可以看到,這是建立目標框架1.1

// Metadata version: v1.1.4322 
.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 1:0:5000:0 
} 
.assembly extern System.Web 
{ 
    .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A)       // .?_....: 
    .ver 1:0:5000:0 
} 
.assembly extern System 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 1:0:5000:0 
} 
.assembly extern ICSharpCode.SharpZipLib 
{ 
    .publickeytoken = (1B 03 E6 AC F1 16 4F 73)       // ......Os 
    .ver 0:84:0:0 
} 
.assembly ReverseProxy 
{ 

    // --- The following custom attribute is added automatically, do not uncomment ------- 
    // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool, 
    //                    bool) = (01 00 00 01 00 00) 

    .hash algorithm 0x00008004 
    .ver 0:0:0:0 
} 
.module ReverseProxy.dll 
// MVID: {3F1B8B81-1B8F-4DD7-A71F-FD019C095F25} 
.imagebase 0x00400000 
.file alignment 0x00000200 
.stackreserve 0x00100000 
.subsystem 0x0003  // WINDOWS_CUI 
.corflags 0x00000001 // ILONLY 
// Image base: 0x010A0000 
+1

您應該看看TargetFrameworkAttribute--不是在系統庫 – Lu55 2013-09-02 12:45:34

+0

@ Lu55的特定版本中,請記住,TargetFrameworkAttribute僅在Framework 4.0中引入 – 2013-09-07 00:45:51

1

我會用Reflection

Assembly a = Assembly.ReflectionOnlyLoadFrom("C:\\library.dll"); 
Console.WriteLine(a.ImageRuntimeVersion); 

但是,我是一名程序員。我不知道如何確定這些類型的東西「沒有任何編碼」。

+1

儘管這是一個糟糕的答案,但對於單獨的最後一行的upvote這個答案。 :) – Arafangion 2013-06-03 04:04:37

9

如果你有它作爲項目的參考。您應該能夠查看該引用的屬性下的Runtime版本。無需編碼= - )

alt text