Что делает stdole.dll? - PullRequest
       25

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

39 голосов
/ 02 октября 2008

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

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

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

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

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

Ответы [ 6 ]

22 голосов
/ 02 октября 2008

Кажется, что stdole.dll является основной сборкой взаимодействия . См. Основные сборки Office 2003 на MSDN.

3 голосов
/ 21 сентября 2016

Эта проблема также обсуждается здесь: Почему 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.

Ганс Пассант настоятельно не рекомендует настройка Embed Interop Types=false здесь: В чем разница настройки Embed Interop Types true и false в Visual Studio?

2 голосов
/ 03 апреля 2010

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

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

Simon

0 голосов
/ 20 марта 2018

В моем случае это была старая неиспользуемая ссылка на Office Word Interop ... но удаления было недостаточно: в профиле публикации все еще была строка для копирования stdole.dll!

<File Include="bin/stdole.dll"> ...

Удаление этой строки (найденной с помощью «Найти в файлах») и удаление stdole.dll из папки bin на удаленном сервере устранили мою проблему.

Надеюсь, это поможет кому-то еще.

0 голосов
/ 07 июня 2013

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

0 голосов
/ 19 августа 2009

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

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

...