Add Reference对话框中缺少GAC程序集

5
我有一个Interop程序集存放在GAC中;Windows资源管理器清楚地显示它在C:\WINDOWS\assembly文件夹中列出。然而,当我试图在Visual Studio中添加对它的引用时,在“添加引用”对话框中却找不到它。
如果你也遇到了这个问题,那么原因是什么?我该怎么解决呢?
(如果你一定要知道,该程序集实际上位于C:\WINDOWS\assembly\GAC_MSIL文件夹中。)
7个回答

5

添加以下注册表键之一,其中 是要搜索的目录,而MyAssemblies是您程序集的类别。请注意,HKCU是为当前用户而设计的,而HKLM是为同一台计算机上的所有人而设计的。

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\<version>\AssemblyFoldersEx\MyAssemblies]@="<AssemblyLocation>"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\<version>\AssemblyFoldersEx\MyAssemblies]@="<AssemblyLocation>"

这与[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\AssemblyFolders]有何不同(区别在于<version>\AssemblyFoldersEx\MyAssemblies...)?阅读http://support.microsoft.com/kb/306149,我会认为没有<version>的键是正确的... - RonnBlack
正如@Soundararajan在本页面其他地方所指出的那样,如果您手动将GAC程序集添加到您的.csproj文件中,VS将成功找到并构建它们。只有当您想要使用VS“添加引用”GUI界面时,才需要按照此处描述的更改注册表键。 - Glenn Slayden

3
我创建了一个工具,可以帮助您实现目标。Muse VSReferences将允许您从“添加GAC引用”菜单项中向项目添加全局程序集缓存引用。点击此处获取更多信息。

很遗憾,它不支持Visual Studio 2012。 - Thought
1
@想法:我非官方地修改了这个扩展以支持VS2012和VS2013。可以在这里下载。 - Alex Essilfie

2

正如其他人所指出的那样,在GAC中安装程序集并不能保证它会出现在“添加引用”对话框中。我找到了这个MSDN页面,其中有详细信息。请参见“在“添加引用”对话框中显示程序集”一节。


1

或者,我编辑了项目文件并手动添加了引用。

  1. 在GAC中安装程序集。 gacutil /i "Foo.dll"
  2. 查找程序集的强名称。 gacutil /l 将给出列表供您选择。
  3. 在使用该程序集的项目文件中添加以下行(从上一步)
  4. <Reference Include="Foo, Version=x.x, Culture=neutral, PublicKeyToken=xxx, processorArchitecture=MSIL" />
  5. 然后它就可以工作了。 :)

0
"

\"C:\WINDOWS\assembly\"是一个特殊的文件夹,它在Windows资源管理器中将列出各个子文件夹中的程序集(以及程序集信息)。

对于您的情况,您可能需要将其指向物理路径,即\"C:\Windows\assembly\GAC_MSIL.....dll\",在VS.NET中使用。

"

我知道。但是你如何“浏览”到那个子文件夹呢?Windows资源管理器不允许你这样做。你是在暗示我必须退回到命令行编译吗?一定有更好的方法。 - Frederick The Fool
老实说,我也很困惑。首先,如果它出现在程序集文件夹中,你应该能够在“添加引用”对话框的“浏览”选项卡中查看。抱歉,伙计,希望有人能在这里提供帮助。 - o.k.w

0

您还可以将GAC文件夹映射到虚拟驱动器,然后通过浏览选项卡添加GAC引用。

手册 by MZ-Tools


-1

在 Visual Studio 命令提示符下使用此命令

regsvr32 /u shfusion.dll


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接