2013-10-14 1 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

다른 appdomain에서 첫 번째 테스트를 수행 할 수 있습니다 –

+1

정규화 된 어셈블리 이름을 사용해 보았습니까? – terrybozzio

답변

1

게시 된 의사 코드는 확실히 실패합니다. CLR은 이전 Assembly.Load() 실패를 기억하고 어셈블리가 사용 가능 해지더라도 나중에 일관되게 실패합니다.

왜 어셈블리를 다시로드하려고하는지 명확하지 않습니다. 설치가 실패하지 않았 으면 올바르게 설치되었다고 가정하거나 설치 프로그램에 항상 설치하고 남겨두고 어셈블리가 이미 있는지 감지하십시오. 이것이 실용적이지 않다면 IAssemblyCache interface을 사용하여 QueryAssemblyInfo() 메소드가 있는지 확인해야합니다.

관련 문제