Невозможно заставить работать VB.NET DLL, на которую ссылается клиент VB6 в reg-free сценарии
Я пытаюсь получить доступ к VB.NET DLL (.NET FX 4.0) с клиента VB6 в сценарии без регистрации.
Я пытался следовать примеру с http://msdn.microsoft.com/en-us/library/ms973915.aspx, но безуспешно. Я скачал (ссылка в статье) исходники и скомпилировал, безуспешно (сообщение об ошибке: Ошибка во время выполнения '-2146234341 (8013101b)': Ошибка автоматизации "). Работает из VB6 IDE с использованием зарегистрированной DLL-библиотеки VB.NET.
Я пробовал другие примеры, где.NET DLL создается как COM-класс (с использованием шаблона "COM-класса" из VS2010), со встроенным манифестом для ссылочной DLL или нет, но у меня ничего не получалось.
Может ли кто-нибудь предоставить какой-нибудь простой исходный код с примером манифеста библиотеки VB.NET (.NET FX v4), используемой в клиенте VB6 в режиме без регистрации?
Большое спасибо заранее.
1 ответ
Ошибка времени выполнения "-2146234341 (8013101b)": ошибка автоматизации
Ваша проблема не имеет ничего общего с манифестом, вам нужно сначала ее исправить. Код ошибки: COR_E_NEWER_RUNTIME. Другими словами, ваш класс [ComVisible] не может быть загружен, поскольку он зависит от версии CLR 4. И программа уже загрузила CLR, версия 2, скорее всего, потому что сначала был задан другой класс [ComVisible]. И он попросил версию 2.
Вам понадобится файл app.exe.config, который вынуждает CLR версии 4 загружаться, даже когда кто-то запрашивает версию 2. Он должен выглядеть следующим образом:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Дайте ему то же имя, что и в vb6 exe (например, "foo.exe.config" для соответствия "foo.exe") и поместите его в тот же каталог, что и.exe. Если вы хотите использовать IDE VB6 для отладки кода vb6, который использует эту библиотеку, вам также нужен vb6.exe.config в каталоге c:\program files\microsoft visual studio\vb98