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

asp.net - 我真的需要使用全局程序集缓存 (GAC) 吗?

多年来我一直在构建 .NET Web 应用程序,但我从未使用过 GAC?

我错过了什么?还是我最好远离它?

0 投票
3 回答
2552 浏览

c# - 如何部署引用一个 DLL 的多个程序?

我们有许多使用互操作和相关 DLL 的项目。所有项目都有单独的 DLL 引用和设置,但基本上它们都使用相同的 DLL。因此,如果在安装/卸载安装程序时有任何 DLL 注册/注销,则会多次产生问题。

此外,如果安装位置更改或 DLL 引用位置更改,上述方法可能会产生问题。

我们需要将 DLL 放在一个位置,并且所有项目都需要使用该位置的 DLL 引用以避免注册/注销问题。但想知道.net 中的实际引用如何用于依赖项。

我们怎么能做到这一点?有没有更好的解决方案或解决方法?

0 投票
2 回答
775 浏览

.net - 如何通过网络自动将程序集安装到 GAC?

我需要为 30 多台服务器安装相同的程序集到 GAC。我宁愿不必对每台服务器进行 RDP 并安装组装手册。是否有通过网络将程序集安装到 GAC 的简单方法?

0 投票
1 回答
3273 浏览

.net - Wix - 将程序集动态注册到 GAC

我正在编写一个 Wix 安装程序来将 .NET 程序集安装到 GAC。简单的...

我的问题是:是否有可能在未来证明这种情况,以便我可以提取在现有网络文件夹中找到的任何程序集并注册它们中的每一个——而不必硬编码确切的程序集名称?这将允许我创建一个可以在未来反复重复使用的单个 MSI。

现在我的代码指向一个单独的 DLL,看起来像这样:

0 投票
5 回答
12066 浏览

excel - Microsoft Office 互操作程序集参考

我有一个在 Visual Studio 2005 中开发的应用程序,我正在使用 ClickOnce 进行部署。我的解决方案包含两个项目——一个用 VB 编码的用户界面层和一个用 C# 编码的类库。我的 C# 类库有一些使用 Outlook 和 Excel 互操作程序集(Microsoft.Office.Interop.Outlook 和 Microsoft.Office.Interop.Excel,均为 11 版)的代码。这是我的问题。

  1. 虽然我还没有发现这是绝对的,但我的理解是,您必须拥有适当版本的 Office 应用程序 (Outlook/Excel) 才能安装使用互操作程序集的应用程序。这个对吗?

如果 (1. = 是) 那么

您将如何处理您的应用程序将 Interop 程序集仅用于几个功能,而这些功能将仅被总用户群中的少数人使用?如果只有部分用户需要使用这些功能,为什么我必须要求我的应用程序的每个用户都安装 Microsoft Office?这些 Interop 程序集只是.dll文件,那么是什么让它们与其他文件如此不同,以至于您不能只将文件与您的项目一起发布并满足参考,而不管客户端上安装了什么软件?(显然,我对 GAC 及其对 Visual Studio 行为的影响知之甚少。)我很乐意编写自己的代码来检查是否存在使用它们的少数功能所需的 Office 软件。没有 Office,无法访问功能...

别的

如果我对此的理解不正确,那么如何设置我的引用和 ClickOnce 设置,以便用户在尝试安装时不会遇到以下错误?

“无法安装或运行该应用程序。该应用程序要求首先将 Assembly Office 版本 11.0.0.0 安装在全局程序集缓存 (GAC) 中。

请联系您的系统管理员。”

  • 我尝试将我的互操作引用 CopyLocal 属性设置为 True 和 False。
  • 在我的 ClickOnce 应用程序文件列表中,我尝试将这些程序集设置为包含、排除和先决条件。
  • 在我的研究中,我看到有些人的这些引用指向 *C:\WINDOWS\assembly\GAC*,我的指向 *C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11*但我还没有找到改变参考路径的方法。根据http://msdn.microsoft.com/en-us/library/ez524kew(VS.80).aspx你不能添加来自 GAC 的引用,那么其他人是如何管理它的呢?
  • 我尝试将 *C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11* 中的引用复制到我的项目目录并在那里引用它们。

万一

我想我需要知道的主要事情是如何/是否可以在我的出版物中包含这些程序集并满足或绕过 GAC 要求。

在可能的情况下,请尽量直接回答我的具体问题。虽然文章很有帮助,但我已经阅读了很多文章并尝试了很多建议的解决方案,但都没有成功。请记住,我对这一切如何运作的后勤工作缺乏了解。

请原谅我缺乏理解,并感谢您提供的任何帮助。非常感谢!

0 投票
1 回答
2109 浏览

asp.net - 如何将 VB.NET 类添加到 GAC,并在代码隐藏中使用它

我创建了一个 VB.NET 类,并创建了一个强密钥,并使用 GacUtil将其添加到GAC 。那部分进展顺利。该程序集已安装在 GAC 中,并且似乎已正确安装/配置。

仅供参考,该程序集是一个名为 Tester 的类,它公开了一个名为 HelloWorld 的公共静态方法,该方法返回一个字符串“Hello World”。

下一步是使用 Visual Studio 2005、Windows XP SP3 创建一个测试 Web 应用程序(VB.NET 和 ASP.NET 2.0)。我创建了测试 Web 应用程序并将以下内容添加到 web.config 文件的配置部分。

然后我在我的 aspx 页面中添加了一些内联代码,如下所示:

当我在网络浏览器中运行该页面时,确实一切都按预期工作。该页面输出“Hello World”,一切似乎都很好。

但是,我不知道如何在代码隐藏页面中使用此代码。我尝试导入程序集,就像“导入系统”一样,它没有出现在 IntelliSense 中。

此外,当我尝试将程序集添加为对项目的引用时,在已安装程序集的列表中找不到该程序集。我相信这是因为该列表是从注册表中提取的,而不是从已安装程序集的动态列表中提取的。

我的目标是通过 web.config 文件添加程序集,而不是将其添加为项目引用,并在代码隐藏页面中使用程序集。

有任何想法吗?

0 投票
2 回答
7221 浏览

.net - 以编程方式将 .NET 程序集安装到 GAC 中的方法

我需要创建一个小应用程序或脚本来将 .NET 程序集安装到 GAC 中。我读过有几种方法可以做到这一点,包括:

  • 使用gacutil.exe
  • 执行以下代码行:

    new System.EnterpriseServices.Internal.Publish().GACInstall("Foo.dll");

但是,如果我只是在机器上创建了适当的目录并将程序集复制到该目录中会发生什么?GAC 目录的结构如下: C:\Windows\assembly\GAC_MSIL\Foo\<version#>__<public token>\Foo.dll

除了创建文件夹结构并将程序集放入其中之外,上述两种方法是否有什么特别之处?

0 投票
5 回答
3013 浏览

.net - 如何将修改后的 dll 添加到全局程序集缓存?

我的 PC 上安装了 MySQL Connector/NET。我修改了源代码并重新编译了其中一个 dll(MySQL.Data.dll)。已经安装了程序,如何将这个dll添加到全局程序集缓存中?

如果您的回答涉及使用 gacutil.exe,请告诉我在我的 PC 上哪里可以找到它或者我可以在哪里下载它。谢谢!

0 投票
2 回答
1216 浏览

.net - 查看是否有任何应用程序加载了来自 GAC 的 DLL

我正在尝试将我的 DLL 的新副本部署到远程服务器上的 GAC,但我需要确定当前运行的任何进程是否有我要替换的 DLL 的加载副本 - 我想重新启动它们,或者在至少告诉用户。

例如,Biztalk 似乎会在第一次使用它们时加载它需要的 DLL,然后替换它们会将旧副本保留在内存中,直到重新启动主机实例 - 作为部署的一部分,我可以轻松地做到这一点。

有没有办法使用 .NET 来判断哪些进程从 GAC 加载了特定的 DLL?

更新:

一些进一步的调查表明 Process Explorer 都具有此功能,而另一个 Sysinternals 工具ListDLL正是我想要做的。我想知道他们是如何做到的,因为我很想在我的应用程序中复制这个功能,而不必包含和屏幕抓取 ListDLL(如果许可证中甚至允许这样做的话)。

0 投票
3 回答
13997 浏览

windows-7 - 如何手动将程序集复制到 GAC 中?

我正在使用 Windows 7 Ultimate,试图手动将文件复制到 GAC 中。我尝试使用 Windows 资源管理器,但它立即告诉我“访问被拒绝”。我尝试使用具有提升权限的命令行,它说文件已被复制,但我无法在任何地方找到程序集。

我正在更新第三方电子表格组件(GemBox),更新过程涉及手动将新版本的程序集放入开发机器的 GAC 中。有什么建议么?