2013-10-14 62 views
1

我有一個調用msi安裝程序的程序。 msi包安裝成功後,我嘗試加載由GAC中的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"); 
} 

。 不知何故,我認爲這與程序執行前存在的GAC列表有關。有什麼方法可以重新加載?

+0

我認爲它的緩存結果 –

+0

您可以嘗試在不同的應用程序域中執行第一個測試 –

+1

您是否嘗試過使用完全限定的程序集名稱? – terrybozzio

回答

1

發佈的僞代碼肯定會失敗。 CLR會記住以前的Assembly.Load()失敗,並且在之後會一直失敗,即使程序集變得可用。

目前尚不清楚爲什麼您試圖再次加載程序集。如果安裝沒有失敗,或者只是總是安裝,並且讓安裝程序檢測到程序集已經存在,則可以通過假設它已正確安裝。如果這不可行,那麼你需要使用IAssemblyCache interface來檢查是否存在QueryAssemblyInfo()方法。

相關問題