5

我刚刚完成了从 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

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

4

2 回答 2

20

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

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

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

你会看到:

TlbImp:警告 TI0000:类型库导入器在类型“WMPLib.IWMPNowPlayingHelperDispatch”上遇到属性获取器“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)使用损坏的属性。这是不方便的,因为语法很笨拙,但在其他方面不是问题。

于 2013-04-03T21:27:03.490 回答
0

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

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

即使可以忽略警告消息,但将其放在错误列表中也很烦人。什么有助于消除x86x64;的警告?

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

这在Windows 10; 不能确定其他环境。

对代码进行了轻微修改以适应“新”参考。如果您不需要专门带来警告的构建,您可以尝试一下。请参考附件图片,Build 12.0.10011.x为我工作。

构建 12.0.14393.x

构建 12.0.10011.x

于 2017-08-07T15:39:11.563 回答