Я использую 32-битную версию win7 в виртуальной машине.Я пытаюсь сослаться на 5 ячеек (VB6) в моем проекте .net.Эти библиотеки (и их зависимости) зарегистрированы нормально, так как я могу использовать их изначально, поскольку они являются частью другого приложения, и это приложение работает нормально.
Я пытаюсь установить ссылку на любой из них непосредственно в vs, и я получаю сообщение об ошибке - Библиотека не зарегистрирована (исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTRurable)).
Однако, если яустановить ссылку на другой компонент com (на который я не хочу ссылаться, но который, в свою очередь, ссылается на эти библиотеки), я нахожу, что ссылки на эти команды (на которые я хочу ссылаться) правильно устанавливаются в сравнении с Iпросто нужно удалить ссылку на нежелательную DLL, и все, кажется, хорошо идти.
Если я смотрю на GUID и детали версии одного из успешно ссылающихся компонентов, они кажутся такими же, какGUID и версия, которая появляется в заголовке формы ошибки, когда я безуспешно пытаюсь установить ссылку на тот же компонент напрямую.
Кстати, я пытался восстановить установку VS безрезультатно
Мне было интересно, если кто-то может объяснить, что я делаю неправильно.
РЕДАКТИРОВАТЬ: продолжение после Ганса Suggestion
Итак, я запустил
tlbimp mylib.dll
, и он вернул ошибку TI1006 - Выходные данные перезаписывают входной файл.Поэтому, найдя следующие предложения, я затем выдал
tlbimp mylib.dll /OUT:interop.mylib.dll
, и это вернуло ошибку
TlbImp: warning TI3011: Импортер библиотеки типов обнаружил интерфейс, не производный от IUnknown: '_HiddenInterface'.Интерфейс пропущен.TlbImp: ошибка TI1033: не удается найти тип 'ADODB._Recordset_Deprecated' в 'ADODB, версия = 7.0.3300.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a'.Может быть несоответствие между ссылочной сборкой и библиотекой типов.
Но я не уверен, является ли это красной сельдью, поскольку на эту библиотеку можно ссылаться при успешной ссылке на другую библиотеку DLL более высокого уровня.Я пытался с DLL, которая не ссылается на ADODB и, кажется, работает с использованием tlbimp.Так, например,
tlbimp myNONADODBlib.dll /OUT:interop.myNONADODBlib.dll
работает из командной строки.Однако
tlbimp myNONADODBlib.dll
все еще генерирует ошибку TI1006 - выходной файл перезапишет входной файл, и я не могу сослаться на это в свой проект .net
РЕДАКТИРОВАТЬ:
Кажется, чтобыть проблема с ADO и Win7 SP1.http://support.microsoft.com/kb/2517589, который будет учитывать устаревшее сообщение об ошибке (TI1033), которое я получаю, но не потому, что VS не удалось создать CCW для DLL, я могу вручную создать CCW через tlbimp.(12/03/28 10:40):
Таким образом, я восстановил пакет с предложенным tlb.Теперь я могу успешно запустить
tlbimp mylib.dll
, не получая никаких сообщений об ошибках, и кажется, что оно успешно завершено.Однако, когда я пытаюсь добавить ссылку на эту DLL в VS, я все равно получаю то же самое оригинальное сообщение об ошибке (Библиотека не зарегистрирована (исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTRurable))).Я проверил реестр и регистрация выглядит нормально, то есть он указывает на правильный путь - мне интересно, если это проблема типа разрешений - но я работаю против администратора.
РЕДАКТИРОВАТЬ (12 /28.03. 10:15):
Так что я закончил тем, что создал новый абсолютно новый виртуальный компьютер с той же средой - и он работал нормально.Так что я понятия не имею, что происходит, кроме некоторого повреждения реестра, возможно!
Многие, спасибо
Саймон.