Не удается получить работу VB.NET DLL, на которую ссылается клиент VB6 в сценарии без регистрации

Я пытаюсь получить доступ к 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 DLL (.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>

Дайте ему то же имя, что и exe vb6 (например, "foo.exe.config", чтобы соответствовать "foo.exe" ) и поместите его в тот же каталог, что и .exe. Если вы хотите использовать VB6 IDE для отладки вашего кода vb6, который использует эту библиотеку, вам также понадобится vb6.exe.config в c:\program files\microsoft visual studio\vb98