【问题标题】:Changes made to the dll are not reflecting in the Application where I am using this dll对 dll 所做的更改未反映在我使用此 dll 的应用程序中
【发布时间】:2012-01-19 07:26:36
【问题描述】:

我有一个类库项目。我正在通过命令“gacutil /i [dll 的路径]”将项目生成的这个 dll 安装到 GAC 中。此 dll 由 Windows 应用程序使用。当windows应用程序运行时,它成功地访问了dll的功能和属性。 现在我对 dll 进行了一些更改。我已经从 GAC 卸载了原始 dll,并将安装具有所需更改的新 dll。现在,当 Windows 应用程序使用此 dll 时,来自 dll 的新更改不会反映在应用程序中。当我将新的 dll 安装到 GAC 中时,新的更改应该会反映到应用程序中。 两个 dll 的名称、版本和公钥令牌相同。我认为这并不重要,因为我已经卸载了以前的 dll 并将新的 dll 安装到 GAC 中。

我做错了什么吗?请提出解决方案。

感谢和问候, 马尤尔·马哈詹

【问题讨论】:

  • 你做了哪些改变?如果不重新编译您的应用程序,我可以想象到一些变化(例如常量的值)。鉴于你说它是一个“Windows 应用程序”,我不明白为什么它被标记为 asp.net。
  • 你重启windows服务了吗?仅当您停止 Windows 应用程序/服务并重新启动时,这些更改才会反映出来。它将 dll 保存在内存中。
  • 我认为你的建议可行..!我认为它将dll保存在内存中。您能否建议我如何重新启动 Windows 应用程序/服务。我不想以编程方式重新启动这个(taht 意味着不通过我的应用程序)。所以请建议一种手动方式。

标签: c# windows-services gac windows-applications


【解决方案1】:

出于调试目的,我建议您对 dll 进行版本控制,然后将版本打印到您的应用程序以确保其得到更新。包含 System.Reflection 命名空间,代码运行如下:

Assembly assembly = Assembly.LoadFrom("unknown.dll");
label.Text = assembly.GetName().Version.ToString();

【讨论】:

  • 谢谢 Ben,但我不想对我的 dll 进行版本控制。我想要其他方法来解决这个问题。版本控制 dll 不是解决这个问题的方法,因为在开发过程中,如果我进行 1000 次更改,那么我将不得不制作 1000 个版本。我认为这个 dll 会被存储到内存中。我有办法解决这个问题吗..?
猜你喜欢
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
相关资源
最近更新 更多