问题标签 [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 投票
0 回答
2217 浏览

.net-4.0 - 安装 .NET Framework 4 时缺少 GAC

我在运行Windows Small Business Server 2003 Standard Edition的客户计算机上安装了完整版的 .NET Framework 4(客户端配置文件 + 扩展) 。安装成功,没有任何错误。日志文件中也没有提到任何错误...

但是.NET Framework 4 GAC(全局程序集缓存)完全丢失了!换句话说,缺少以下文件夹:-

如果我查看该C:\Windows\Microsoft.NET文件夹,我只能看到 2 个子文件夹(如下所示),没有别的。

服务器仍然安装了 .NET Framework 3.5 并且运行正常。这意味着下面的 GAC 文件夹存在并且其中包含所有 .NET 库 DLL。但当然,那里没有 .NET 4 DLL。

由于缺少 .NET Framework 4 GAC,我的应用程序都没有运行。他们都抱怨缺少SystemSystem.Xml引用。如果我将丢失的文件从C:\Windows\Microsoft.NET\Framework\v4.0.30319文件夹复制到我的应用程序目录,他们将停止抱怨这些文件并开始抱怨其他丢失的 .NET 文件。显然我使用了很多 .NET 库引用,并且我不想将整个 .NET Framework 文件夹复制到我的每个应用程序中。

有谁知道如何创建缺少的 GAC?或者至少找出导致 GAC 消失的原因?我多次尝试重新安装 .NET Framework 4,但 GAC 总是丢失...


编辑:我也尝试过运行gacutil.exe -l以查看 GAC 中的内容,它只列出了 1.0 到 3.5 版本的 .NET 程序集。缺少所有 .NET 4 程序集。

注意:.NET 4 版本的gacutil.exe仅附带 Visual Studio(或 Windows SDK),因此我必须将文件复制到客户站点。

0 投票
1 回答
2719 浏览

c# - 程序集不在 GAC 中,但 gacutil 显示它在那里

我注意到我的系统上有一些关于全局程序集缓存 (GAC) 的奇怪行为。我感兴趣的程序集是 log4net Version= 1.2.11.0

的输出gacutil /l "log4net"是:

C:\Windows\system32>gacutil /l "log4net" Microsoft (R) .NET 全局程序集缓存实用程序。版本 4.0.30319.1 版权所有 (c) Microsoft Corporation。版权所有。

全局程序集缓存包含以下程序集:
log4net、Version=1.2.10.0、Culture=neutral、PublicKeyToken=1b44e1d426115821、processorArchitecture=MSIL
log4net、Version=1.2.11.0、Culture=neutral、PublicKeyToken=669e0ddf0bb1aa2a、processorArchitecture=MSIL

项目数 = 2

然而,通过 explorer shell(重启前后)查看 GAC 只显示一个版本:

在此处输入图像描述

更复杂的是,我的应用程序无法解析程序集,但是当我将它放入应用程序库(bin 文件夹)时可以正常工作。根据这篇文章,GAC 将在应用程序库之前进行探测- 这将指向程序集不在 GAC 中。

log4net Version=1.2.11.0在 GAC 中也是如此吗?如果是这样,为什么我的应用程序找不到它?

0 投票
1 回答
3580 浏览

c# - gacutil 和环境中的微小版本差异导致重大问题

情况如下:

我有一个在 .NET 2 中编译的 DLL,它位于全局程序集缓存中。我有一个myDLL.dll.config文件,内容如下:

然后我使用程序集链接器创建策略文件:

但是当我尝试使用将策略文件加载到全局程序集缓存中时

我得到错误:

.NET 全局程序集缓存实用程序版本是 2.0.50727.42,但我通过创建新的 C# .NET 2 控制台项目并执行以下命令检查了构建环境的版本:

我的 Environment.Version 是 2.0.50727.5466。

这一切都发生在同一台计算机上,特别是我的开发箱。

我可以将 myDLL.dll 从 \bin\release 文件夹复制到 c:\Windows\assembly 文件夹中,没问题。但是尝试将 policy.1.2.myDLL.dll 文件从 \bin\release 复制到 \assembly 或使用 gacutil 失败。

0 投票
3 回答
6588 浏览

c# - 如何将 DLL 添加到 GAC

这是我的代码:

如何将 DLL 添加到程序集文件夹?

0 投票
1 回答
1203 浏览

gac - 多个 .dll 的 GAC 程序集重定向

我正在尝试重定向一个特定.dll的,我们称之为MyAssembly.dll。此程序集有两个版本:

我希望这两个程序集重定向到它的第三个版本:1.2.0.0. 为此,我编写了这个.config文件来构建Publisher Policy要在 GAC 上应用的文件:

有了这个,我创建了适当的.config文件来生成策略。但是当我想创建Policy.

在下一步之前注意:程序集版本控制的工作方式如下:

第一次我想创建一个策略时,我意识到,如果我要重定向的程序集版本是:1.0.0.0我必须创建一个匹配的策略,如下所示:

有了这个,我可以将任何MyAssembly.dll从 1.0.* 重定向到 1.1 版。

但是,如果我想重定向多个程序集,我该如何生成该策略,就像我上面解释的那样?我的保单应该是什么样子?

如果我有两个程序集:

我该如何构建PublisherPolicy

0 投票
2 回答
12338 浏览

c# - 如何以编程方式确定 GAC 中是否安装了 .NET 程序集?

如果程序集已在本地计算机上的 GAC(全局程序集缓存)中注册,以编程方式检查的最简单方法是什么?是否有一些易于使用的 .NET API,我可以将它提供给程序集 DLL 或程序集对象本身的位置,以检查它是否存在于本地计算机上的 GAC 中?在我的情况下,我正在检查的程序集将已经加载到程序检查的当前 AppDomain 中,所以我不确定调用Assembly.ReflectionOnlyLoad和捕获异常是否会像我在其他帖子中看到的那样工作,而且这看起来有点 hacky .

理想情况下,我想避免调用外部可执行文件gacutil.exe来检查。

0 投票
1 回答
331 浏览

.net - GAC dll无法卸载

我试图从我的GAC中卸载一个dll ,但我不能这样做。

当我运行以下命令gacutil -u AssemblyName时,我收到错误消息: The assembly is for atleast one application required。(翻译自我原来的德语信息,上面写着:Die Assembly ist für mindestens eine Anwendung erforderlich。)

我怎样才能弄清楚是什么应用程序阻止了我的卸载,我已经卸载了所有对我来说似乎合乎逻辑的东西。也许还有一些注册表项或一些东西?!?

希望你能帮助我。

0 投票
1 回答
2302 浏览

c# - Visual Studio 使用来自较新目标框架的程序集

我正在针对目标框架进行开发.NET Framework 3.5。一个项目Logger使用以下库

这是项目中的一个引用程序集。

应用程序MyApp具有对项目的项目引用Logger,因此间接引用Newtonsoft.Json.dll.

将该Copy Local属性设置为true将强制Newtonsoft.Json.dll复制到输出目录。编译MyApp也会将其复制Newtonsoft.Json.dll到相应的输出目录中。请注意,Newtonsoft.Json.dllGAC中没有

到目前为止还好。

现在我将以下库安装到.NET Framework 4.0GAC ( %windir%\Microsoft.NET\assembly):

将此库安装在 GAC.NET Framework 4.0中将导致引用的项目Newtonsoft.Json.dll不再复制到MyApp. 但它仍然被复制到Logger.

我试图向自己解释这种行为:引用的项目Newtonsoft.Json.dll被复制到输出目录,Logger因为它的Copy Local属性设置为true.

但我不明白为什么Newtonsoft.Json.dll不再将其复制到MyApp. 我安装到 GAC 的库.NET Framework 4.0应该(在我看来)对构建系统不“可见”,因为我的项目是针对.NET Framework 3.5.

在运行时会有一个System.IO.FileNotFoundException因为Newtonsoft.Json.dll找不到库(这对我来说很清楚,因为库位于 4.0 GAC 中,而不是 GAC 3.5 使用的MyApp)。

  • 为什么目标框架 3.5 项目的构建系统知道 GAC 中的程序集.NET Framework 4.0
  • 如何将Newtonsoft.Json.dll目标框架3.5引用的本地复制到GAC 4.0中MyApp有a时的输出目录?Newtonsoft.Json.dll
0 投票
0 回答
368 浏览

.net - GAC 中引用的程序集指向 C:\WIndows\assembly\tmp 下的副本

我试图查看我的应用程序在运行时引用了哪个版本的程序集。我知道该程序集安装在 GAC 中,因为它是通过 MSI 安装的第三方商业产品,它在我运行时列出gacutil /l,我还可以在下面的文件夹中看到它C:\Windows\Microsoft.NET\assembly\GAC_MSIL

我正在使用Process Explorer和下窗格中显示的引用的 DLL,以查看引用了哪个程序集,并且我发现引用的程序集位于C:\Windows\assembly\tmp\NYIEPEO0\. 当我尝试在 Windows 资源管理器中浏览该文件夹时(当应用程序仍在运行并且引用的程序集仍在 Process Explorer 中显示时),它说它不存在或不可访问。此外,Process Explorer 没有显示任何详细信息——版本、描述等——所以我无法确定它是哪个版本的程序集。

我的问题是:为什么引用的程序集位于“tmp”文件夹下方而不是它实际所在的位置(我已经看到诸如此类的消息来源说它与安装程序集有关,但程序集已经安装在正确的位置,正如我上面指出的那样),我可以在 GAC 中禁用该行为,以便在运行时从其正确位置引用所有程序集吗?

0 投票
4 回答
9859 浏览

visual-studio - 无法加载接收器程序集 - FileNotFoundException

努力解决这个问题,当我的功能中没有 EventReceivers 时,项目构建和部署,当我这样做时失败。我不完全确定 FileNotFoundException 指的是哪个文件

视觉工作室中给出的错误

装配 Binging 日志查看器

p>

帮助