2015-05-22 26 views
5

我在我的電腦上安裝了第三方程序。 我打開了該.dll的是,在程序Ildasm.exe內置了此程序的一個和檢查清單:如何查找程序正在使用哪個mscorlib.dll?

.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)    // .z\V.4.. 
    .ver 2:0:0:0 
} 

所以該程序使用.NET或者2.0,3.0或3.5。

我在我的電腦上搜索了mscorlib.dll,發現有61個文件。

如何查找程序實際使用的這些.dll中的哪一個?

我也注意到,這些一堆在目錄名爲: C:\ Program Files文件(x86)的\參考大會\微軟\ Framework.NETPortable \ V4.0 \資料\ ProfileXXX \ mscorlib.dll中,其中XXX是一個1-3位數字。

這是怎麼回事?我可以理解,每個.net版本(2.0,3.0,3.5 ...)將具有不同的文件,但不應該添加多達61個文件。每個配置文件之間有什麼區別?

這是.dll地獄問題的.net解決方案的樣子嗎? 大量版本的相同文件+公鑰來安全地標識.dll。

誰刪除了不再使用的.dll文件?似乎每個程序都有自己的.net版本。最終必須填滿磁盤?

+1

您是否已經嘗試過[Fusion Log viewer](http://msdn.microsoft.com/en-us/library/e74a18c4%28VS.80%29.aspx)?我沒有看過如果這可以用來檢查mscorlib.dll,但是。 http://stackoverflow.com/a/3952202/255562 –

+1

看起來像重複的,雖然這些答案是幾年前,可能會過時。 http://stackoverflow.com/questions/227886/how-do-i-determine-the-dependencies-of-a-net-application – Almo

+0

謝謝Ashish!根據這個工具程序使用C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll。與mscorlib.dll不同的名稱有點奇怪,但確定。此外,它還表示它通過查看GAC找到了該程序集。 – Andy

回答

7

你剛剛發現一個簡單的事實,.NET已經非常流行,13年後它有很多版本。大多數程序員都知道桌面版本的版本爲1.0,1.1,2.0和4.0。而且它總是由NGEN預先拼寫,乘以2.大多數不知道mscorlib.dll包含非託管代碼,因此它有兩個不同的版本,一個用於32位,一個用於64位代碼,乘以2再次。

這只是桌面。然後,您將擁有針對不同運行時環境的版本。有Silverlight,5個不同的版本。 Windows Phone,4個版本。 Windows Store,2個版本。和XBox。他們很重要,因爲您可以構建在這些目標上運行的程序。

然後便攜式類庫,它們允許你選擇你想要支持的目標集。每個選項的排列都有其自己獨特的參考彙編,因此您不會意外使用其中一個目標上不可用的類型。

所以這裏真正的驚喜是你找到了幾個他們。

請記住,您發現絕大多數只是參考裝配。它們只包含元數據,無代碼,存在於c:\ Program Files(x86)\ Reference Assemblies目錄中。您只在構建程序時使用它們。在運行時,「真正的」被使用,它與你所建立的完全不同。確保它們匹配是微軟的負擔,你不會有問題,他們非常擅長。

除此之外,沒有什麼特別的。它要求2.0版本,即.NET Framework 2.0到3.5版本中使用的版本。即使你的桌面上沒有安裝這些版本,如果你有4.0,4.5或4.6,你仍然可以運行它。桌面CLR自動將2.0.0.0的請求轉換爲4.0.0.0版本,它非常兼容。

相關問題