问题标签 [gac]

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 投票
3 回答
6845 浏览

c# - COM 注册和 GAC

我在 Visual Studio 2005 中有一个 Web 项目、一个 C# 库项目和一个 Web 设置项目。该 Web 项目需要 C# 库需要在 GAC 中注册。这很简单,只需将 GAC 文件夹添加到安装项目并将 C# 库的主要输出放在那里。C# 库还需要为 COM 互操作注册。我单击选择 GAC 文件夹中的主输出并将 Register 属性更改为 vsdrpCOM。我构建了安装项目并运行它,但 DLL 从未为 COM 注册。

这对我来说并不奇怪。我总是必须添加一个安装程序类,它有一个自定义操作,它使用 RegistrationServices.RegisterAssembly 正确注册我的 COM DLL。因此,我将多年来接受的这种解决方法应用于我的情况。现在,我发现在安装项目的 GAC 文件夹中分配给主要输出的自定义操作甚至会阻止安装项目的构建。

我一直觉得我在破解 .NET 和 COM 以更好地处理设置和部署项目。解决我的问题的正确方法是什么?

0 投票
3 回答
903 浏览

c# - 如何在全局程序集缓存中配置程序集?

有没有办法在 GAC 中配置程序集?我想使用 System.Configuration 向我的程序集添加自定义配置。

默尔

0 投票
1 回答
425 浏览

visual-studio-2008 - 如何忽略来自 Cassini 的 GAC 引用?

我在 GAC 中有一个程序集,当我调试 Web 应用程序时会加载它。但是,我已经在我正在调试的 Web 应用程序中更改了该程序集,但 VS2008/Cassini 正在 GAC 中选择该程序集。

如何让 VS2008/Cassini 使用我正在调试的那个?

0 投票
2 回答
5707 浏览

.net - 如何使发布者策略文件重定向程序集请求

我在工作中创建了一个通用库,它安装在我们测试服务器上的 GAC 中。我最近更新了它,我希望我们所有的应用程序都使用这个更新。我创建了一个发布者策略程序集并将其与更新一起安装在 GAC 中,但是当 Web 应用程序加载 Leggett.Common 1.0.0.0 时,它不会重定向到 Leggett.Common 1.1.0.0。

我在网络驱动器上有通用程序集(实际上有五个,但让我们保持简单),我在它旁边创建了发布者策略 xml 文件,然后使用 al.exe 在同一文件夹中创建发布者策略程序集。之后,我将更新的程序集放入 GAC,然后将发布者策略程序集放入 GAC。

公共程序集是“Leggett.Common.dll”,发布者策略文件是“1.1.Leggett.Common.policy”,发布者策略程序集是“policy.1.1.Leggett.Common.dll”。

发布者策略文件的 XML 如下所示:

我究竟做错了什么?

澄清
我正在我的本地开发机器上测试这个,因为开发人员无权访问测试服务器。

0 投票
2 回答
3753 浏览

.net - machine.config 中忽略了 .NET 程序集绑定配置

我有一种情况,我需要能够根据它们的部分名称在 GAC 中加载程序集。为此,我在 app.config 文件中添加了以下内容:

这正是我想要的方式。但是,如果我在 machine.config 文件中放置相同的元素,它似乎会被忽略,并且在尝试加载 MyAssembly 时会出现 FileNotFoundExceptions。

以下是元素在我的app.config中时的程序集绑定日志,并且绑定成功:

将其与我的配置在 machine.config 中时的日志进行对比,并且绑定失败:

问题似乎是第四行,“Policy not being applied to reference at this time”。但是,关于此消息的含义或如何解决它,我几乎找不到文档。

如何让框架识别我的 <runtime> 元素?

提前致谢!

0 投票
5 回答
7107 浏览

asp.net - 为什么 ASP.NET 由于 GAC 的权限而失败?

我正在尝试在 XP 机器上运行 ASP.NET 2.0 应用程序。据我所知,一切都配置正确。但是,我收到以下消息:

服务器应用程序不可用

并且每次在应用程序事件日志中出现两个事件:

aspnet_wp.exe (PID: 3352) 意外停止。

无法执行请求,因为 ASP.NET 进程标识没有对全局程序集缓存的读取权限。错误:0x80070005 访问被拒绝。

以前,ASP.NET 应用程序在这台机器上运行良好。

我尝试了以下步骤,但没有运气:

  • 我已将站点主目录的读取权限授予 ASPNET 帐户
  • 我已经使用 aspnet_regiis -i 重新安装了 ASP.NET 2.0
  • 我已使用 aspnet_regiis -ga <my machine name>\ASPNET 授予 ASPNET 帐户权限
  • 我已使用 CACLS %WINDIR%\assembly /e /t /p <my machine name>\ASPNET:R 将 GAC 的读取权限授予 ASPNET 帐户
  • 我已在 IIS 中将该站点的 ASP.NET 版本设置为 2.0

我不确定我还能做什么!


使用 Process Monitor 直接导致了我的问题。非常感谢 Mun 的提示。

这是一个非常模糊的问题:我之前使用了程序集绑定日志查看器 (fuslogvw.exe),并将其设置为使用自定义路径选项将所有绑定记录到磁盘。但是,ASPNET 帐户没有对该自定义路径的权限。因此,恢复使用默认路径解决了该问题。授予对 ASPNET 帐户的自定义路径的读/写权限也有效,禁用绑定日志记录也是如此。

0 投票
2 回答
1551 浏览

visual-studio - 当程序集在 GAC 中时,Visual Studio 单元测试会抛出 MissingMethodException?

我的应用程序包含一段在组件服务内部执行的代码,因此我们需要在 GAC 中注册我们的业务规则层(及其依赖项)。这些依赖项之一是 FooCore.dll,它包含对整个应用程序可见的类和服务。

一切正常,直到我在 FooCore 的一个类中添加了一个新方法。现在,当我运行单元测试时,任何调用此新方法的测试都会引发 MissingMethodException,即使我使用最新版本的程序集更新了 GAC。唯一的解决方法是在运行测试之前从 GAC 中删除 FooCore。

我尝试了以下事情:

  • 重建整个解决方案,刷新 GAC 中的内容,然后运行测试 = 失败
  • 在测试项目中删除并重新添加了 FooCore 程序集引用 = 失败
  • 确保 FooCore 在 properties = failure 中设置为“Copy Local”

我可以做些什么来确保 VSTS 从其明确定义的位置而不是从 GAC 加载引用的程序集?

0 投票
8 回答
8107 浏览

.net - 向 GAC 注册/安装程序集的“正确”方式是什么?

似乎有许多不同的方法可以向 GAC 注册程序集,例如,它们“工作”。但是,“正确”的做法是什么?

回应 Lou Franco(和 gacutil):

我正在使用 Gacutil 进行开发,但在我看来这不是安装它的正确方法,因为 gacutil 不包含在 .NET 1.1 之后的基本 .NET 实用程序中 - 它只是一个开发工具。

附加:Gacutil(如下面的回复所示)不可再分发,因此不应在您打算提供给非开发人员的任何应用程序中使用。又名,客户。请参阅Aaron Stebner 的这篇博文(和评论)

作为对使用 WIX 的回应:

WIX 可能很棒,但它是如何在幕后工作的?哪些细节使 WIX 安装程序集的方式成为正确的安装方式?它是如何查找的?它是系统/.NET 调用吗?是否需要在 System32 中某处埋藏的 dll 中进行调用?

(编辑:看起来 WIX 在后台使用 MSI。请参阅我在接受的答案中的评论。)

最终编辑:看起来将程序集安装到 GAC 的正确方法是使用 Windows 安装程序,仅此而已。我要试试Wix。谢谢大家!

0 投票
4 回答
7626 浏览

.net - 如果我在 GAC 中有两个同名的程序集,我如何告诉 .Net 使用哪个程序集?

我在全局程序集缓存中有两个名称相同但版本号不同的程序集。如何告诉我的程序要引用哪个版本?

作为记录,这是一个 ASP.Net 网站中的 VB.Net 页面。

0 投票
3 回答
323 浏览

.net - 如何物理获取存储在 GAC 中的所有版本的程序集?

我在 GAC(全局程序集缓存)中有相同程序集的 3 个版本,但是当我进入框架文件夹时,我实际上需要一个特定版本,即

c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\

位于文件夹中的程序集是最新版本。

我可以实际检索添加到 GAC 中的第一个版本吗?