首先,我需要使用第三方ActiveX控件。
接下来,我必须使用stdole库为第三方控件提供一些图像。
在默认设置下进行编译时,会收到一些警告:
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\Interop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly.
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly.
很容易,我将遵循该建议并将“嵌入互操作类型”设置为false,以供stdole引用。一切看起来都很好,直到我现在转到客户端计算机为止,突然之间应用程序抛出了这个错误:
Could not load file or assembly 'stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
因此,我想这不会发生(尽管我不确定为什么要删除stdole上的interop互操作会导致整个库无法找到)。
好吧,让我们走另一条路,将Embed Interop标记为true。
哎呀!编译错误:
Error 2 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX
Error 1 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing the 'GuidAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX
那么,关于如何摆脱警告并拥有可以构建和运行的任何建议?
更新
汉斯·帕桑特(Hans Passant)发表了确实能解决问题的答案,作为评论。如果他将其重新发布为答案,我会接受。不幸的是,我还有一个标准的问题,就是将设置为“复制本地”的DLL很好地复制到其项目的发布文件夹中,但随后不会移动到该解决方案的最终发布文件夹(一个单独的可执行文件)。我现在通过在可执行文件中添加对stdole的引用来解决该问题。我想这可能已经足够了。
最佳答案
汉斯·帕桑特(Hans Passant)的回答:
您不能为ActiveX组件嵌入类型。目标计算机缺少stdole的PIA,请尝试将“复制本地”属性设置为true,并复制生成的stdole.dll。
关于c# - 无法静音嵌入互操作警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11102718/