【发布时间】:2018-12-05 08:47:09
【问题描述】:
我对在 .NET 中使用全局程序集缓存有点陌生,并且对它的工作原理有疑问,因为我无法在网上找到任何东西。
我的 msi(使用 Visual Studio 安装程序扩展创建(使用 Visual Studio 2015))将许多程序集安装到 GAC 和我的应用程序中(这些程序集需要在 GAC 中,因为第 3 方应用程序也需要访问它们)。运行安装程序并启动应用程序后,我注意到当我启动我的应用程序时,来自 GAC 的 dll 副本会在应用程序执行目录中生成。
我的问题是,这就是使用 GAC 程序集的正常工作方式吗?我假设程序集只是从 GAC 加载而不制作本地副本。或者这是我的一些错误以及我如何构建我的应用程序(CopyLocal 设置为 true,但据我了解,这仅对 Visual Studio 很重要,对部署后的实际执行没有影响)。
【问题讨论】:
-
While testing I noticed that when I start my application你的意思是你安装的应用程序或来自 Visual Studio > 调试? -
@DeepakSharma 我在测试机器上安装了应用程序并运行了应用程序。
-
这当然不正常,也没有机制。唯一合理的解释是您的安装程序将它们放在那里,因为您的 bin\Release 目录将它们放在那里。部署到c:\program文件,UAC写保护。
-
@HansPassant 我在安装后检查了所有目录,在我第一次运行应用程序之前,dll 都不存在。
-
好吧,我想微星可以通过它的“自我修复”选项来做到这一点。谷歌“msi self愈”了解更多信息。
标签: c# .net visual-studio gac global-assembly-cache