【问题标题】:assembly loading just after installing it in GAC在 GAC 中安装后的程序集加载
【发布时间】:2013-10-14 15:29:35
【问题描述】:

我有一个调用 msi 安装程序的程序。成功安装 msi 包后,我尝试加载由 gac 中的 msi 包添加的程序集。我无法加载程序集,但此特定程序集已添加到 GAC。当我第二次运行程序时,程序集被正确加载。 这是伪代码

load assembly(assemblyname)
{
 if(!Assembly.load(assemblyname))
 msi.install();
 Assembly assembly =Assembly.load(assemblyname)
 if(assembly == null)
  console.writeline("assembly not loaded"); 
}

如果尚未安装 msi 包,当我第一次运行此功能时,我总是会得到未加载的程序集。 不知何故,我认为这与程序执行之前存在的 GAC 列表有关。有没有办法让我重新加载这个?

【问题讨论】:

  • 我认为它正在缓存结果
  • 你可以尝试在不同的应用程序域中进行第一次测试
  • 您是否尝试过使用完全限定的程序集名称?
  • msi.install 如何知道何时完成?
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# assemblies


【解决方案1】:

发布的伪代码肯定会失败。 CLR 会记住之前的 Assembly.Load() 失败,并且之后会持续失败,即使程序集可用。

尚不清楚您为何尝试再次加载程序集。如果安装没有失败,则假设它已正确安装,或者只是始终安装并将其留给安装程序来检测组件是否已经存在,从而取得成功。如果这不切实际,那么您需要使用 IAssemblyCache interface 来检查是否存在,QueryAssemblyInfo() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多