问题标签 [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.
.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,我的应用程序都没有运行。他们都抱怨缺少System或System.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),因此我必须将文件复制到客户站点。
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 中也是如此吗?如果是这样,为什么我的应用程序找不到它?
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 失败。
c# - 如何将 DLL 添加到 GAC
这是我的代码:
如何将 DLL 添加到程序集文件夹?
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
?
c# - 如何以编程方式确定 GAC 中是否安装了 .NET 程序集?
如果程序集已在本地计算机上的 GAC(全局程序集缓存)中注册,以编程方式检查的最简单方法是什么?是否有一些易于使用的 .NET API,我可以将它提供给程序集 DLL 或程序集对象本身的位置,以检查它是否存在于本地计算机上的 GAC 中?在我的情况下,我正在检查的程序集将已经加载到程序检查的当前 AppDomain 中,所以我不确定调用Assembly.ReflectionOnlyLoad
和捕获异常是否会像我在其他帖子中看到的那样工作,而且这看起来有点 hacky .
理想情况下,我想避免调用外部可执行文件gacutil.exe
来检查。
.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
。)
我怎样才能弄清楚是什么应用程序阻止了我的卸载,我已经卸载了所有对我来说似乎合乎逻辑的东西。也许还有一些注册表项或一些东西?!?
希望你能帮助我。
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.dll
GAC中没有
到目前为止还好。
现在我将以下库安装到.NET Framework 4.0
GAC ( %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
.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 中禁用该行为,以便在运行时从其正确位置引用所有程序集吗?
visual-studio - 无法加载接收器程序集 - FileNotFoundException
努力解决这个问题,当我的功能中没有 EventReceivers 时,项目构建和部署,当我这样做时失败。我不完全确定 FileNotFoundException 指的是哪个文件
视觉工作室中给出的错误
装配 Binging 日志查看器
p>帮助