Visual studio 在VisualStudio中,如何查看程序集是否从GAC引用?

Visual studio 在VisualStudio中,如何查看程序集是否从GAC引用?,visual-studio,assemblies,Visual Studio,Assemblies,简单问题:在VisualStudio中,如何查看程序集是从GAC引用的,还是仅通过('normal')文件系统引用的 我想我可以通过查看.csproj文件来推断出这一点,但也许不能。下面是我的.csproj文件的一个输出: <Reference Include="MoreLinq, Version=1.0.11522.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</

简单问题:在VisualStudio中,如何查看程序集是从GAC引用的,还是仅通过('normal')文件系统引用的

我想我可以通过查看.csproj文件来推断出这一点,但也许不能。下面是我的.csproj文件的一个输出:

<Reference Include="MoreLinq, Version=1.0.11522.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\lib\MoreLinq.dll</HintPath>
</Reference>
<Reference Include="Oracle.DataAccess, Version=9.2.0.401, Culture=neutral, PublicKeyToken=89b483f429c47342">
  <SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="System" />

假的
..\lib\MoreLinq.dll
假的
我知道Oracle.DataAccess和System是从GAC引用的,MoreLing(谢谢Jon!)是通过文件系统引用的。我能看到的唯一区别是MoreLinq有一个HintPath值。这就是GAC引用与文件引用的区别吗?无论如何,我在VS中看不到这一点


由于这对程序集的加载方式有很大的影响,我认为这些信息很容易获取,但我可能错了?

我认为如果不运行该程序,您无法确定这一点。如果引用的“Copy local”属性设置为False,则表明DLL来自GAC。 但请记住,GAC的优先级高于文件系统的其余部分(包括当前目录)


在运行时,您可以通过Debug/Windows/Modules窗口确定,在那里您可以看到加载的DLL的确切路径。

我不是专家,但据我所知,您在问题中显示的两个引用之间的差异仅限于构建时。在运行时,系统将使用它找到的任何DLL—从GAC开始,然后在与可执行文件相同的文件夹中查找。这意味着您无法在设计或编译时确定程序实际运行的时间


(顺便说一句,AFAIK Visual Studio不使用GAC的DLL编译任何东西。这有时会造成混乱,因为您在设计/构建时看到的(本地DLL)与GAC在运行时看到的不一致)。

您是对的,通过GAC引用的文件的Copy Local=false,通过文件系统引用的文件的Copy Local=true。但是这个属性是可编辑的,所以我不能100%确定。我的VS2010中似乎没有一个模块windows,它可能被移动或调用了其他东西吗?另外,我更希望在编译时有清晰的信息。但是谢谢你的提示!我认为您必须处于调试模式才能看到debug/Windows/Modules菜单项。@Benjol编写的内容是正确的:运行时将使用它所发现的内容,与编译过程无关(当然是使用正确的版本号)