.NET中的程序集位于物理位置?
我对.NET程序集的物理位置有点困惑。 采取好的旧LINQ。 在我的web.config
文件中说:
<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
被引用?
第三方程序集可能不在GAC中,请参阅MSDN文章运行时程序如何为这组规则找到程序集。 或者,尝试SysInternals FILEMON。
我认为它们位于位于%WINDIR%Assembly
中的GAC。 更多信息在解密.NET全局程序集缓存(在代码项目中)。
装配和融合路径探测相当复杂。 我会说通常.NET会从两个地方之一解析程序集:
它可以在本地目录中找到它,例如当前目录,bin子目录或由Fusion程序集绑定逻辑指定的其他位置,或者
它会在全球的GAC商店中找到它,其中程序集可以按名称,版本和其他一些属性进行注册和查找。
要解决你关于'bin'目录的具体问题,如果你使用的是ASP.NET(我从你对web.config
的引用中假设),那么是的,你不需要包含路径 - ASP.NET会为了使.NET在“bin”目录中查找程序集,请注意它需要做的任何事情。