构建与COM引用(版本1.0类型库)和VS 2010相关的警告

我刚刚完成了从Visual Studio 2008到Visual Studio 2010的一系列C#项目的重组和升级。此外,所有项目都更改为以.NET 4.0运行时为目标。 一切都成功构建但是,我现在得到一堆与我的应用程序所依赖的COM引用相关的警告。 其中一个警告如下。 每次构建解决方案时,我都会收到类似于下面的100个警告。

Warning 60 Type library importer encountered a property getter 'ClearTopCardQue' on type 'FuelDirectOLETLB.FuelDirectOLE' without a valid return type. The importer will attempt to import this property as a method instead. c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets 1558 9 FDServer 

我已经打电话给第三方供应商创作了我引用的对象无济于事。 他们建议我确保我的目标是x86。 他们还说我应该能够针对任何版本的.NET运行时构建我的项目。 就个人而言,我怀疑它与我在Visual Studio 2010 / .NET Runtime 4.0中引用版本1类型库的事实有关,而在我构建VS 2008 / .NET Runtime 3.5之前。 我尝试构建针对所有构建配置(即x86,x64,Any Cpu)并尝试将每个版本的运行时恢复为2.0。 这些警告与我有关,因为我不确定他们的意思。 有人可以提出任何可能有助于我找到这些警告原因的建议/建议吗?

这是一个良性警告,无需担心。 他们只是没有正确地为组件编写IDL。 COM中的属性getter是方法,就像它们在.NET中一样。 该方法必须具有适当的签名和属性才能被视为可以直接转换为.NET属性的有效属性。

这有时会失误。 一个很好的例子是Windows Media Player。 从临时目录中的Visual Studio命令提示符运行此命令:

  Tlbimp.exe c:\windows\system32\wmp.dll 

你会看到:

TlbImp:警告TI0000:类型库导入器在类型为’WMPLib.IWMPNowPlayingHelperDispatch’时遇到属性getter’sessionPlaylistCount’而没有有效的返回类型。 导入器将尝试将此属性作为方法导入。
键入库导入到WMPLib.dll

下一个类型:

  Oleview.exe c:\windows\system32\wmp.dll 

它将类型库反编译回IDL。 选择右窗格中的文本,然后将其复制/粘贴到文本编辑器中。 找到“sessionPlaylistCount”,你会看到:

 [id(0x00000ba3), propget] HRESULT sessionPlaylistCount([out] long* pVal); 

当你将它与其他属性进行比较时,你会看到错误,他们忘记了[retval]属性。

这不是问题,因为Tlbimp.exe只会使它成为一种方法而不是属性。 您可以编写get_sessionPlaylistCount(out count)来使用broken属性。 这是不方便的,因为语法很尴尬,但不是一个问题。

如何删除警告信息(wmp.dll)?

旧问题,但问题仍然存在:

即使警告消息可以被忽略但令人烦恼的是它在错误列表中。 有什么方法可以删除x86x64警告;

我添加了对不同版本的Windows Media Player的引用,并且没有针对这两种CPU架构的警告或错误。

这在Windows 10上运行得很完美; 不能确定其他环境。

对代码进行了轻微修改以适应“新”引用。 如果您不需要专门提出警告的构建,您可以尝试这样做。 请参阅附件图片, Build 12.0.10011.x为我工作。

Build 12.0.14393.x

Build 12.0.10011.x