FileNotFoundException при использовании сборки Interop (даже если файл существует)

Я пытаюсь автоматизировать действия против некоторых внутренних средств управления браузером ActiveX.

Я добавил ссылку на тип COM в свой код C#, который автоматически генерирует Interop.AssemblyName.dll.

2 недели назад, когда я тестировал это, он работал как шарм, однако попытка того же кода теперь терпит неудачу с FileNotFoundException при попытке получить ссылку на какой-то тип, найденный в сборке взаимодействия.

Как я могу отследить, что именно является источником ошибки? файл Interop существует рядом с исполняемым файлом моего тестового приложения.

Что еще я должен искать?

Есть ли хороший учебник по совместимости и проблемам такого рода?


person lysergic-acid    schedule 03.08.2011    source источник


Ответы (2)


Он ищет не в том месте... в другом месте, чем вы ожидаете. Самый простой способ отследить это — просмотреть детали исключения, но если это не раскрывает, я бы использовал Process Monitor от Sysinternals, чтобы точно отследить, что происходит.

person Chris B. Behrens    schedule 03.08.2011
comment
вопрос в том, зачем ему искать в другом месте? - person lysergic-acid; 03.08.2011
comment
Не знаю... Мне нужно увидеть код. Но, например, это может быть вызвано сменой конфигураций сборки Debug и Release. - person Chris B. Behrens; 03.08.2011
comment
это все еще отладочная сборка. файл существует в ожидаемом местоположении (проверено с помощью ProcMon). - person lysergic-acid; 03.08.2011
comment
Является ли файл, который генерирует исключение FileNotFoundException, идентифицированным в ProcMon, тем же, что вы ожидаете? Это может быть файл зависимостей, который на самом деле отсутствует. - person Chris B. Behrens; 03.08.2011
comment
Это точно одна из зависимостей, но какая именно и почему она дает сбой, если раньше работала. - person lysergic-acid; 04.08.2011

У меня была эта проблема с созданным мной классом WMI, который подключался к COM-объекту для извлечения информации. WMI записал в журнал событий, что файл Interop для COM-объекта не найден.

Я решил это так же, как сказал Крис Б. Беренс: захватить все дисковые операции ввода-вывода при создании исключения и посмотреть, где он ищет и не может найти файл взаимодействия.

... И да, мой файл взаимодействия все время находился рядом с моим основным приложением, однако этот каталог не был одним из мест, в которых производился поиск, когда система пыталась его найти. странный.

Я скопировал свой файл взаимодействия в C:\Windows\System32\wbem, и он волшебным образом заработал (Windows XP x86).

person Bosco    schedule 20.08.2013