Where are assemblies in .NET physically located?

I am a little confused about where .NET assemblies are physically located. Take good old LINQ. In my web.config file it says:

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

This is the reference to LINQ. But where exactly is the DLL this refers to located? There isn't any path in the above and it's not in my bin folder.

I also have what I think is a third-party assembly reference:

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

How can I tell where this is located on my machine if it's not in the bin folder?

Also, if a DLL file is in the bin directory, can I assume that it doesn't need to be referenced in web.config ?


Third-party assemblies might not be in the GAC, see MSDN article How the Runtime Locates Assemblies for the set of rules. Or, try the SysInternals FILEMON.


I think they are located in the GAC, which is located in %WINDIR%Assembly . More information is in Demystifying the .NET Global Assembly Cache (at The Code Project).


Assembly and Fusion path probing is pretty complicated. I will say that typically .NET will resolve an assembly from one of two places:

  • Either it will find it in local directory, like the current directory, a bin subdirectory, or other place specified by the Fusion assembly-binding logic, or

  • it will find it in the global GAC store, where assemblies can be registered and looked up by name, version, and a couple other attributes.

  • To address your specific question about the 'bin' directory, if you're using ASP.NET (which I assume from your reference to web.config ), then yes, you don't need to include the path - ASP.NET will take care of whatever it needs to do in order to make .NET look for assemblies in the 'bin' directory.

    链接地址: http://www.djcxy.com/p/44438.html

    上一篇: 如何阻止从GAC加载某些程序集?

    下一篇: .NET中的程序集位于物理位置?