【问题标题】:Two different applications using codebase and GAC for loading the same assembly使用代码库和 GAC 加载相同程序集的两个不同应用程序
【发布时间】:2014-08-12 18:44:29
【问题描述】:

我们有 2 个不同的应用程序(使用 .NET 开发):

第一个应用程序:Winservice。

第二个应用程序:桌面应用程序。

桌面应用正在从 GAC 加载程序集。 Winservice 过去做同样的事情,但现在我们需要 Winservice 从另一个位置加载相同的程序集。

但是 GAC 获胜了,我们不能让这个 Winservice(使用 app.config 中的代码库)来加载程序集。它总是得到 GAC 的支持。

如果我们删除 GAC 的那个。有用。但我们需要其他行为。来自 GAC 的桌面和来自代码库中定义路径的 Winservice。

是否可以在不更改程序集版本的情况下做到这一点?

【问题讨论】:

  • 相对于 Winservice 的程序集在哪里?还是未知的动态值?
  • 正在动态加载程序集的位置(使用 CurrentDomain.CreateInstanceAndUnwrap())。从与 Winservice 基本路径无关的位置。
  • @mclaassen 我已经尝试过 currentDomain.AssemblyResolve 但该事件永远不会被触发。可能是因为我们加载程序集的方式。

标签: c# .net .net-assembly gac


【解决方案1】:

如果没有某种修改程序集的变通方法,这是不可能的。简而言之,GAC 总是获胜。时期。如果程序集具有强名称,则始终首先检查 GAC。即使您将其作为字节数组加载到内存中并使用Assembly.Load(byte[]),也会检查强名称,如果它是 GAC 程序集,则会从 GAC 加载。

几个可能的解决方法:

  • 提升程序集版本。
  • 使用不同的强名称密钥退出程序集。构建引用此版本的服务。

【讨论】:

  • 感谢您的坏消息
猜你喜欢
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多