C# stdole.dll做什么? 我们有一个大的C.NET(.NET 2)应用程序,它使用我们自己的C++ COM组件和第三方指纹扫描库,也可以通过COM访问。我们遇到了一个问题,在生产中,从指纹库中的一些事件不会被触发到C语言应用程序中,尽管我们自己的C++ COM组件中的事件被激发,并且接收得很好。

C# stdole.dll做什么? 我们有一个大的C.NET(.NET 2)应用程序,它使用我们自己的C++ COM组件和第三方指纹扫描库,也可以通过COM访问。我们遇到了一个问题,在生产中,从指纹库中的一些事件不会被触发到C语言应用程序中,尽管我们自己的C++ COM组件中的事件被激发,并且接收得很好。,c#,com,stdole,C#,Com,Stdole,使用MSINFO32将工作系统上加载的模块与故障系统上加载的模块进行比较,我们确定这是由于STDOLE.DLL不在GAC中,因此没有加载到故障进程中造成的 将此文件拖到GAC中会导致事件从指纹COM库中恢复正常 那么stdole.dll做什么呢?它的尺寸是16k,所以不会太大。。。它是指向另一个库(如STDOLE32)的某种链接吗?为什么它的缺失会导致如此奇怪的行为 我们如何分发stdole.dll?这是一个XCOPY部署应用程序,我们不使用GAC。我们是否应该将其打包为资源并使用System.

使用MSINFO32将工作系统上加载的模块与故障系统上加载的模块进行比较,我们确定这是由于STDOLE.DLL不在GAC中,因此没有加载到故障进程中造成的

将此文件拖到GAC中会导致事件从指纹COM库中恢复正常

那么stdole.dll做什么呢?它的尺寸是16k,所以不会太大。。。它是指向另一个库(如STDOLE32)的某种链接吗?为什么它的缺失会导致如此奇怪的行为


我们如何分发stdole.dll?这是一个XCOPY部署应用程序,我们不使用GAC。我们是否应该将其打包为资源并使用System.EnterpriseServices.Internal.Publish.GacInstall来确保它位于GAC中?

看来stdole.dll是一个主互操作程序集。参见

我还必须为我的stdole项目添加一个参考。尽管我没有任何参考资料(这是一个简单的图像应用程序),但我们的两个用户都收到了丢失的错误。这可能是因为当这是一个3.5版本的应用程序时,他们只运行.NET2.0。我已经弄明白了原因


我还开始在“项目属性”选项卡上发布,并选择了应用程序文件,然后包括要部署的stdole。希望这能奏效。

我也有同样的问题。我刚刚从应用程序中删除了引用并重新编译。运行所有通过的测试。然后在没有dll的情况下重新部署,一切正常

我不知道一开始是如何在项目中提到这一点的。这是一个遗留应用程序,所以一定是很久以前的事了


Simon

在我们的项目中,我使用stdole.dll创建了一个数据库。我们将其更改为object并删除IDispatch,然后从引用中删除stdole。

这里也讨论了这个问题:

在本例中,将旧项目升级到VS 2015是导致stdole.dll开始包含在项目中的原因

如果库引用具有在属性中“嵌入互操作类型”的选项,则首选该选项,此后可能不需要stdole.dll。只需在引用的属性中设置
Embed Interop Types=true

允许这样做的库包括MS Office库,如Office、Excel、Core。Crystal Reports就是一个不支持的例子


强烈反对设置
嵌入互操作类型=false
此处:

在我的情况下,它是对Office Word互操作的一个旧的未使用的引用。。。但是删除它是不够的:发布配置文件仍然有一行可以复制stdole.dll

<File Include="bin/stdole.dll"> ...
。。。
删除该行(使用“在文件中查找”)并从远程服务器上的bin文件夹中删除stdole.dll修复了我的问题


希望这对其他人有所帮助。

是的,我在PIA目录中也找到了一份副本。我们的应用程序不使用office组件;这仍然不能解释我们所看到的行为!它可以使用“标准”COM接口,如IFont或IDispatch。似乎.NET中对这些接口的支持需要引用stdole.dll。我搞不懂为什么这个程序集绑定到Office。它可能会工作,但stdole.dll不是一个可再发行的文件,可能会破坏现有的安装,根据这个…(搜索stdole)