2010-02-08 86 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

相关问题