2010-02-08 83 views
12

我對.NET程序集的物理位置有點困惑。採取好老LINQ。在我的web.config文件中它說:.NET在物理位置的程序集在哪裏?

<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 

這是對LINQ的參考。但是,這個DLL所指的位置究竟在哪裏?上面沒有任何路徑,它不在我的bin文件夾中。

我也有我的想法是一個第三方組件的參考:

<add assembly="MapInfo.CoreTypes, Version=4.0.0.483, Culture=neutral, PublicKeyToken=F548BCBA69D4B8DA" /> 

我怎麼知道這個地方位於我的機器上,如果它不是在bin文件夾?

此外,如果一個DLL文件位於bin目錄中,我是否可以假定它不需要在web.config中引用?

回答

11

我認爲他們位於GAC,它位於%WINDIR%\Assembly。更多信息請見Demystifying the .NET Global Assembly Cache(在The Code Project)。

+0

你可能在URL 'file:/// C:/ Windows/Assembly/GAC /'(希望我可以強制它成爲一個鏈接) – 2010-02-08 02:58:54

+0

如果MapInfo.CoreTypes是第三方,它位於? – Petras 2010-02-08 03:04:53

+0

如果它已經註冊到gac,它可能位於那裏。它不在嗎? – 2010-02-08 03:06:23

4

裝配和融合路徑探測相當複雜。我會說,通常.NET將解決組件是從兩個地方之一:

  1. 它要麼會發現它在本地目錄,如當前目錄,一個bin子目錄,或其他地方通過融合裝配規定 - 綁定邏輯,或

  2. 它會在全局GAC存儲中找到它,其中程序集可以通過名稱,版本和其他一些屬性進行註冊和查找。

爲了解決您的具體問題有關「bin」目錄,如果你正在使用ASP.NET(這是我從您的參考web.config假設),那麼,你就不需要包括路徑 - 爲了使.NET在「bin」目錄中查找程序集,ASP.NET將負責處理它需要做的任何事情。

2

簡短的回答是:它取決於很多東西。關於它如何加載組件,框架有它的rules。但是,你可以使用各種配置文件(machine.config等)來覆蓋它。要找出你的程序集在特定系統上的實際位置,請使用Assembly Binding Log Viewer。 (它是平臺SDK的一部分,只需打開一個SDK命令shell並運行fuslogvw.exe即可。)

1

的組件可以主要分佈在以下任一地方:

  • GAC - C:\ WINDOWS \裝配\ GAC(微軟 在一些 情況下提供,由第三方)
  • 的安裝文件夾(大部分 第三方控件)

您可以通過右擊該組件項目中的[R獲得有關程序集的路徑和其他信息推論和選擇屬性

3

一些.NET程序集都位於淨的安裝文件夾

C:\ Program Files文件(x86)的\參考 大會\微軟\ Framework.NETFramework \ v4.0

裏面有坐着的組件。在.NETFramework中,您可以找到.NET的不同版本及其相應的程序集。

+0

不是。這些是參考部件。它們是骨架組件,沒有實際的實現。 – k29 2016-11-08 15:40:55

相關問題