【问题标题】:C# application copies files from GAC to execution folderC# 应用程序将文件从 GAC 复制到执行文件夹
【发布时间】: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


【解决方案1】:

根据 Hans 的意见,问题出在我的 msi 上,与 GAC 无关。虽然 msi 将程序集安装到 GAC 而不是执行目录,但当应用程序运行时,创建文件的是 msi“自我修复”,它们不会从 GAC 复制。

【讨论】:

    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2018-07-28
    • 2013-05-21
    相关资源
    最近更新 更多