stdole.dll做什么用?

我们有一个大型的C#(。net 2.0)应用程序,它使用我们自己的C ++ COM组件和第三方指纹扫描程序库,也可以通过COM访问。我们遇到了一个问题,即在生产过程中,指纹库中的一些事件不会被C#应用程序触发,尽管来自我们自己的C ++ COM组件的事件被触发并且收到的很好。 使用MSINFO32将工作系统上加载的模块与发生故障的系统上的模块进行比较,我们确定这是由STDOLE.DLL不在GAC中引起的,因此未加载到故障进程中。 将此文件拖到GAC中会导致事件从指纹COM库恢复正常。 那么stdole.dll做什么?它的大小是16k所以它不能太多......它是否与STDOLE32这样的另一个库有某种联系?它的缺席怎么会导致这种奇怪的行为呢? 我们如何分发stdole.dll?这是一个XCOPY部署应用程序,我们不使用GAC。我们应该将其打包为资源并使用System.EnterpriseServices.Internal.Publish.GacInstall来确保它在GAC中吗?     
已邀请:
似乎stdole.dll是主要的互操作程序集。请参阅MSDN上的Office 2003主互操作程序集。     
此问题也在这里讨论:为什么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强烈反对在此处设置ѭ1:有什么区别设置在Visual Studio中嵌入Interop类型是真还是假?     
我有同样的问题。我刚从应用程序中删除了引用并重新编译。完成所有通过的测试。然后在没有dll的情况下重新部署,这一切都有效。 我不知道如何在项目中首先提到这一点。它是一个遗留应用程序,所以必须在很久以前。 西蒙     
我还必须添加对我的stdole项目的引用。即使我没有任何引用它(它是一个简单的图像应用程序),我们的2个用户遇到了它丢失的错误。可能是因为这是3.5应用程序时它们只运行.net 2.0。我弄明白了为什么。 我还进入了项目属性选项卡,并选择了应用程序文件,然后包含要部署的stdole。希望这会奏效。     
在我们的项目IDispatch couses使用stdole.dll。我们将其更改为object并删除IDispatch,然后从引用中删除stdole。     
在我的情况下,它是一个旧的未使用的Office Word Interop引用...但删除这是不够的:发布配置文件仍然有行复制stdole.dll!
<File Include="bin/stdole.dll"> ...
删除该行(使用“在文件中查找”找到)并从远程服务器上的bin文件夹中删除stdole.dll修复了我的问题。 希望这有助于其他人。     

要回复问题请先登录注册