2009-10-12 2 views
2

Когда программа установки Windows запускается с ошибкой «Ошибка 1001. Невозможно получить типы установщика в сборке MyService.exe». Поэтому он не может загрузить MyServiceInstaller. Регистрация Fusion показывает мне, что он не работает при попытке найти сборку Data.dll.Могу ли я определить, что вызвало сборку?

Дело в том, что не нужно загружать Data.dll для создания объекта установки службы. Я думал, что загрузка типа не запускалась до того момента, пока не был вызван метод, содержащий эти типы. Некоторые методы MyServiceInstaller ссылаются на типы данных из Data.dll, но не на любой ctor.

Это как если бы действие загрузки MyService.exe или зондирования для MyServiceInstaller вызывало загрузку Data.dll.

Как я понимаю, регистрация сварки не скажет мне, что мне нужно знать. Слишком поздно. Мне нужно знать, что это касается загрузки MyServer.exe или зондирования для MyServiceInstaller, который вызвал загрузку Data.dll в первую очередь.

Существует требование, что Data.dll нельзя разместить рядом с MyService.exe. И действительно, это решает эту проблему. У меня есть пользовательское событие AssemblyResolve, которое загружает Data.dll в обычное время выполнения.

ответ

1

Попробуйте подключить отладчик к установщику и заставить его сломаться при возникновении исключения (вы можете установить это в Visual Studio в Debug/Exceptions). Обычно в установщике должно быть FileNotFoundException или что-то подобное, сбрасываемое внутри, когда сбои сбоя сбоя, которые, вероятно, зацепились где-то в другом месте, но если вы отключаете отладчик, когда исключение составляет , которое было сброшеноне, когда оно необработано) вы можете войти и получить трассировку стека, которая должна помочь вам обнаружить, что именно вызвало проблему.

Вы должны увидеть что-то подобное в трассировке стека:

  • [Uninteresting native and/or external code]
  • SomeClassInYourInstaller.SomeMethod() <-- this is the responsible method
  • SomeOtherStuff.SomeMethod()
  • ...etc...
+0

как присоединить отладчик к installer..i попытался сделать это, но я не могу этого сделать –

0

Возможно, существует переменная экземпляра (field) типа, определенного в Data.dll; когда MyServiceInstaller загружен, типы для всех полей должны быть доступны, даже если они не используются, поскольку класс компилируется, если экземпляр создан.