1

我有一个调用 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 列表有关。有没有办法让我重新加载这个?

4

1 回答 1

1

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

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

于 2013-10-14T16:21:26.380 回答