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

c# - GAC 与 JIT

GAC 下的所有内容都经过预编译(nened)吗?如果是这样,那么所有 .NET 都是预编译的,所以 CLR 不可能在运行时优化它们?

就像您在应用程序中使用 List 一样,CLR 将无法优化 List 本身,而只能优化它在您的应用程序中的使用方式?这难道不会违背 JIT 的目的,即在运行时获得大量优化吗?如此有效地失去了 BCL 的所有潜在优化?

0 投票
2 回答
3063 浏览

.net-3.5 - 使用 GAC 时如何获取用于登录生产的堆栈跟踪信息

我想在生产环境中获取用于记录异常等的堆栈跟踪(文件名和行号)信息。DLL 安装在 GAC 中。有没有办法做到这一点?

本文介绍了将 PDB 文件放入 GAC:

您可以轻松发现这些,因为他们会说您需要将调试符号(.pdb 文件)复制到 GAC。就其本身而言,这是行不通的。

我知道这篇文章是指使用 VS 进行调试,但我认为它也可能适用于记录堆栈跟踪。

除了取消选中他们说是可选的优化代码外,我已经按照说明回答了这个问题。

我将 dll 和 pdb 复制到 GAC 中,但仍然没有得到堆栈跟踪信息。这是我在堆栈跟踪的日志文件中得到的内容:

我正在使用 NLog。

我的 NLog 布局是:

${stacktrace:format=Raw} 是相关部分。

0 投票
7 回答
29389 浏览

powershell - 使用 Powershell 在 Gac 中注册文件

是否有一种简单的方法可以在 PowerShell(我想使用 gacutil.exe)中从文本文档中读取路径\程序集并将其注册到 GAC 中?例如,一个 .txt 文件看起来像:

PowerShell 脚本会将其读入流中,然后在找到的每个程序集上运行 gacutil?我想它会是这样的:

0 投票
1 回答
592 浏览

.net - 将 DLL 存储在中央非 GAC 位置

我们正面临一个独特而痛苦的局面。传统上,我们一直使用 GAC 和策略文件来控制 .NET 应用程序的 DLL 版本。但是,我们有一个非常独特的情况,并且遇到了重大问题,因为我们的一些应用程序不尊重策略文件。尤其是引用具有策略文件的 .NET 1.1 dll 的 .NET 2.0 应用程序。

我们在 Windows 应用程序以及大量 Web 应用程序中混合了动态运行(通过反射加载)的项目。我们希望转向更多的“集中式 DLL 存储”,而不是担心 GAC 版本控制。但是我们似乎无法找到一种方法来告诉我们的应用程序“在此处查找任何 DLL”。

查看一些程序集信息节点(http://msdn.microsoft.com/en-us/library/twy1dw1e.aspx),我们可以找到一部分,但我们必须定义每个应该查找的 DLL,这是不可能的,因为我们有大约 200 个不同的应用程序需要定期更新 web.config,因为我们更新了共享 DLL 的版本。

有没有人知道我们如何移动 DLL 引用?CopyLocal 不是一个选项,因为有时我们需要应用程序来使用共享 DLL 的新版本。至少现在,GAC 也不是一个真正的选择。

0 投票
2 回答
2352 浏览

c# - 将 GAC 引用添加到 VS2008 项目时出现问题

好的,所以这不是严格意义上的编程问题,而是与编程相关的问题。

我有一个 C# winforms 项目,我正在尝试添加对 System.Messaging dll 的引用。

但是,当我添加引用时(从“添加引用”对话框的 .net 选项卡),它会显示黄色感叹号警告。

右键单击其他引用将允许我在对象浏览器中查看它们。右键单击 System.Messaging 引用不会。

不过,这里是踢球者......如果我单击另一个引用并滚动浏览对象浏览器中的列表,我可以看到 System.Messaging 条目。

到目前为止,我尝试了多种方法来解决此问题,包括使用 gacutil 在 GAC 中强制重新安装 dll,但它仍然无法正常工作。

有没有人对如何解决这个问题有任何建议?如果我需要提供更多信息,请在评论中留下具体的信息请求。

笔记。操作系统是Vista。

0 投票
1 回答
761 浏览

.net - 安装网站时如何在 GAC 中注册程序集?

我正在开发一个依赖第三方控件的项目。安装后打开网站时,我收到有关这些控件的错误消息,

web.config 文件,每个 dll 都有一个程序集标签。当我删除这些标签时,网站已成功加载,但在打开包含任何这些控件的任何页面时,我有那个错误

所以我需要在安装时在 GAC 中注册那个 dll 吗?

0 投票
5 回答
6025 浏览

c# - 列出从 GAC 实现特定接口的所有 DLL

阿罗哈

给定一个插件架构 (C# / .NET 3.5),插件存储在 GAC 中,我如何列出/加载所有包含实现我的特定接口的类型的 dll?换句话说,我想通过查看 GAC 来调查我的应用程序的哪些插件安装在机器上。

-Edoode

0 投票
3 回答
2935 浏览

asp.net - 更新 GAC 中包含 Web 应用程序的 aspx 页面的 dll

原谅我的编码员,因为我犯了罪。我将一些代码放入 GAC 中的 dll 中,现在我对 GAC 如何真正与 IIS 一起工作感到困惑。

在我们的 Intranet 环境中,我有几个相关的 Web 应用程序(大约 10 个)。每个应用程序都从一个单独的 url 运行,并且可能在其自己的应用程序池中运行。目前所有应用程序都在同一台服务器上,但这不是必需的。这种设置允许我们分别控制、开发和迁移每个应用程序。但是,我们希望每个应用程序的几个部分在我们的所有应用程序中都通用(母版页、登录页、菜单等)。管理层的要求是对这些文件的更改可以是通用的,并且无需必须重新编译和重新迁移每个 Web 应用程序。有很多方法可以完成这项任务,尽管有警告要避免使用 GAC,但这似乎确实是使用虚拟路径提供程序和存储在 GAC 中的 dll 有意义的情况。

我将一个虚拟路径提供程序放在一起,然后将我需要通用的文件和资源嵌入到一个 dll 中。(我本可以让 VPP 从数据库中提取文件,但我希望将文件嵌入 dll 本身会更高效。

并发症 #1

我不希望每个应用程序的开发人员都必须弄乱他们自己的 GAC 来测试和运行他们的应用程序,所以在每个解决方案中我只包含 Virtual Path Provider 项目,并将其结果 dll 复制到本地,(以及如强命名),这意味着提供程序 dll 及其嵌入文件被复制到应用程序的 bin 目录中。只要开发人员在他们的 GAC 中没有这个 dll 的版本(他们不应该),就会使用本地 bin 副本。这允许开发人员轻松更改和测试应用程序的文件和每个应用程序共有的文件。这也意味着除非故意阻止,否则通用 dll 也将存在于生产中的每个应用程序的 bin 目录中。但是,由于 IIS 将始终使用 GAC 版本(如果存在),

我现在认为这是合理的,因为在将应用程序复制到服务器时,我找不到一种简单的方法来同时将 VPP.dll 复制到本地进行开发,但又不复制到 bin 目录。

并发症 #2

实际上对应用程序进行编码以便它始终使用最新版本的 dll 而不是编译它的特定版本似乎是一件相当复杂的事情。(我还没有看到一个很好的例子来说明如何做到这一点,但我认为我需要一系列发布者政策)尝试更明显的答案似乎更容易——在迁移新的 dll 时保持 dll 的版本号不变版本的 VPP dll 到 GAC。这似乎工作正常,直到它没有。

使用服务器上的 Windows /assembly 管理单元,我将 GAC 中我的 dll 的旧版本 v. 1.0.0.0 替换为 v. 1.0.0.0 的更新副本。尽管我在 GAC 中更新了 dll,但我的应用程序继续使用旧版本的代码。重新启动 IIS,甚至完全重新启动服务器似乎都没有帮助。真正让我大吃一惊的是,最终 IIS 会神秘而出人意料地自我纠正,并开始使用来自 GAC 的 dll 的正确副本。

我见过许多这类与 GAC 相关的问题,这些问题似乎都以“突然我的网站又开始正常工作”结束了。我花了一段时间才发现这是 IIS 如何缓存我的强命名 dll 的结果,并且我误用了强命名 dll 应该工作的方式。

接下来,我尝试完全从 GAC 中删除 dll 的版本。因为在 bin 目录中仍然有我的 dll 的副本,所以我预计该过程要么失败,要么恢复/前进到 bin 目录中的版本。但是因为bin中的版本也是1.0.0.0,IIS继续使用dll的缓存副本,现在机器上已经不存在了。(这让我真的困惑了一段时间,因为我对GAC失去了信心版本一直在运行)

最后,我必须确保更新 dll 的唯一方法是从 GAC 中删除 dll 的副本,从 bin 目录中删除 dll 的副本,运行该站点以使其失败,然后将新的将 dll 版本导入 GAC。在此期间启动和停止 IIS 无效。这始终让我的应用程序使用新代码,但是……</p>

如此简单地将新版本的 dll 插入 GAC 并使其新效果无缝传播。

在阅读了一些相关问题之后,我现在正在尝试的是:

  1. 停止 IIS
  2. 更新 GAC 中 dll 的软件(但仍将新 dll 的版本号保留为 1.0.0.0 )
  3. 删除 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files' 文件夹中的所有内容(我认为这会强制重新编译,但这是一个修复的大锤)
  4. 重新启动 IIS。

这似乎是有效的,但似乎不得不去解决所有这些麻烦似乎有什么问题。有没有更简单的方法来强制 IIS 使用 GAC dll 的当前实例?有没有更好的方法来实现我所追求的效果。(一些通用文件 .aspx 和 .xml 文件在各种应用程序之间共享,可以与应用程序本身分开更新。)

编辑:根据 shahkalpesh 的评论,我在 microsoft
http://msdn.microsoft.com/en-us/library/7wd6ex19(VS.80).aspx找到了这个页面

它包括这个小知识:

重定向程序集版本 要将一个版本重定向到另一个版本,请使用该<bindingRedirect>元素。oldVersion 属性可以指定单个版本或一系列版本。例如,<bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/>指定运行时应使用版本 2.0.0.0 而不是 1.1.0.0 和 1.2.0.0 之间的程序集版本。

这意味着与我的 dll 一起,我可以推送一个将所有内容重定向到最新的发布者策略文件。那种缓解了我认为会是噩梦般的政策链的情况,我必须维护从每个可能版本到最新版本的链接......

我会试试这个,看看更新这样的版本是否也会触发 IIS 使用新文件的正确版本(在重置应用程序池之后)

0 投票
4 回答
2154 浏览

c# - .NET:关于 AssemblyVersion,什么定义了二进制兼容性?

对强名称程序集进行哪些更改需要更改 AssemblyVersionAttribute?显然,以可能需要客户端必须进行代码更改的方式更改公共 api 需要增加 AssemblyVersion。但是对于不需要在客户端更改代码的公共 API 的更改呢?例如:

  • 添加公共类或接口?
  • 将公共成员添加到公共类或接口?(编辑:drscroogemcduck 在下面正确指出,将成员添加到接口会影响所有实现者。愚蠢的我。)
  • 增加班级成员的知名度?

在 MSDN 上的某个地方(或者,知道 MS,在一些 MSSE 的个人博客上)必须有明确的文档。但我根本找不到它。请帮忙!

0 投票
1 回答
1531 浏览

c# - 签署程序集后未找到 WCF 方法

我在这样的解决方案中有 3 个项目:

  • WCF 服务:托管几个方法
  • 类库:通过返回其 Soap 客户端的实例充当 WCF 服务的网关
  • WPF 应用程序:通过引用的类库使用服务方法

一切都运行良好......应用程序正在通过库访问soap客户端的实例并相应地使用方法。

现在我签署了我的程序集,一切仍在编译,当我添加新方法并更新库中的服务引用时,新方法出现在应用程序中......但是当运行应用程序并尝试使用方法时,MissingMethodException抛出了 a :

找不到方法:“MusicData.Entities.User DBAccess_Gateway.DBInteraction_Service.DBInteractionGatewayClient.User_Login(System.String, System.String)”。

这是它失败的地方:

我认为这与正在签名的程序集(现在在 gac 中,因为它们已签名?)有关...但是为什么找不到方法?现在没有正确更新已签名的程序集吗?