C# 在GAC中安装后立即加载程序集

C# 在GAC中安装后立即加载程序集,c#,assemblies,C#,Assemblies,我有一个调用msi安装程序的程序。成功安装msi包后,我尝试加载由msi包在GAC中添加的程序集。我无法加载程序集,但此特定程序集正在添加到GAC。当我第二次运行程序时,程序集被正确加载。 这是伪代码 load assembly(assemblyname) { if(!Assembly.load(assemblyname)) msi.install(); Assembly assembly =Assembly.load(assemblyname) if(assembly == null)

我有一个调用msi安装程序的程序。成功安装msi包后,我尝试加载由msi包在GAC中添加的程序集。我无法加载程序集,但此特定程序集正在添加到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列表有关,GAC列表在程序执行之前就存在。有什么方法可以重新加载它吗?

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


不清楚您为何再次尝试加载程序集。如果安装没有失败,则假定它已正确安装,或者始终安装,并让安装程序检测程序集是否已存在,从而获得成功。如果这不实用,那么您需要使用QueryAssemblyInfo()方法来检查存在性。

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


不清楚您为何再次尝试加载程序集。如果安装没有失败,则假定它已正确安装,或者始终安装,并让安装程序检测程序集是否已存在,从而获得成功。如果这不实用,那么您需要使用QueryAssemblyInfo()方法来检查是否存在。

我认为它正在缓存结果您可以尝试在其他AppDomain中执行第一个测试您是否尝试过使用完全限定的程序集名称?msi.install如何知道何时完成?我已经编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。我认为这是缓存结果。您可以尝试在其他AppDomain中执行第一个测试。您是否尝试使用完全限定的程序集名称?msi.install如何知道何时完成?我编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。