问题标签 [global-assembly-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
10956 浏览

exception - System.IO.FileLoadException。无法加载辅助功能,版本=2.0.0.0

我最近才遇到这个问题,这可能是由于我在我的机器上安装了一些东西。不过我想不起来了。每隔一段时间,我就会收到一个 Microsoft .NET Framework 消息框,它会在我的计算机上弹出,它告诉我:

“您的应用程序的某个组件中发生了未处理的异常。如果您单击继续,应用程序将忽略此错误并尝试继续。

无法加载文件或程序集“辅助功能,版本=2.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。给定的程序集名称或代码库”

我尝试重新安装 .net 4.0 框架。我找不到 .net 2.0 框架下载来重新安装它。我尝试使用 gacutil /uf 可访问性来强制卸载该 dll,但这不起作用。我还检查了 Accessibility dll 的安装位置,并将其与其他机器进行了比较,所有内容都相同,包括 global.config 和 web.config。

此异常不仅发生在我机器上的一个进程中。由于这是我的 GAC 的问题,因此使用此程序集的任何应用程序都会引发相同的异常。

我打开了与 Fusion 的绑定日志记录,这是详细信息告诉我的:

任何帮助将不胜感激。

0 投票
1 回答
2631 浏览

.net - 全局程序集缓存 (GAC) 的用途是什么?

我已经在 GAC 中注册了一个 DLL。我可以在路径中看到 DLL: c:\windows\asssembly; 我想这意味着 DLL 注册正确。

但是,如果我必须在我的应用程序中使用 DLL,我仍然需要单击“添加引用”并从上述路径添加。

那么,如果我还需要再次添加引用,那么 GAC 有什么用呢?

0 投票
1 回答
321 浏览

msvcrt - 在 Vista (SP2) 64 位上:为什么我的 C/C++ 运行时 (CRT) 程序集缓存对我的应用程序不可见?

嗨,所有 VC++ 和 Windows 专家!;)

首先,我的背景:Vstudio、C & C++、Windows。(如果你愿意,你可以和我一起学习技术)。经过 5 天尝试各种可能性、论坛和修复甚至更改操作系统平台后,我决定在这里发帖(或跳出窗口!)我在 AGONy 试图解决这个问题,因为它是阻止我的实际开发工作!!. :)

Soo.. sceratio 是:出现问题的开发机器:操作系统:带有 SP2 的 Windows Vista 64 位(即使在使用 VMWare 运行的 32 位 XP SP2 虚拟机上发生相同的问题。开发 IDE:带有 SP1 的 Visual Studio 2008已安装。输出二进制类型:.DLL(它的命运是成为一个开发插件。IDE caled RealStudio)

问题/问题:我正在使用 VStudio 2008 开发一个 32 位 C++ DLL。它包含一个相当大的 C++ 库,称为 ASDCP(用于音频/视频编解码器处理)——它是用 PURE C++ 编写的,并且具有完整的内置支持在 Win32、Linux、MacOS 等上构建。

现在 ASDCP 库使用 C++ 标准库(存储在 MSVCP90.dll 和 .lib 文件中)。因此,当我构建自己的插件(DLL)并允许它是调用者应用程序(称为 RealStudio,另一个开发 IDE)时,没有 ASCP 库(因此不需要链接 C++ Std.Libs),它工作正常. 但是当我从 ASDCP 库添加代码,并选择静态链接(/MT)C++ 运行时库,然后加载插件并运行 RealStudio 时,它会因内存泄漏而崩溃——可能是“访问冲突”——可能是由各种 DLL 之间的一些不匹配引起的。


现在,我对这篇文章的问题是,当我在 VStudio 2008 中动态链接 CRT,然后尝试通过 rnnign RealStudio 加载插件时——该死的东西根本无法找到 Microsoft.CRT 的 Side-by-Size ASSEMBLY CACHE .VC90!!我已经处理了所有清单文件,将清单文件嵌入到 DLL 中,检查(大约 10 次!)WinSxs 程序集缓存中的 CRT 版本,反对我的清单文件/依赖项需求。

但不知何故...... RealStudio(RunAs Admiistrator)无法加载我的 CRT 9 DLL(特别是 MSVCP90.dll)。我在 MSDN 和其他论坛上花了大约 15 个小时来查看类似的问题和解决方案,并按照微软论坛版主的建议实施了这些解决方案。但无济于事。

所以..你如何获得一个在 64-Windows(Vista SP2)下运行的 32 位 C++ DLL,以“查看”相关 CRT 依赖项的 Assembl 缓存并加载它??????

帮助!?!?!拜托了。。

提前深深感谢帮助我恢复理智!

迪内什

0 投票
2 回答
1168 浏览

gac - 我可以使用 Pascal 脚本 (InnoSetup) 注册到 GAC 吗?

我正在使用 InnoSetup 安装我构建的应用程序。我的客户要求它在使用此 InnoSetup 插件安装时下载最新的 DLL:

http://www.sherlocksoftware.org/page.php?id=50

很简单。我让它按我想要的方式工作,但是没有[Files]部分(因为它下载它们而不是将它们构建到脚本中),我不确定如何将下载的 DLL 注册到 GAC。在[Files]部分中,我使用了标志gacinstall

现在我不再使用[Files],我想知道是否有办法通过 Pascal 脚本将 DLL 安装到 GAC?

这是我的设置脚本的相关部分:

谢谢你的帮助。

0 投票
1 回答
172 浏览

asp.net - 全局程序集缓存 - 通过代码库问题部署

基本上,我们有许多服务器在不同的应用程序池中运行许多 ASP.NET 站点。我们每 2 周滚动一次更新。我的基本问题归结为:

将 GAC 代码库功能与我们在独立服务器上维护最新版本的类库的 URL 一起使用是在所有这些服务器上简单更新所有这些站点的好方法吗?

是否有任何普遍的陷阱或潜在的问题可能会出现?

我读到下载缓存是按用户使用的。在这种情况下,服务器上的所有站点会简单地使用 ASP.NET 用户下载缓存中的版本吗?

只有在站点启动时才会更新吗?如果一个站点重新启动并且所有其他站点都在使用下载缓存中的版本怎么办?

无论如何也可以以这种方式管理 .aspx/.js/.css/.ascx 文件?

0 投票
1 回答
2858 浏览

wix - 卸载时孤立的 WiX 条件功能/组件

编辑:引用我自己的话,因为我在下面的评论之一中更好地总结了这个问题......</p>

我有一个条件,在安装包时为真,但在删除它时不为真。我希望 MSI 记住它已经安装了条件组件并通过卸载将其删除,但事实并非如此。我正在尝试找出 A) 清理此孤立组件的正确方法,以及 B) 将来防止此问题的最佳方法。

我想我的问题归结为,在卸载产品后删除孤立的功能/组件是否安全?有没有办法检查什么(如果有的话)仍在引用我认为是孤儿的组件?以及如何修复我的安装程序以防止将来发生这种情况?

我们有一个 wix 项目来安装库 Foo。默认情况下,此安装程序将 Foo.dll 的副本放入 GAC 和文件夹中Program Files\Reference Assemblies\Foo\<version>。安装程序还添加了两个注册表项,一个是自定义键,用于存储 Foo 文件夹的路径以供将来安装时重复使用,另一个告诉 Visual Studio<version>在其搜索已安装库时包含完整文件夹路径,以便 Foo 显示在“添加引用”对话框。可以一次在机器上安装多个版本的 Foo 库,每个版本都位于<version>Foo 下的相应文件夹中。

Foo 2.0.0 有一个错误通过测试,Foo 2.0.1 包含错误修复,没有其他更改。决定由于错误修复是唯一的更改,我们将向 GAC 添加一个策略文件,它将 Foo 2.0.0 的引用重定向到 Foo 2.0.1。此策略文件已作为新功能中的新组件添加到安装程序中。添加了升级标签以在安装 Foo 2.0.1 时检测和删除 Foo 2.0.0。策略功能的安装以检测到 Foo 2.0.0 为条件。一切似乎都正常,Foo 2.0.1 被推出。

现在,一年后,我们发现我们再次错过了注意到一个错误,这次是在安装程序设置而不是库代码中。事实证明,当 Foo 2.0.1 替换 2.0.0,然后被卸载时,策略文件是孤立的并保留在 GAC 中,而所有其他文件和密钥都被删除。我已经在全新安装的 Windows 上对此进行了测试(虚拟机非常有用),并确认该问题可以被复制,即没有对组件的额外引用偷偷进入以使其落后。

所有这些最初都是在 WiX 3.0 中完成的,但我们最近升级到使用 WiX 3.5。我们的 WiX 代码如下所示:

0 投票
2 回答
4950 浏览

.net - 是否有任何 GAC 管理工具?

是否有任何 GUI 可以查看、添加、删除全局程序集缓存中的程序集?

0 投票
5 回答
5018 浏览

.net - 引用全局程序集缓存

我有一个项目需要使用 NHibernate 与我的 Oracle 数据库进行通信。

我工作场所的许多项目都使用 NHibernate,因此 NHibernate 程序集被放置在 Global Assembly Cache 中,这是一个我不完全了解的工具。根据我的研究,我收集了以下信息:

  1. 全局程序集缓存是许多项目引用的 dll 的中央存储库。这避免了 DLL Hell 的问题 - 当您的 dll 的新版本发布时,您在缓存中更新它一次,所有引用它的 .NET 项目现在都将使用新版本。
  2. 您不能在程序集缓存中添加对程序集的引用。“已在 GAC 中注册的程序集不会出现在 [添加引用] 列表中”。但是,您可以通过破坏注册表来强制使它们出现。
  3. 您可以轻松地在程序集缓存中添加对程序集的引用。“只需使用添加引用窗口添加对您在 GAC 中安装的程序集的引用”。(我倾向于不相信这一点,因为我在“添加引用”窗口中没有看到任何 GAC 程序集)。
  4. 我工作场所的几个项目确实引用了 GAC 中的许多程序集。这些程序集从未出现在“添加引用”菜单中,所以我知道我的前辈没有使用注册表修改技术。然而,它们显然源自 GAC——它们的文件路径是 C:\Windows\assembly 的子目录。

第二点显然与其他三点相矛盾,但如果它只是错误的,我在引用库时不会有任何问题。它肯定反映了现实,因为在“添加引用”窗口中找不到我的 GAC 程序集。

我想知道两件事:

  • 开发人员何时会想要使用 GAC?没有注册表技巧就无法引用的库有什么用?
  • 我的前辈在不触及注册表的情况下,采取了哪些步骤来引用 GAC 中的库?
0 投票
1 回答
1642 浏览

gac - 如何判断哪些应用程序在 GAC 中注册了给定程序集?

尝试使用 gacutil.exe 删除给定程序集(在本例中为 log4net.dll,但它应适用于任何类似情况)时,由于应用程序需要该程序集,操作失败。但是,我不知道如何判断哪些应用程序实际需要它。由于输出似乎表明该要求已记录在 MSI 数据库/Windows Installer 中,因此某些实用程序似乎能够列出在 MSI 数据库中注册的所有 GAC 程序集(我可以只使用 log4net 搜索条目.dll)或允许我指定一个特定的 GAC 程序集,它会列出依赖项(如果存在的话,最好包含任何相关的依赖项链:)

谢谢!

0 投票
1 回答
1774 浏览

c# - 在 GAC 中注册新程序集后,Visual Studio 找不到任何 dll

我已将一些程序集注册到全局程序集缓存,在 Visual Studion 命令提示符处执行以下命令。

之后,我无法在 Visual Studio 中编译任何东西,因为它找不到任何 DLL。当我尝试编译 Silverlight 项目时,它给了我这样的错误消息:“错误 4 无法加载文件或程序集 'System.Windows, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' 或其依赖项之一。”

我已经更新了所有参考资料,文本编辑器没有显示任何错误。

有人可以帮忙吗?

更新:我修复了 .NET Framework 安装,问题仍然存在