Подтвердить что ты не робот

Что делает stdole.dll?

У нас есть большое приложение С# (.net 2.0), которое использует наш собственный компонент С++ COM и стороннюю библиотеку сканеров отпечатков пальцев, также доступную через COM. Мы столкнулись с проблемой, когда на производстве некоторые события из библиотеки отпечатков пальцев не запускаются в приложение С#, хотя события из нашего собственного компонента С++ COM запускаются и получаются просто отлично.

Используя MSINFO32 для сравнения загруженных модулей в рабочей системе с системами, находящимися в неисправной системе, мы определили, что это было вызвано тем, что STDOLE.DLL не был в GAC и, следовательно, не загружен в неисправный процесс.

Перетаскивание этого файла в вызванные GAC события прекратилось из библиотеки COM отпечатков пальцев.

Так что делает stdole.dll? Он размером 16k, поэтому его не может быть много... это какая-то ссылка на другую библиотеку, такую ​​как STDOLE32? Почему его отсутствие вызывает такое странное поведение?

Как мы распространяем stdole.dll? Это приложение для развертывания XCOPY, и мы не используем GAC. Должны ли мы упаковать его в качестве ресурса и использовать System.EnterpriseServices.Internal.Publish.GacInstall, чтобы обеспечить его в GAC?

4b9b3361

Ответ 2

У меня была та же проблема. Я просто удалил ссылку из приложения и перекомпилировал. Пропустили все пройденные тесты. Затем перераспределялся без dll, и все это сработало.

Я не знаю, как ссылка на это попала в проект в первую очередь. Это устаревшее приложение, должно быть, было давно.

Саймон

Ответ 3

Эта проблема также обсуждается здесь: Почему Visual Studio 2015 добавляет в проект проект stdole.dll и Microsoft.AnalysisServices.AdomdClient.dll?

Обновление старого проекта до VS 2015 - это то, что вызвало запуск stdole.dll в проект в этом случае.

Если ссылка на библиотеку имеет опцию "Вставить типы взаимодействия" в свойствах, это предпочтительнее, и после этого может не понадобиться stdole.dll. Просто установите Embed Interop Types=true в свойствах ссылки.

Библиотеки, которые разрешают это, включают библиотеки MS Office, такие как Office, Excel, Core. Пример того, который не является Crystal Reports.

Hans Passant категорически не рекомендуется Embed Interop Types=false здесь: В чем разница. Вставить Interop Типы true и false в Visual Studio?

Ответ 4

Мне также пришлось добавить ссылку на мой проект для stdole. Несмотря на то, что у меня нет ссылок на него (это простое графическое приложение), у 2 наших пользователей появлялись ошибки, которые он отсутствовал. Может быть, они работают только с .net 2.0, когда это приложение 3.5. Я понял, почему.

Я также опубликовал на вкладке свойств проекта и выбранных файлов приложений, а затем включил развернутую stdole. Надеюсь, что это сработает.

Ответ 5

В нашем проекте IDispatch couses используется stdole.dll. Мы изменили его на объект и удалили IDispatch, а затем удалили stdole из ссылок.