gpt4 book ai didi

c# - 使用全局程序集缓存 (GAC) - 以其设计的方式

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:39 29 4
gpt4 key购买 nike

以下解决方案是唯一在代码中使用来自 GAC 的库的可能性吗?

Assembly lib = Assembly.Load("MyLibrary, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31f5625abd53197f");

Console.WriteLine(lib.GetType("MyClass").GetMethod("Start").Invoke(obj, null));

我有点困惑 - 我已经阅读了很多关于 GAC 的文章,我知道如何在 GAC 中签署程序集、安装和卸载程序集,但不知道如何使用它,以及它如何帮助程序员 (除了它安全地存储同一库的不同版本)。我希望我可以正常创建类,而不是被迫调用上面介绍的方法。

我不想要任何解决方法,例如:“更改 Windows 注册表”,因为我认为 GAC 不是为此类操作而设计的。我想要一个简单的答案:GAC 的用途是什么,运行时环境是否以某种方式使用它?

当代码变得非常丑陋且难以管理时,使用 GAC 有什么意义?或者也许我错过了什么?也许我应该手动将程序集复制到我的本地文件夹中?但我听说这也很难做到。

最佳答案

GAC 可以帮助您同时安装多个版本的您的(这就是公钥的作用 - 防止名称冲突)程序集,并可用于整台机器,而不仅仅是您的应用程序目录。

是的,使用版本号从 GAC 访问程序集几乎正是 GAC 设计的方式。 ;-)

顺便说一句:你不应该在不需要的时候动态加载东西。

IOW:如果您已经知道类名和程序集版本,则可以只引用该程序集并跳过不仅动态加载程序集而且还通过反射调用方法的相当显着的性能损失。 (而不是例如通过接口(interface)或委托(delegate)重用它们)

关于c# - 使用全局程序集缓存 (GAC) - 以其设计的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386142/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com