2013-10-14 3 views
1

У меня есть программа, которая вызывает установщик msi. После успешной установки пакета msi я попытался загрузить сборку, добавленную пакетом msi в GAC. Я не могу загрузить сборку, но эта конкретная сборка добавляется в 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, который присутствует до того, как программа будет выполнена. Есть ли способ, которым я могу перезагрузить это?

+0

Я считаю, что он кэширует результат –

+0

, вы можете попробовать сделать первый тест в другом appdomain –

+1

Вы пытались использовать полное имя сборки? – terrybozzio

ответ

1

Псевдокод как отправлено, конечно, не удастся. Среда CLR запоминает предыдущие сбои Assembly.Load() и после этого будет неуспешно их, даже если сборка станет доступной.

Непонятно, почему вы пытаетесь снова загрузить сборку. Продвигайтесь вперед, предполагая, что он правильно установлен, если установка не завершилась неудачей или просто всегда устанавливается и оставлять ее установщику, чтобы обнаружить, что сборка уже присутствует. Если это нецелесообразно, вам необходимо использовать IAssemblyCache interface для проверки наличия метода QueryAssemblyInfo().

Смежные вопросы