Странная ошибка при запуске компонированной сборки - PullRequest
0 голосов
/ 17 марта 2010

Я сталкиваюсь со следующей проблемой при развертывании составной сборки на моем клиенте. COM-компонент должен использоваться приложением vb6. Вот как это делается

1) У меня есть один проект на c #, в котором есть класс с парой методов, доступных для COM

2) В проекте есть ссылки на несколько сборок

3) Я компилирую проект, генерируя папку (с именем dllcom), которая содержит сборку плюс все упомянутые dll

4) Я включаю в папку .bat, который делает следующее:

regasm /u c:\dllcom\LibInsertador.dll
del LibInsertador.tlb
regasm c:\dllcom\LibInsertador.dll /tlb:c:\dllcom\LibInsertador.tlb /codebase c:\dllcom\
pause

5) После локального запуска летучей мыши на многих рабочих станциях моей лаборатории я могу без проблем использовать сгенерированный tlb из моего приложения vb6. Я даже могу обновить dll только с помощью запуска этой летучей мыши, без необходимости перекомпилировать приложение vb6. Я имею в виду, что у меня нет проблем с поиском vb6 и вызовом выставленного com-объекта.

Проблема

6) Я отправляю ЖЕ ПАПКУ своему клиенту

7) Они выполняют .bat локально, без ошибок

8) Они выполняют приложение vb6, vb6 находит основную сборку, кажется, что код .net работает правильно (он даже способен генерировать файл журнала) до тех пор, пока ему не понадобится создать свою первую ссылочную сборку. Затем они получают следующее исключение:

"Не удалось загрузить тип 'GYF.Common.TypeBuilder' из сборки 'GYF_Common, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = ноль'."

Где "GYF.Common" - это сборка, на которую ссылается LibInsertador, а TypeBuilder - класс, содержащийся в GYF.Common. GYF.Common не является подписанной сборкой и не находится в GAC, просто в одной папке с Libinsertador. Согласно .net отражателю, версия верна.

¿Любые идеи о том, что может происходить?

1 Ответ

0 голосов
/ 17 марта 2010

Это работает только случайно на вашей машине. У CLR нет причин искать в каталоге с вашей видимой COM библиотекой DLL какие-либо зависимости. Он будет проверять папку EXE и GAC, чтобы найти их.

Не уверен, как эта авария происходит на вашем компьютере, посмотрите на разрешение сборки с Fuslogvw.exe Может быть, ваша тестовая программа находится в той же папке, что и ваша сборка COM? Правильный способ сделать это - развернуть сборки в GAC (нет / codebase). Важно, чтобы не быть заживо из-за проблемы DLL Hell, которая всегда скрывается за углом с COM.

...