18

我对 .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吗?

4

6 回答 6

15

我认为它们位于GAC,它位于%WINDIR%\Assembly. 更多信息在Demystifying the .NET Global Assembly Cache(在代码项目中)。

于 2010-02-08T02:51:21.430 回答
9

第三方程序集可能不在GAC中,请参阅 MSDN 文章运行时如何定位程序集以了解规则集。或者,试试SysInternals FILEMON

于 2010-02-08T03:08:25.620 回答
6

一些 .Net 程序集位于 .Net 的安装文件夹中

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0

里面有集会。在上一级的 .NETFramework 中,您会发现不同版本的 .NET 及其相应的程序集。

于 2014-01-27T20:29:38.973 回答
5

组装和融合路径探测非常复杂。我会说,.NET 通常会从以下两个位置之一解析程序集:

  1. 它会在本地目录中找到它,例如当前目录、bin 子目录或 Fusion 程序集绑定逻辑指定的其他位置,或者

  2. 它将在全局 GAC 存储中找到它,可以在其中注册程序集并按名称、版本和其他几个属性查找程序集。

为了解决您关于“bin”目录的具体问题,如果您使用的是 ASP.NET(我从您对 的引用中假设web.config),那么是的,您不需要包含路径 - ASP.NET 会处理为了使 .NET 在“bin”目录中查找程序集,它需要做的任何事情。

于 2010-02-08T03:06:27.543 回答
3

简短的回答是:这取决于很多事情。框架有它如何加载程序集的规则。但是,您可以使用各种配置文件(machine.config 等)覆盖它。要找出您的程序集在特定系统上的实际位置,请使用程序集绑定日志查看器。(它是平台 SDK 的一部分。只需打开 SDK 命令外壳并运行 fuslogvw.exe。)

于 2010-02-08T03:51:30.567 回答
3

程序集主要位于以下任一位置:

  • GAC - C:\Windows\Assembly\GAC(Microsoft 提供,在某些情况下由第三方提供)
  • 安装文件夹(大部分第三方控件)

您可以通过右键单击项目引用中的程序集并选择Properties来获取有关程序集的路径和其他信息。

于 2010-02-08T08:42:08.117 回答