.NET中的程序集位于何处?

时间:2010-02-08 02:49:19

标签: .net assemblies file-structure

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

6 个答案:

答案 0 :(得分:14)

我认为它们位于%WINDIR%\Assembly,位于{{1}}。更多信息位于 GAC Demystifying the .NET Global Assembly Cache)。

答案 1 :(得分:7)

第三方程序集可能不在GAC中,请参阅MSDN文章 How the Runtime Locates Assemblies 以获取规则集。或者,尝试使用SysInternals FILEMON

答案 2 :(得分:4)

装配和融合路径探测非常复杂。我会说通常.NET会从两个地方之一解析一个程序集:

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

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

  3. 要解决有关“bin”目录的特定问题,如果您使用的是ASP.NET(我假设您引用web.config),那么是的,您不需要包含路径 - ASP.NET将处理它需要做的任何事情,以使.NET在'bin'目录中查找程序集。

答案 3 :(得分:4)

某些.Net程序集位于.Net

的安装文件夹中

  

C:\ Program Files(x86)\ Reference   组件\微软\ Framework.NETFramework \ V4.0

里面有集会。在.NETFramework中,您可以找到不同版本的.NET及其相应的程序集。

答案 4 :(得分:2)

简短的回答是:它取决于很多事情。框架的rules用于加载程序集。但是,您可以使用各种配置文件(machine.config等)覆盖它。要查找程序集在特定系统上的实际位置,请使用Assembly Binding Log Viewer。 (它是平台SDK的一部分。只需打开SDK命令shell并运行fuslogvw.exe。)

答案 5 :(得分:2)

组装主要位于以下任何一个地方:

  • GAC - C:\ Windows \ Assembly \ GAC(Microsoft 一些人提供并由第三方提供 例)
  • 安装文件夹(大部分 第三方控制)

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